-
생성자 다시 기본 정리(do it! 자바)JAVA/궁금증 2024. 9. 15. 08:00
생성자
- 클래스를 생성할 때 사용하는 Person() 같은 함수를 생성자라고 한다.
- 생생성자 이름은 클래스 이름과 같고, 생성자는 반환값이 없다.
- 클래스의 멤버변수는 메서드에 의해 값이 변경될 수도 있지만, 처음 클래스를 생성할 때 값을 정해야하는 경우도 있다. 생성자는 클래스를 처음 만들 때 멤버 변수나 상수를 초기화해준다.
디폴트 생성자
- Person()클래스엔 생성자가 따로없다. 그래도 new Strudent()를 사용해서 객체를 만들 수 있었던 이유는, 생성자가 없는 클래스는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동으로 생성자를 만들어주기 때문이다. 이를 디폴트 생성자라고 한다. 기본 생성자는 매개변수도 구현코드도 없다.
public class Person { String name; float height; float weight; public Person() {} }
생성자 만들기
- 생성자는 주로 멤버 변수에 대한 값들을 매개변수로 받아서 인스턴스가 새로 생성될 때 멤버 변수 값들을 초기화하는 역할을 한다.
- 즉 인스턴스가 생성됨과 동시에 멤버 변수의 값을 지정하고 인스턴스를 초기화하기 위해 생성자를 직접 구현하여 사용한다.
Person 클래스를 생성할 때 이름을 매개변수로 받는 생성자를 구현해보자면,
public class Person { String name; float height; float weight; // 매개변수를 받는 생성자 public Person(String name) { name = pname; } }
그런데 이 때 Person 클래스를 저장하고 컴파일 되는 순간 이전에 만든 PersonTest.java 코드에서 오류가 발생한다.
왜 오류가 났을까? 생성자를 직접 구현해 기본 생성자가 없기 때문이다. 오류를 없애려면 매개변수가 있는 생성자로 호출하거나 기본 생성자를 추가로 구현하면 된다
생성자 오버로드
클래스에 생성자가 2개 이상 제공되는 경우를 생성자 오버로드라고 한다. 경우에 따라 일부러 기본 생성자를 사용하지 않기도 한다. 매개변수가 있는 생성자가 있을 때 기본생성자가 필수는 아니니까.
Person personKim = new Person(); personKim.name = "김씨"; personKim.weight = 85.5F; personKim.height = 180.0F;
Person personLee = new Person("김씨", 175, 75);
위 코드를 아래로 간략화하면 훨씬 보기 좋다.
'JAVA > 궁금증' 카테고리의 다른 글
.dot 사용: 1. 객체의 멤버에 접근할 때 2. 클래스의 정적(static) 멤버에 접근할 때 (0) 2024.09.15 객체의 생성과 참조 (0) 2024.09.15 인스턴스 객체화하는 이유 (0) 2024.09.01 생성자는 클래스 당 몇 개 만들 수 있을까? (0) 2024.08.25 Q.참조값을 왜 변수에 보관해야 돼? (0) 2024.08.10