초기화 편집하기
최신판 | 당신의 편집 | ||
11번째 줄: | 11번째 줄: | ||
위와 같은 경우, 변수 초기화를 하지 않아서 'The local variable a may not have been initialized'라는 에러가 뜨게 된다. 만약 int a = 1;을 입력하면 초기화가 되고 정상적으로 출력이 된다. 이를 통해 초기화가 무슨 역할인지 간단하게 알 수 있다. [[자바]](Java)에서 초기화는 객체를 선언하고 값을 최초로 할당하는 것이다. int a = 10; 이렇게 작성한 것은 선언과 동시에 초기화한 것이고, 이후에 a = 20; 을 입력하면 초기화가 아니라 값을 바꾸는 할당(allocation)이 된다.<ref>Wakestand, 〈[https://wakestand.tistory.com/92) 자바 초기화는 무슨 뜻이고 왜 해야할까?]〉, 《티스토리》, 2019-10-17</ref> | 위와 같은 경우, 변수 초기화를 하지 않아서 'The local variable a may not have been initialized'라는 에러가 뜨게 된다. 만약 int a = 1;을 입력하면 초기화가 되고 정상적으로 출력이 된다. 이를 통해 초기화가 무슨 역할인지 간단하게 알 수 있다. [[자바]](Java)에서 초기화는 객체를 선언하고 값을 최초로 할당하는 것이다. int a = 10; 이렇게 작성한 것은 선언과 동시에 초기화한 것이고, 이후에 a = 20; 을 입력하면 초기화가 아니라 값을 바꾸는 할당(allocation)이 된다.<ref>Wakestand, 〈[https://wakestand.tistory.com/92) 자바 초기화는 무슨 뜻이고 왜 해야할까?]〉, 《티스토리》, 2019-10-17</ref> | ||
− | == 방법 == | + | ==변수의 초기화== |
− | 변수 선언과 동시에 무조건 초기화를 할 필요는 없다. 초기화는 필요할 때만 하면 되는데, 초기화를 하면 초심자에게 있어서 선택의 혼란함을 줄일 수 있으며 설명이 쉬워진다. | + | [[변수]]를 선언하고 처음으로 값을 저장하는 것을 변수 초기화라고 한다. 변수의 초기화는 경우에 따라 필수적일 수도 선택적일 수도 있지만 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직하다. [[멤버변수]]는 초기화를 하지 않아도 변수의 타입에 맞는 기본값으로 초기화가 이루어지지만 지역 변수는 사용하기 전에 반드시 초기화가 이루어져야 한다.<ref name="티스토리">더블에스, 〈[https://doublesprogramming.tistory.com/73 자바 - 변수의 초기화]〉, 《티스토리》, 2017-01-31</ref> |
+ | |||
+ | ===명시적 초기화=== | ||
+ | 변수 선언과 동시에 초기화하는 것을 명시적 초기화(explicit initialization), 변수의 초기화라고 한다. 가장 기본적이면서도 간단한 초기화 방법이므로 여러 초기화 방법 중에서도 가장 먼저 고려되어야 한다.<ref name="티스토리"></ref> | ||
+ | |||
+ | ===생성자=== | ||
+ | [[생성자]](constructor)는 객체 지향 프로그래밍에서 객체의 초기화를 담당하는 [[서브루틴]]을 가리킨다. 생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고, 객체의 생성 시에 호출되기 때문에 '생성자'라는 이름이 붙었다. 생성자는 대체로 멤버 함수와 같은 모양을 하고 있지만, 값을 반환하지 않는다는 점에서 엄밀한 의미의 함수는 아니다.<ref>〈[https://ko.wikipedia.org/wiki/%EC%83%9D%EC%84%B1%EC%9E%90 생성자]〉, 《위키백과》</ref> | ||
+ | |||
+ | ===초기화 블록=== | ||
+ | 초기화 블록(initialization block)은 종류에 따라 정리된다. 변수 선언과 동시에 무조건 초기화를 할 필요는 없다. 초기화는 필요할 때만 하면 되는데, 초기화를 하면 초심자에게 있어서 선택의 혼란함을 줄일 수 있으며 설명이 쉬워진다. 초기화 블록 내에는 [[메소드]](method) 내에서와같이 [[조건문]], [[반복문]], [[예외처리]]구문 등을 자유롭게 사용할 수 있음으로, 초기화 작업이 복잡하여 명시적 초기화만으로는 부족한 경우 초기화 블록을 사용한다. | ||
+ | |||
+ | * '''[[클래스]] 초기화 블록''' : 클래스를 초기화하는데 사용하며, 처음 메모리에 로딩될 때 한 번만 수행한다. | ||
+ | * '''[[인스턴스]] 초기화 블록''' : 인스턴스 변수를 초기화하는 데 사용한다. 생성자와 같이 인스턴스가 생성될 때 수행되는데, 생성자보다 먼저 수행된다.<ref name="티스토리"></ref> | ||
+ | |||
===모두 다 초기화=== | ===모두 다 초기화=== | ||
모든 변수를 선언과 동시에 초기화를 해 주는 과정으로, 어느 정도 숙련이 되지 않을 때에는 오히려 모두 다 초기화해 주는 것이 편할 수 있다. | 모든 변수를 선언과 동시에 초기화를 해 주는 과정으로, 어느 정도 숙련이 되지 않을 때에는 오히려 모두 다 초기화해 주는 것이 편할 수 있다. | ||
27번째 줄: | 40번째 줄: | ||
===선택적 초기화=== | ===선택적 초기화=== | ||
초기화가 필요한 변수만 선택적으로 초기화하는 방법으로 소스 코드마다 무엇을 초기화해야 하는지 직접 찾아보아야 하는 단점이 있지만 쓸데없는 [[코드]]가 추가되지는 않는다. 비교적 생각해야 하는 문제가 있기 때문에 초심자가 다루기에는 살짝 까다로울 수 있다. 따라서 초심자의 경우에는 모두 다 초기화하는 것을 권장하고, 어느 정도 숙련도가 오른 사람에게는 선택적 초기화를 권장한다.<ref>F.R.I.D.A.Y., 〈[https://pang2h.tistory.com/188 변수 초기화]〉, 《티스토리》, 2019-04-06</ref> | 초기화가 필요한 변수만 선택적으로 초기화하는 방법으로 소스 코드마다 무엇을 초기화해야 하는지 직접 찾아보아야 하는 단점이 있지만 쓸데없는 [[코드]]가 추가되지는 않는다. 비교적 생각해야 하는 문제가 있기 때문에 초심자가 다루기에는 살짝 까다로울 수 있다. 따라서 초심자의 경우에는 모두 다 초기화하는 것을 권장하고, 어느 정도 숙련도가 오른 사람에게는 선택적 초기화를 권장한다.<ref>F.R.I.D.A.Y., 〈[https://pang2h.tistory.com/188 변수 초기화]〉, 《티스토리》, 2019-04-06</ref> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{각주}} | {{각주}} |