백발 청년 햄버거 메뉴

목차

     안녕하세요. 백발청년 입니다. 오늘도 동국대학교 홍정모 교수님의 C++ 명강의, 코딩의 초짜도 코딩을 할 수 있게 만들어주는 따라배우기만 하면 되는 따배씨++의 강의노트를 포스팅 해 봅니다. 오늘의 강의 주제는 지역범위(Local Scope)입니다. 강의노트를 포스팅하는 이유는 제 공부에 대한 복습겸 강의 소개 정도 되시겠습니다.

     

     지난번 강의 노트는 아래에서 확인 가능합니다.

     

    10부 : 키워드와 식별자 이름 짓기 https://whiteheadyouth.tistory.com/234

    9부 : 함수에서 여러개의 리턴값 반환하기(C++17) https://whiteheadyouth.tistory.com/228

    8부 : 함수와의 첫 만남 https://whiteheadyouth.tistory.com/222

    7부 : 입출력 스트림과의 첫 만남 https://whiteheadyouth.tistory.com/211

    6부 : 변수와의 첫 만남 https://whiteheadyouth.tistory.com/208

    5부 : 주석을 잘 다는 방법 https://whiteheadyouth.tistory.com/183

    4부 : 프로그램의 구조 https://whiteheadyouth.tistory.com/181

    3부 : 코딩하다 막혔을 때는? https://whiteheadyouth.tistory.com/170

    2부 : 솔루션, 프로젝트 관리 https://whiteheadyouth.tistory.com/161

    1부 : 통합개발환경의 기본적인 사용법 - 윈도우 비주얼 스튜디오 https://whiteheadyouth.tistory.com/155

    0부 : 홍정모 교수님의 따배씨++ 무료로 인강 듣는 방법 https://whiteheadyouth.tistory.com/89 

     

     

    지역범위라는게 알면 쉬운데, 처음에 모르는 상태에서 코딩을 시작하면 헤매는 경우가 많습니다. 어렵지도 않은데, 기본 개념이 머리에 들어 있지 않으면 무의미하게 시간낭비를 하는 경우가 많다죠.

    범위라고 하면 중괄호를 기준으로 합니다. 중괄호 안에 선언이 된 변수는 중괄호 밖을 넘어가면 사라집니다.

     

     

     

     

    x가 메모리에 자리가 잡히고, 0이라는 값으로 초기화가 됩니다. 이는 즉 x가 인스턴스를 갖게되는것, 메모리에 실제 자기의 존재를 갖게되는 것입니다. 닫힌 중괄호 밖으로 넘어가면 x는 사라집니다. 

     

     

    중괄호 안의 중괄호는 영역을 분리시켜주는 것 입니다.

     

     그림에서 x는 각각 다른 영역에 존재합니다. x는 각각 다른 메모리에 대한 식별자입니다. 만약 0으로 하면 둘이 같은걸까요? 공간 자체는 다릅니다. 101호와 102호에 짐이 같은게 있더라도 공간은 다르다는 것입니다. 101호에 냉장고가 있고 102호에 냉장고가 있다 하더라도 101호와 102호는 다른 공간이라는 것이죠.

    위의 코드에서 int x = 0; 과 int x = 1; 을 볼게요. 둘이 다르다면 각각 다른 이름을 주어야 합니다.

    중괄호 안의 x = 1; 과 또 다른 중괄호 안의 x =2;는 각각 다른 공간이지만, main 안의 첫번째 중괄호 안에 있는 x는 같은 공간입니다.

     

    지난번 강의때도 한번 살펴보았던, &x를 이용해서 확인 해 보겠습니다.

    &는 메모리의 어느곳에 데이터가 저장되는지, 메모리의 주소를 알고싶을 때 찍어보는 것입니다.

     

     

     

    디버거를 통해 확인해봅니다. 첫번째 중괄호의 int x = 0;과 두번째 중괄호의 int x = 0;의 메모리 주소가 다름을 확인 할 수 있습니다.

     

     

    이번엔 두번째 중괄호 밑에 다시 첫번째 중괄호 안에 x의 주소를 확인해 보았습니다.

    다름을 확인할 수 있습니다.

     

     

     

     

    이번엔 첫번째 중괄호에만 int x 를 선언해줍니다. 첫번째 중괄호에서는 x 에 0을 넣어주었는데요. 0이라는 값은 들어갔으나, 두번째 중괄호에서 x에 1을 넣어준 후, 다시 첫번째 중괄호의 영역에 들어오니 x의 값은 1로 두번째와 동일하나, 주소는 모두 동일한 것을 알 수 있습니다.

    여기서 x는 전부 같은 메모리를 사용하는 변수이기 때문에 메모리의 주소는 동일한 것 입니다.

     

    홍정모 교수님이 강의 마지막에 남겨주신 숙제 입니다.

    각각 함수로 분리가 되어 있고, 1~3이 각각 어떤 값을 출력하는지 실행도 해보고 코드를 바꾸면 어떻게 달라지는지 알아보라는 숙제입니다.

    힌트로 함수라서 달라질 수도 있겠다 생각하겠지만, 중괄호를 잘 생각해 보세요. 라고 하셨는데요.

    일단 눈으로 보았을 때 예상 값은 #1 = 0, #2 = 123, #3 = 123일 것이라 생각했습니다.

     

    내주신 코드 그대로 코딩을 하고 실행을 해보았습니다.

    #1 = 123, #2 = 0, #3 = 0이 나왔네요.

    제가 생각한 답과 전혀 다른 답이 나왔습니다. 왜 일까요?

     

    지역범위가 달라서인가요?

    그럼 2번째 중괄호에서 int x = 0; 을 지운다면? 오류가 납니다. main 에서 x를 선언한 적이 없으니까요.

    doSomething과 main의 영역이 다르니까 doSomething에서 선언한 x의 값은 main에서의 x의 값에 영향을 주지 않네요.

    그럼 doSomething은 무슨역할을 하는걸까요?

    cout에 123이라는 x의 값만 보여주는게 끝인걸까요?

    그럼 main에서 doSomething 함수를 실행시켜도...... 아?!!!

     

     

    doSomething은 x라는 변수에 123을 대입시키고 cout을 하는 함수였네요.

    그래서 #1의 값이 먼저나오고, main에서 x 의 값이 0이니까, #1은 0이 나오는거고...

    #2의 값은 doSomething(x);를 실행했으니 123이 나오고,

    #3의 값은 기존 main의 값을 주는거네요.

     

    숙제 완료!

    교수님, 이렇게 하는거 맞죠??

     

     

    댓글
    위쪽 화살표
    도움이 되었다면 공감(하트)과 댓글을 부탁드려요.
    //스크립트는 script로 수정해주세요.//