[자바 무료 강의] 스코프는 유효범위이다 - 기초 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의스코프는 유효범위이다 - 기초최종수정일 2022-03-19
아이콘약 2분

자바 코드를 작성하는 곳에는 특정한 고유 영역이 존재합니다. 이것을 범위 즉 스코프(scope)라고 부르는데요. 현대 프로그래밍 언어에는 스코프가 존재합니다. 이번 강의는 자바의 스코프에 대한 기초 개념을 배워봅시다.

추가 노트

목차


  1. 스코프

  2. [실습해보기] 스코프를 느껴보자

스코프(scope)


스코프(scope) 는 변수에 접근하기 위한 유효범위를 말하며 중괄호 내부를 하나의 범위로 볼 수 있습니다. 스코프의 특성은 범위 내에서는 범위 외부에 선언된 변수에 접근할 수 있으나 범위 외부에서는 범위 내부에 선언된 변수에 접근할 수 없습니다. 어려운 개념이 아닙니다.

image

먼저 변수의 접근이란 변수를 읽거나 저장할 수 있는 것을 말하며 기본적으로 같은 범위 내에서는 변수에 접근할 수 있습니다.

image

그러나 외부 범위에서는 내부 범위에 있는 변수에 접근할 수 없습니다.

image

반복문의 내부 범위에서는 외부 범위에 있는 변수에 접근할 수 있습니다.

image

조건문의 내부 범위에서도 외부 범위에 있는 변수에 접근할 수 있습니다.

image

조건문 내부에서는 외부 범위인 box 변수에 접근할 수 있고, chickenBox 변수에 접근할 수 있으나 외부 범위에서는 내부 범위에 선언된 number 변수나 chickenBox 변수에 접근할 수 없습니다.

image

반복문 내부에 있는 변수는 반복문이 실행될 때마다 초기화를 반복합니다.


2. [실습해보기] 스코프를 느껴보자


실습도구에 해당 코드를 작성해 봅시다


case 1

코드 작성

// 실행할 수 없는 코드. 어떤 에러가 나올까요?

int box = 1;
if (true) {
    int chickenBox = 5; 
    System.out.println(chickenBox);
}
chickenBox = 10;
System.out.println(chickenBox);

출력

[직접 작성후 확인해보세요]


case 2

코드 작성

// 실행할 수 없는 코드. 어떤 에러가 나올까요?

int box = 1;
if (true) {
    int chickenBox = 20;
    if (true) {
        int number = 0;
        int result = box + number + chickenBox;
    }
    number = 1;
}
chickenBox = 10;

출력

[직접 작성후 확인해보세요]


case 3

코드 작성

// 실행할 수 없는 코드. 어떤 에러가 나올까요?

int x = 0; // 상위
while (x < 20) {
    int x = 1; // 하위
    System.out.println(x);
    x++;
}

출력

[직접 작성후 확인해보세요]


설명

x라는 변수는 while 반복문 내에서 상위의 x 변수 스코프에 접근이 가능하기 때문에 while 반복문 내에서 x 변수를 재정의할 수 없습니다.


case 4

코드 작성

// 1을 계속 출력하는 이유

int i = 0;
while (i < 20) {
    int number = 1;
    System.out.println(number);
    number++;
    i++;
}

출력

[직접 작성후 확인해보세요]


설명

반복문이 실행되면서 number 변수의 생성 및 소멸도 반복하기 때문에 항상 1을 출력합니다.

도전자 질문
아이콘kim9099i(2022-03-17 22:06 작성됨)
안녕하세요.

case4에서 number라는 변수룰 출력하고 값을 변화시키는 행위가 없기 때문에 number++나 number--와 같이 값을 변화시켜주는 행위를 추가해주는 것이 설명에 더 부합하는 코드가 아닐까 생각합니다.
아이콘코드라떼(2022-03-19 16:21 작성됨)
안녕하세요. 코드라떼입니다 :) 

좋은 의견 감사합니다 !
아이콘marunose(2021-07-15 13:18 작성됨)
can not find symbol 에러에서 symbol이 의미하는 것이 변수인가요? 
아이콘코드라떼(2021-07-15 19:53 작성됨)
자바를 실행시키는 가상머신에서는 symbol이라는 단위와 명칭을 사용하나, 변수라고 생각하셔도 무방합니다.

