작성
·
897
3
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요 강의를 듣다 궁금점이 생겨 질문드립니다.
멤버 변수는 왜 지역 변수처럼 항상 직접 초기화를 하는게 아니라 왜 자동으로 초기화를 해주는지 이유가 궁금합니다
답변 1
2
안녕하세요. 한조님
자바에서 지역 변수는 명시적 초기화를 요구하고, 멤버 변수는 자동으로 초기화하는 이유는 여러가지 이유가 있겠지만 안전성과 편리함 vs 명확성이라는 관점으로 설명해드리겠습니다.
안정성과 편리함
자동 초기화는 프로그램의 안전성을 높입니다. 개발자가 초기화를 잊어버렸을 때 발생할 수 있는 동작을 방지할 수 있고, 프로그램이 지정해주는 기본값을 편리하게 사용할 수 있습니다.
명확성
프로그램이 명시적으로 초기화를 요구하게 되면 코드의 명확성을 높입니다. 대신에 항상 초기값을 넣어주어야 합니다.
프로그램은 보통 명확한 것이 개발자의 오류를 더 줄여줍니다. 예를 들어서 지역 변수에 값을 대입하는 것을 깜박하고 사용했는데, 자바가 자동으로 초기화를 해주어서 0이라는 기본값이 사용된다면 예상하지 못한 큰 버그가 발생할 수 있습니다.
반면에 객체의 (멤버 변수)의 경우 기본적으로 편리함을 제공하지만, 이후에 학습할 생성자를 비롯한 기타 여러가지 장치를 통해서 명확성을 어느정도 해결할 수 있습니다. 쉽게 이야기해서 두마리 토끼를 다 잡을 수 있는 것이지요.
하지만 지역 변수는 단순히 변수에 값을 대입하는 것 밖에 못하기 때문에 이런 안전장치들이 없습니다.
추가로 컴파일러를 설계할 때 지역 변수의 경우 특정 메서드 안에서만 사용되기 때문에 단순합니다. 따라서 명시적 초기화가 이루어 지지 않았을 때 컴파일 오류를 발생시키기 쉽지만, 객체의 멤버 변수의 경우 한번 생성하면 여러 메서드에서 사용될 수 있기 때문에 명시적 초기화가 이루어지지 않았을 때 컴파일 오류를 발생시키기가 어렵습니다.
감사합니다.
안녕하세요. Just code님
이 문맥에서 객체는 멤버 변수를 뜻합니다. 객체의 멤버 변수의 경우 여러 메서드에서 접근할 수 있습니다. (수정해두었습니다.)
감사합니다.
객체의 경우 한번 생성하면 여러 메서드에서 사용될 수 있기 때문에 명시적 초기화가 이루어지지 않았을 때 컴파일 오류를 발생시키기가 어렵습니다.
이 부분이 잘 이해가 안되었었는데 좀 더 설명가능할까요?