인프런 커뮤니티 질문&답변

코딩바보님의 프로필 이미지
코딩바보

작성한 질문수

자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)

참조 자료형 변수

참조자료형 변수 강의- class 자료형 선언 질문

작성

·

294

0

public class Student {
	int studentID;
	String studentName;
	
	Subject korean;
	Subject math;

	public Student(int studentID, String studentName) {
		
		this.studentID=studentID;  
		this.studentName=studentName; 
		
		korean=new Subject();
		math=new Subject(); 
	}
}

위의 코드를 아래의 코드로 바꾸면 어떻게 다른거며 어떤 문제가 발생하나요?

결과값은 똑같이 나오더라구요

public class Student {
	int studentID;
	String studentName;
	
	Subject korean=new Subject();
	Subject math=new Subject(); 

	public Student(int studentID, String studentName) {
		
		this.studentID=studentID; 
		this.studentName=studentName; 
	
	}
}

답변 2

0

박은종님의 프로필 이미지
박은종
지식공유자

아… 제가 좀 혼란스럽게 썼네요., 첫 번째 코드로 사용할 때 생성자가 여러개인 경우 반복적인 초기화를 init() 과 같은 메서드를 정의하고 각 생성자에서 호출한다는 것입니다. 인스턴스 변수는 기본적으로 생성자에서 초기화 하는 것이 맞습니다. 그래서 첫번째 코드 방식으로 사용하시기를 권장합니다.

0

박은종님의 프로필 이미지
박은종
지식공유자

두 코드의 차이는 첫번째의 경우는 생성자가 호출될때 인스턴스 변수 객체가 생성되는 것이고, 두번째 코드는 Student가 생성될 때 인스턴스 변수가 생성되는 것입니다. 생성자가 여러개인 경우에는 각 생성자에서 인스턴스 변수를 생성해야 하므로 init() 과 같은 메서드를 만들고 그 메서드에서 인스턴스 변수들을 초기화 해주면 됩니다. 대부분의 경우는 생성자에서 인스턴스 변수를 초기화 하는 것이 일반적입니다. static 변수와 같이 한번만 생성해도 되는 경우는 변수를 선언함과 동시에 생성하기도 합니다.

코딩바보님의 프로필 이미지
코딩바보
질문자

두번째 코드를 사용했을 때 init() 과 같은 메서드를 만들고 그 메서드에서 인스턴스 변수들을 초기화해야된다는 것이고 대부분은 첫번째 코드처럼 코딩을 한다는 말씀이신가요?

코딩바보님의 프로필 이미지
코딩바보

작성한 질문수

질문하기