-
생성자와 this개인 공부/java 2021. 6. 14. 07:43728x90반응형
생성자란
생성자란 메모리 내 객체가 생성될 때 자동적으로 단 한번 호출되어 객체의 구조를 인식하고 생성되는 객체의 멤버변수들을 초기화하는 데 목적을 둔 것을 말한다. 생성자의 특징으로는
- 반환 타입이 없다.
- 생성자명이 클래스명과 같다.
class Car{ int speed; public void setSpeed(int s){ speed = s; } }
Car car = new Car();
new 연산자 뒤로 오는 것을 생성자란 것인데. 위 예문과 같이 전달되는 인자가 없는 생성자를 default 생성자라고 한다. 또한 생성자라는 형태의 메서드가 Car class 내부에 존재하지 않는데도 사용할 수 있는데 이는 개발자가 생성자를 class 내부에 단 1개도 정의하지 않았을 경우 컴파일러가 컴파일할 때 자동으로 정의해주기 때문이다. 하지만 개발자가 class의 생성자를 1개 이상 정의했다면 default 생성자를 자동으로 만들어주지 않는다.
생성자의 사용법
Car class는 클래스를 생성자로 생성한 뒤에 speed 변수의 값을 setSpeed를 통해 설정해줘야한다. 지금은 단 조그만 수정이고 나 혼자 개발한다면 기억하고 있으면 되겠지만 1개가 아닌 여러개의 필수값들이 존재하게되고 여러명이서 개발하는 과정이라 한다면 이 부분을 어떻게 다 지키면서 개발할 수 있을까? 그 방법은 생성자를 생성할때 매개변수를 필수값으로 입력받게 하면 된다.
class Car{ private int speed; public Car(int s){ speed = s; } public void setSpeed(int s){ speed = s; } }
위 Car class를 다음과 같이 수정한다면 컴파일러는 컴파일할 때 default 생성자를 만들지 않게 되고
Car car = new Car(50);
이렇게 car 객체를 생성할때 speed의 값을 입력해줘야하기 때문에 생성할때 무조건 초기화를 해줄 수 있다.
생성자가 필요한 이유는 객체가 생성될 때 단 한번 수행하는 부분이므로 멤버들의 초기화 작업과 반드시 또는 단 한번만 수행해야 하는 행위 등을 생서앚에 정의해 두는 것이다. 또한 생성자를 오버로딩하여 하나의 클래스 내에 여러 개의 생성자가 존재하는 것을 생성자 오버로딩이라고 한다.
생성자 접근제한
생성자에 접근제한을 사용하여 접근을 제한할 수 있는데.
public : 모두 사용
private : class 내부에서만 사용
protected : 상속관계에 있는 sub class에서만 사용
의 방법으로 접근을 제한하여 사용할 수도 있다.
this와 this()
this는 특정 객체 내에서 현재 객체 자신을 의미하는 참조변수이다. 이는 자신의 객체 reference를 알릴 때 쓰이며 현재 객체의 멤버들을 접근할 때도 쓰인다.
class Test{ public Test(){ System.out.println("객체 생성시 > "+ this); } public static void main(String[] args){ Test t = new Test(); System.out.println("객체 생성후 > "+ t); } }
위 코드를 실행하면 객체를 생성할때 사용되는 this와 객체를 생성한 뒤 t의 주소값이 일치하는 것을 확인할 수 있다. 자신이 객체가 되어 메모리에 존재할 자신의 위치값을 갖고 있는 것이 this고 class를 객체화 했을 경우의 주소값을 갖고 있는 것이 this다. 또한 this()의 존재 이유는 생성자 내에서 자기 자신 즉 오버로딩된 생성자를 또 불러야할 경우가 존재하는데.
class ThisConstrEx{ String str; public ThisConstEx(){ this(" "); } public ThisConstEx(int n){ this(String.valueOf(n)); } public ThisConstEx(char c){ this(String.valueOf(c)); } }
이렇게 다음과 같이 사용할 수 있다. this()라는 것은 현 객체의 또 다른 생성자를 호출할 수 있는 유일한 방법이지만 this()는 무조건 생성자의 첫 행에서만 사용할 수 있다. 이 방법 외의 방법을 사용하면 컴파일에서 오류가 난다.
728x90반응형'개인 공부 > java' 카테고리의 다른 글
String 이란 (0) 2021.06.23 static 변수와 static 메서드 그리고 static 초기화 (0) 2021.06.17 Method (0) 2021.06.11 캡슐화와 변수의 개념 (0) 2021.06.09 Class와 객체(Object) (0) 2021.06.08