감사합니다^^ 
아이콘빅댕이(2021-06-17 23:12 작성됨)
case 2

int box = 1;                                     //박스는 int = 1;로 정의되었고
if (true) {                                      //이하의 if 조건문에서 int chickenBox = 20; 일 때(참)
    int chickenBox = 20;           
    if (true) {                                  //위의 조건이 참일 때 다시 if 조건문이 생겨ㅓ
        int number = 0;                          //int number = 0;으로 정의되고
        int result = box + number + chickenBox;  //그 결과 result가 box + number + chickenBox로 정의
    }                                            //되었다고 생각합니다.
    number = 1;                          //제 질문은 지금 number = 1;은 두 번째 if문에서 int number=1;
}                                        //로 정의되었기 때문에 1이 아닌 0이 되어야된다 생각하고        
chickenBox = 10;                         //chickenBox는 10이 아닌 20으로 정의되어야 한다 생각합니다
                                         //제 생각이 맞는지 궁금합니다 두서없이 적어 죄송합니다 ㅠㅠ
아이콘코드라떼(2021-06-20 21:17 작성됨)
안녕하세요^^ 코드라떼 입니다.

해당 예제 코드는 스코프와 관련된 문제로 number = 1, chickenBox = 10 코드에서 어떤 값이냐 상관없이 해당 변수에 접근할 수 있는지 없는지에 관련된 예제입니다. number = 1, chickenBox = 10 해당 코드의 의미는 'number 변수에 1로 값을 덮어써라, chicken 변수에 10의 값을 덮어써라' 라는 의미입니다. 그러나 if 문 외부에서는 number 또는 chicken으로 선언된 변수가 존재하지 않기 때문에 결론적으로 하단에 있는 number = 1, chickenBox = 10 코드는 접근(수정 또는 읽기) 자체가 불가능합니다.그래서 해당 코드를 실행시 'cannot find symbol' 에러가 발생합니다. 여기서 symbol은 쉽게 말씀드리면 변수명을 말할 수 있으며 변수를 찾을 수 없다는 에러를 확인할 수 있습니다.

감사합니다^^
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의스코프는 유효범위이다 - 기초최종수정일 2022-03-19
아이콘약 2분

자바 코드를 작성하는 곳에는 특정한 고유 영역이 존재합니다. 이것을 범위 즉 스코프(scope)라고 부르는데요. 현대 프로그래밍 언어에는 스코프가 존재합니다. 이번 강의는 자바의 스코프에 대한 기초 개념을 배워봅시다.

추가 노트

목차


  1. 스코프

  2. [실습해보기] 스코프를 느껴보자

스코프(scope)


스코프(scope) 는 변수에 접근하기 위한 유효범위를 말하며 중괄호 내부를 하나의 범위로 볼 수 있습니다. 스코프의 특성은 범위 내에서는 범위 외부에 선언된 변수에 접근할 수 있으나 범위 외부에서는 범위 내부에 선언된 변수에 접근할 수 없습니다. 어려운 개념이 아닙니다.

image

먼저 변수의 접근이란 변수를 읽거나 저장할 수 있는 것을 말하며 기본적으로 같은 범위 내에서는 변수에 접근할 수 있습니다.

image

그러나 외부 범위에서는 내부 범위에 있는 변수에 접근할 수 없습니다.

image

반복문의 내부 범위에서는 외부 범위에 있는 변수에 접근할 수 있습니다.

image

조건문의 내부 범위에서도 외부 범위에 있는 변수에 접근할 수 있습니다.

image

조건문 내부에서는 외부 범위인 box 변수에 접근할 수 있고, chickenBox 변수에 접근할 수 있으나 외부 범위에서는 내부 범위에 선언된 number 변수나 chickenBox 변수에 접근할 수 없습니다.

image

반복문 내부에 있는 변수는 반복문이 실행될 때마다 초기화를 반복합니다.


2. [실습해보기] 스코프를 느껴보자


실습도구에 해당 코드를 작성해 봅시다


case 1

코드 작성

// 실행할 수 없는 코드. 어떤 에러가 나올까요?

int box = 1;
if (true) {
    int chickenBox = 5; 
    System.out.println(chickenBox);
}
chickenBox = 10;
System.out.println(chickenBox);

