inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 기본편

변수와 초기화

[변수의 초기화] 멤버 변수 자동 초기화하는 이유가 궁금합니다

1045

한조

작성한 질문수 20

3

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요 강의를 듣다 궁금점이 생겨 질문드립니다.

 

멤버 변수는 왜 지역 변수처럼 항상 직접 초기화를 하는게 아니라 왜 자동으로 초기화를 해주는지 이유가 궁금합니다

 

java 객체지향

답변 1

2

김영한

안녕하세요. 한조님

자바에서 지역 변수는 명시적 초기화를 요구하고, 멤버 변수는 자동으로 초기화하는 이유는 여러가지 이유가 있겠지만 안전성과 편리함 vs 명확성이라는 관점으로 설명해드리겠습니다.

 

안정성과 편리함

자동 초기화는 프로그램의 안전성을 높입니다. 개발자가 초기화를 잊어버렸을 때 발생할 수 있는 동작을 방지할 수 있고, 프로그램이 지정해주는 기본값을 편리하게 사용할 수 있습니다.

 

명확성

프로그램이 명시적으로 초기화를 요구하게 되면 코드의 명확성을 높입니다. 대신에 항상 초기값을 넣어주어야 합니다.

 

프로그램은 보통 명확한 것이 개발자의 오류를 더 줄여줍니다. 예를 들어서 지역 변수에 값을 대입하는 것을 깜박하고 사용했는데, 자바가 자동으로 초기화를 해주어서 0이라는 기본값이 사용된다면 예상하지 못한 큰 버그가 발생할 수 있습니다.

반면에 객체의 (멤버 변수)의 경우 기본적으로 편리함을 제공하지만, 이후에 학습할 생성자를 비롯한 기타 여러가지 장치를 통해서 명확성을 어느정도 해결할 수 있습니다. 쉽게 이야기해서 두마리 토끼를 다 잡을 수 있는 것이지요.

하지만 지역 변수는 단순히 변수에 값을 대입하는 것 밖에 못하기 때문에 이런 안전장치들이 없습니다.

추가로 컴파일러를 설계할 때 지역 변수의 경우 특정 메서드 안에서만 사용되기 때문에 단순합니다. 따라서 명시적 초기화가 이루어 지지 않았을 때 컴파일 오류를 발생시키기 쉽지만, 객체의 멤버 변수의 경우 한번 생성하면 여러 메서드에서 사용될 수 있기 때문에 명시적 초기화가 이루어지지 않았을 때 컴파일 오류를 발생시키기가 어렵습니다.

감사합니다.

0

침착한치킨다리

객체의 경우 한번 생성하면 여러 메서드에서 사용될 수 있기 때문에 명시적 초기화가 이루어지지 않았을 때 컴파일 오류를 발생시키기가 어렵습니다.
이 부분이 잘 이해가 안되었었는데 좀 더 설명가능할까요?

0

김영한

안녕하세요. Just code님

이 문맥에서 객체는 멤버 변수를 뜻합니다. 객체의 멤버 변수의 경우 여러 메서드에서 접근할 수 있습니다. (수정해두었습니다.)

감사합니다.

질문있습니다

0

30

1

1번 문제 질문입니다.

0

35

1

음악플레이어 문제 중 코드질문

0

29

1

9장 상속 문제와 풀이 질문

0

39

1

강의 자료에 사소한 오타가 있습니다.

0

50

2

매서드 참조값 반환??

0

67

1

접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드

0

73

1

자바 기본편 - .(dot)에 관한 질문입니다!

0

85

1

공부방법

0

77

2

상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?

0

82

1

static method 질문

0

67

1

캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요

0

99

1

Method1에서 Student 객체

0

74

1

3강 18. null 질문

0

69

1

this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?

0

77

1

팩토리 메서드 패턴과 일반 생성자 사용의 장단점

0

97

1

문의

0

104

1

9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다

0

90

1

상속과 그에 따른 메모리 구조 질문

0

62

1

call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다

0

74

1

수강기한

0

136

1

기본편 객체지향 프로그래밍에 대한 정의

0

88

1

섹션10 상속 메모리 구조 및 문제 관련 질문

0

87

1

추가 지식 학습

0

153

2