코드의 범위
컴퓨터 프로그래밍을 배우지 않은 사람은
작성된 코드를 볼 때 영어는 차치하고라도 각종 기호의 의미와 어떻게 작동하는지 감을 잡을 수 없다.
그래서 더욱 어렵게 느껴지는 것이다.
이 글에서 알아볼 scope(범위)도 이런 종류의 정의다.
프로그램이 실제로 작동할 때까지는 보이지는 않지만 여러 단계를 거친다.
- 사람이 코드를 작성한다.
- 사람이 실행한다.
- 컴파일러 프로그램이 기계어로 번역한다.
- 기계어를 CPU가 순서대로 메모리에 넣고 빼면서 열불나게 일한다.
이런 과정을 거쳐 그 결과가 화면에 나타나는 것이다.
여기서 가장 중요한 것은 작성한 코드가 컴파일러로 넘어가는 과정이다.
컴파일러 프로그램은 코드를 기계어로 번역하는데 이것을 '해석(interpreter)'이라고 한다.
해석은 코드를 잘 만들었는지 보는 것이 아니라
작동이 가능한 지를 확인하는 것이다.
순서대로 해석하다가 막히는 곳이 생기면 잔소리를 널어 놓으며 해석을 포기한다.
Error!!!!!
어쨌든 코드를 작성할 때 가장 눈치를 봐야 하는게 컴파일러다.
컴파일러가 해석할 수 있도록 작성해야 에러가 나지 않는다.
이런 면에서 변수, 함수 등을 사용할 때 주의해야 할 것이 scope(범위)다.
코틀린의 범위 규칙
- 변수를 사용하려면 미리 선언되어 있어야 한다.
- {}중괄호 안에 있는 변수는 {}중괄호 밖에서 읽지 못한다.
- {}중괄호 밖에서 먼저 선언한 변수는 {}중괄호 안에서 이용할 수 있다.
- 파일 바깥에서 정의한 변수, 함수를 사용하려면 import (호출)해야 한다.
직접 코딩해서 테스트 해보자.
main()함수에서 변수 numZero를 출력하려면
변수를 선언해야 한다.
아래와 같이 코딩 해보자.
변수를 아래쪽에 선언하면 에러가 난다.
미해결된 참조: numZero
한마디로 numZero가 어디 있는지 모르겠다는 말이다.
println()함수 위에 변수를 선언 해보자.
제대로 출력된다.
여기서 알 수 있는 것은 사용하려는 변수는 호출하려는 곳의 위쪽에 먼저 선언해야 한다는 것이다.
다른 함수를 만들어 그 안에서 출력하면 어떻게 될까?
출력하기도 전에 에러 아이콘과 빨간색이 뜬다.
중괄호 {} 안에서 선언한 변수는 중괄호 밖에서 불러올 수 없다.
중괄호 {} 밖에서 선언한 변수는 불러 올 수 있을까?
여기서 알 수 있는 것은 함수 바깥에서 변수를 선언하려면
main()함수 위쪽에 선언해야 한다.
아래 코드를 실행하면 어떻게 될까?
왜 0만 출력될까?
아래와 같이 main()함수 안에서 출력 해 보자.
아래 코드를 입력한 후 실행 해 보자.
main()함수 안의 코드의 뜻은 아래와 같다.
만약 true(값이 있다) 이면 {}중괄호 안의 내용을 실행하라
변수 numOne에 1을 넣는다.
출력하라(변수numZero 값을)
출력하라(변수numOne 값을)
출력 후 알게된 것은 무엇인가?
여기서 코틀린 코드의 구조에 대해 간단히 알아본다.
코드의 가장 상위에는 package (패키지)가 있다.
패키지 이름은 org.kotlin 처럼 표시한다.
구조를 보면
패키지 안에 클래스가 있고
클래스 안에 변수와 함수가 있다.
함수 안에 변수가 있다.
위 그림에서 class Abc는 package에 속해 있기 때문에
클래스 Abc의 전체 이름은 다음과 같이 나타낼 수 있다.
org.kotlin.Abc
패키지에 포함되는 것들은 class(클래스), variable(변수), function(함수) 등 여러 종류의 object(객체)가 있다.
위 구조에서 변수의 예를 들면
변수가 선언된 위치에 따라서
클래스에 속한 변수와 함수에 속한 변수가 있다.
코틀린에서 변수와 함수의 범위에 대한 규칙은 더 많이 있지만 이 정도만 알아본다.
그리고 범위를 벗어난 경우에 해결할 수 있는 다양한 방법도 있다.
자세한 내용은 다른 글에서 다룰것이다.
끝.
'프로그래밍 언어 > 코틀린_쌩초보를 위한 기초' 카테고리의 다른 글
쌩초보를 위한 기초_11_Type검사와 null (0) | 2020.03.11 |
---|---|
쌩초보를 위한 기초_10_함수의 진화A (0) | 2020.03.11 |
쌩초보를 위한 기초_08_변수형_String (0) | 2020.03.09 |
쌩초보를 위한 기초_07_변수 타입_Number (0) | 2020.03.09 |
쌩초보를 위한 기초_06_Variable_변수 (0) | 2020.03.08 |