출력

[직접 작성후 확인해보세요]


case 2

코드 작성

// 실행할 수 없는 코드. 어떤 에러가 나올까요?

int box = 1;
if (true) {
    int chickenBox = 20;
    if (true) {
        int number = 0;
        int result = box + number + chickenBox;
    }
    number = 1;
}
chickenBox = 10;

출력

[직접 작성후 확인해보세요]


case 3

코드 작성

// 실행할 수 없는 코드. 어떤 에러가 나올까요?

int x = 0; // 상위
while (x < 20) {
    int x = 1; // 하위
    System.out.println(x);
    x++;
}

출력

[직접 작성후 확인해보세요]


설명

x라는 변수는 while 반복문 내에서 상위의 x 변수 스코프에 접근이 가능하기 때문에 while 반복문 내에서 x 변수를 재정의할 수 없습니다.


case 4

코드 작성

// 1을 계속 출력하는 이유

int i = 0;
while (i < 20) {
    int number = 1;
    System.out.println(number);
    number++;
    i++;
}

출력

[직접 작성후 확인해보세요]


설명

반복문이 실행되면서 number 변수의 생성 및 소멸도 반복하기 때문에 항상 1을 출력합니다.

도전자 질문
아이콘kim9099i(2022-03-17 22:06 작성됨)
안녕하세요.

case4에서 number라는 변수룰 출력하고 값을 변화시키는 행위가 없기 때문에 number++나 number--와 같이 값을 변화시켜주는 행위를 추가해주는 것이 설명에 더 부합하는 코드가 아닐까 생각합니다.
아이콘코드라떼(2022-03-19 16:21 작성됨)
안녕하세요. 코드라떼입니다 :) 

좋은 의견 감사합니다 !
아이콘marunose(2021-07-15 13:18 작성됨)
can not find symbol 에러에서 symbol이 의미하는 것이 변수인가요? 
아이콘코드라떼(2021-07-15 19:53 작성됨)
자바를 실행시키는 가상머신에서는 symbol이라는 단위와 명칭을 사용하나, 변수라고 생각하셔도 무방합니다.

감사합니다^^ 
아이콘빅댕이(2021-06-17 23:12 작성됨)
case 2

int box = 1;                                     //박스는 int = 1;로 정의되었고
if (true) {                                      //이하의 if 조건문에서 int chickenBox = 20; 일 때(참)
    int chickenBox = 20;           
    if (true) {                                  //위의 조건이 참일 때 다시 if 조건문이 생겨ㅓ
        int number = 0;                          //int number = 0;으로 정의되고
        int result = box + number + chickenBox;  //그 결과 result가 box + number + chickenBox로 정의
    }                                            //되었다고 생각합니다.
    number = 1;                          //제 질문은 지금 number = 1;은 두 번째 if문에서 int number=1;
}                                        //로 정의되었기 때문에 1이 아닌 0이 되어야된다 생각하고        
chickenBox = 10;                         //chickenBox는 10이 아닌 20으로 정의되어야 한다 생각합니다
                                         //제 생각이 맞는지 궁금합니다 두서없이 적어 죄송합니다 ㅠㅠ
아이콘코드라떼(2021-06-20 21:17 작성됨)
안녕하세요^^ 코드라떼 입니다.

해당 예제 코드는 스코프와 관련된 문제로 number = 1, chickenBox = 10 코드에서 어떤 값이냐 상관없이 해당 변수에 접근할 수 있는지 없는지에 관련된 예제입니다. number = 1, chickenBox = 10 해당 코드의 의미는 'number 변수에 1로 값을 덮어써라, chicken 변수에 10의 값을 덮어써라' 라는 의미입니다. 그러나 if 문 외부에서는 number 또는 chicken으로 선언된 변수가 존재하지 않기 때문에 결론적으로 하단에 있는 number = 1, chickenBox = 10 코드는 접근(수정 또는 읽기) 자체가 불가능합니다.그래서 해당 코드를 실행시 'cannot find symbol' 에러가 발생합니다. 여기서 symbol은 쉽게 말씀드리면 변수명을 말할 수 있으며 변수를 찾을 수 없다는 에러를 확인할 수 있습니다.

감사합니다^^
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

Output
root$