뚜벅이 한걸음

Java 생성자 본문

java

Java 생성자

뚜벅뚜벅뚜벅이 2022. 7. 10. 15:11
반응형

1. 생성자

자바에서 클래스를 생성하기 위해 사용하는 함수로

클래스이름(){} 의 형태이고

클래스 이름 () 의 형태로 호출한다.

클래스를 하나 만들어보면

public class person{
String name;
float height;
float weight; 
}

다음과 같이 세 개의 멤버 변수가 있는 person 클래스를 만들었다.

이 클래스를 test 클래스에서 사용해 보면

public class Test{

public static void main(String[] args){
Person personKim = new Person(); 
} 
}

이렇게 사용할 수 있다.

Test 클래스를 따로 만들어서 사용하는 이유는 메인 메서드가 있는 클래스를 따로 만들어서 사용하고자 하기 때문이다. 처음 공부할 때는 "Person personKim = new Person();" 이 코드 전체가 생성자인 줄 알았다.

이렇게 쓰면서 '생성자를 호출한다' 라고 하는 설명을 들었기 때문이다.

하지만 이 전체 코드가 생성자는 아니고 위의 코드는 생성자를 호출하는 과정이다.

생성자는 개발자가 따로 만들지 않아도 클래스 파일을 컴파일하면 자바 컴파일러가 자동으로 생성자를 만들어준다.

이렇게 생성자를 이용하는 이유는 두 가지가 있다.

첫째, 객체를 만들기 위해서 main() 함수를 호출한 클래스에서는 프로그램이 작동한 모습을 볼 수 있다.

이 클래스에서 객체의 기능을 사용하고 싶다면 해당되는 클래스의 생성자를 이용하여 객체를 만들어야 한다.

생성자의 첫 글자는 대문자여야 하며 생성된 인스턴스의 주소를 담는 변수의 타입을 지정하는 클래스 또한 대문자로 적어주어야 한다.

둘째, 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하기 위함이다.

클래스의 멤버 변수는 메서드에 의해 값이 변경될 수도 있지만,

처음 클래스를 생성할 때 값을 정해야 하는 경우도 있다.

그래서 생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것이다.

2. 디폴트 생성자

생성자는 클래스를 생성할 때만 호출한다.

생성자의 이름은 클래스의 이름과 같고, 일종의 함수이지만 반환값이 없다.

public class person{ 
String name;
float height;
float weight;
}

person 클래스를 보면 우리가 만들어 놓은 멤버 변수를 볼 수 있지만 생성자를 만든 기억은 없다.

이처럼 클래스를 만들면 개발자가 생성자를 따로 만들지 않은 클래스는

컴파일 과정에서 컴파일러가 자동으로 생성자를 만들어준다.

이렇게 자동으로 만들어지는 생성자를 디폴트 생성자라고 한다.

디폴트 생성자는 매개변수, 구현코드가 없는 형태이다.

public class person{
String name;
float height;
float weight;

public Person(){
}
}

위와같이 생겼다. 앞에 붙은 public은 접근제어자로 나중에 더 이야기하겠다.

디폴트 생성자는 자동으로 생기지만 필요에따라 개발자가 명시적으로 적으면서 직접 구현할수도 있다.

 

3. 생성자 직접 만들기 (매개변수가 있는 생성자)

위에서 생성자를 쓰는 이유에 대해서 이야기했었는데

지금 공부하는 Do it 자바프로그래밍입문을 보면

"생성자는 주로 클래스에 있는 멤버변수에 대한 값들을 매개변수로 받아서

인스턴스가 새로 생성이될때 멤버 변수값들을 초기화하는 역할을 한다.

즉, 인스턴스가 생성됨과 동시에 멤버 변수의 값을 지정하고 인스턴스를초기화하기 위해

생성자를 직접 구현하여 사용하는것이다. " 라고 되어있다.

예시와 함께보면

public class person{
String name;
float height;
float weight;

public Person(String pname){ 
name = pname; 
} 
}

생성자를 개발자가 직접 구현해준 형태이다.

매개변수로 String타입의 pname이라는변수를 받아

person 클래스의 멤버 변수인 name에 매개변수로 받은 Pname의 값을 대입해주는 생성자이다.

이렇게되면 생성자를 호출하였을때 인스턴스의 멤버변수가 pname의 값으로 초기화된다.

아까 만들었던 테스트 클래스를 다시 실행하면 어떻게 될까?

오류가생긴다.

public class Test{

public static void main(String[] args){

Person personKim = new Person(); 

}
}

이러한 생성자 오류를 해결하기위해서는 두가지방법이 사용가능하다.

첫번째, 개발자가 직접 생성자를 정의하게되면 자동으로 생성되면 디폴트 생성자는 생성되지않는다.

따라서 디폴트 생성자를 포함하여 여러개의 생성자를 구현해두면된다.

두번째, 생성자를 호출함과 동시에 인스턴스의 변수를 초기화하면서 클래스를 생성하는 것이다.

 

public class Test{ 

public static void main(String[] args){
Person personKim = new Person("홍길동","177","80");
} 
}

이런식으로 매개변수가 있는 생성자를 이용하여 변수에 들어갈 값들을 바로 쓰는 것이다.

4. 생성자 오버로드

프로그램을 만들면서 어떤 생성자를 불러올지 모름으로 디폴트 생성자뿐만아니라 매개변수가 다 다른 생성자를 여러개 만들어두고 원하는 생성자를 그때 그때 골라서 사용하는것을 말한다.

반응형

'java' 카테고리의 다른 글

메모리 구조  (0) 2022.07.12
참조 자료형  (0) 2022.07.10
인스턴스와 힙메모리  (0) 2022.07.10
Java 클래스와 인스턴스  (0) 2022.07.10
Java 메서드  (0) 2022.07.10