Dev.GA

[JAVA] 생성자(constructor)와 this 본문

Dev.Back-End/JAVA

[JAVA] 생성자(constructor)와 this

Dev.GA 2018. 2. 12. 11:14


생성자(constructor)와 this




객체지향 프로그래밍이란 객체를 중심으로 사용하는 것이다. 객체를 사용하려면 객체를 생성해야하는데

객체를 생성하는 과정, 즉 객체를 초기화하는 녀석이 바로 생성자(constructor)다.

생성자는 객체를 생성할때 실행되며, 맨 처음 실행되는 메소드이다.

Calculator cal = new Calculator();    // 생성자 실행

cal.sum(10,20);

cal.avg(10,20);


생성자는 클래스명과 동일하며 종료할때 반환값이 없다. 즉, return값이 존재하지 않는다.


모든 클래스에는 생성자가 반드시 한개 이상 존재하며, 따로 선언하지 않아도 보이지 않는 디폴트 생성자(default constructor)가 자동으로 추가된다.



 디폴트 생성자(Default Constructor)

기본 생성자라고도 부르며, 디폴트 생성자는 따로 정의하지 않더라도 JAVA(컴파일러)에 의해 기본적으로 생성된다.

하지만 클래스 내부에 선언된 생성자가 있을경우 생성되지 않는다.


생성자가 가지고 있는 조건에는 여러가지가 있는데 이에 대해 알아보자.


  • 클래스명과 이름이 동일해야 한다.

  • 반환값(return값)이 없다.

  • new를 사용하여 선언한다.

  • 매개변수나 정의되지 않을경우 디폴트 생성자가 자동으로 생성된다.

  • 한 생성자내에서 다른 생성자를 호출할때 this()를 사용해야 한다.


다음은 간단한 생성자를 이용한 예제이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Calculator {
 
    private int x1 = 0;
    private int y1 = 0;
    
    public Calculator(int x1, int y1){
        this.x1 = x1;
        this.y1 = y1;
    }
    
    public static void main(String[] args){
        Calculator cal = new Calculator(1020);
        
        System.out.println("x1 : " + cal.x1);
        System.out.println("y1 : " + cal.y1);
    }
}
cs


여기서 못보던 녀석이 등장하는데 바로 This다.



 This란?


Java에서 This란 '객체, 자기자신'을 뜻한다.


위의 코드를 보면, main함수에서 Calculator객체를 생성자를 이용해 생성하였다.

생성과 동시에 10과 20이라는 매개변수값에 해당하는 데이터를 넣어 초기화를 시켜주었고,

Calculator는 입력받은 값을 this라는 키워드를 통해 x1과 y1이라는 클래스 변수에 넣어주었다.


여기서 this.x1의 x1변수는 생성자에 있는 x1이 아니라 전역변수의 x1을 가리킨다.

따라서 자기자신(this)의 x1에 생성자가 초기화하면서 받아온 x1을 넣는것이다.


그래서 생성자가 호출되고 하단에 출력부분에서는 x1과 y1이 전역변수에서 초기화된 0이 아니라 10과 20으로 출력이 되는 것이다.



 생성자 오버로딩


this란 단순히 전역변수(필드)를 초기화하기 위해서만 사용되지 않는다.

생성자를 초기화하기 위해서도 사용되는데, 생성자 오버로딩을 통해 매개변수가 다른 생성자를 여러개 만들어낸다.

단, 조건이 발생하는데 같은 클래스내에서 매개변수의 순서와 개수가 달라야한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Calculator {
 
    private int x1 = 0;
    private int y1 = 0;
    private int x2 = 0;
    private int y2 = 0;
    
    public Calculator(int x1, int y1){
        this(x1, y1, 3040);
    }
 
    public Calculator(int x1, int y1, int x2, int y2){
        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
    }
    
    public static void main(String[] args){
        Calculator cal = new Calculator(1020);
        
        System.out.println("x1 : " + cal.x1);
        System.out.println("y1 : " + cal.y1);
        System.out.println("x2 : " + cal.x2);
        System.out.println("y2 : " + cal.y2);
    }
}
cs


위와 같이 첫번째 Calculator에서 다른 매개변수를 추가하기 위해 이름은 동일하지만 매개변수의 개수가 추가된 두번째 Calculator를 호출하였다.


위의 결과로 x1,y1을 다시 정의할 수 있고, x2,y2의 값도 초기화 시켜주었다.



오버로딩에 대해서는 다음에 오버라이딩과 같이 더 깊게 알아보겠다.

Comments