본문 바로가기

IT, Computer

[JAVA] 정보처리기사 생성자 예제

반응형

 

 

목차

     

     

    썸네일


    서론

    정보처리기사(정처기)에 나오는 자바 문제이다. 파이썬에는 __init__ 을 사용하지만 자바나 C언어(C++포함)와 같은 객체지향 프로그래밍에서 사용되는 생성자는 초면이라 당황을 했다. 그렇기에 따로 첨부하는 포스팅이다.


    java 생성자를 알아보자

    생성자란 인스턴스 생성시 가장 먼저 호출되는 메서드라고 한다. 생성자의 가장 큰 특징은 클래스 내 클래스와 이름이 같은 메서드(메소드,method)가 있다는 점이다. 객체 생성시 자동으로 호출되며, 부모클래스가 있다면 부모 생성자를 먼저 호출하는 것이 묵시적이라고 한다. 참고로 this() 함수는 내가 가진 인자 없는 생성자 호출한다. 상속받은 것은 호출하지 않는다. this 안에 있는 자신의 생성자만 호출하는 것이다. 무슨 말인지 와닿지 않을 것이다. 아래 예시와 함께 참고하길 바란다.


    생성자 예제

    class Super {
        Super() {
            System.out.print('A');
        }
        
        Super(char x) {
            System.out.print(x);
        }
    }
    
    class Sub extends Super {
        Sub() {
            System.out.print('B');
        }
        
        Sub(char x) {
            this();
            System.out.print(x);
        }
    }
    
    class Test {
        public static void main(String[] args) {
            Super s2 = new Sub('D');
        }
    }

     

    이 걸 차례차례 해보면, 1. Super s2는 Sub('D')부터 시작한다. 이제 sub 클래스의 생성자 Sub(char x) { this(); System.out.print(x);} 안에 있는 this()가 호출되며, this라 하면 sub클라스의 기본 생성자를 우선적으로 호출한다는 의미다. 기본생성자 Sub()인 B를 출력하라는 의미다.

     

    하지만 이전에 부모 생성자를 묵시적으로 호출해야 된다! 1.그렇기에 제일 위에 있는 A를 제일먼저 출력한다. 그 후 자식 생성자를 호출할때 위에서 언급했듯 B를 출력한다. 그리고 이제 2. this로 호출된 생성자가 아닌.. 3. 인자가 있는 생성자인 자신을 호출해야 되므로, 자식 클래스의 생성자인 Sub(char x) { this(); System.out.print(x); }에서 뒤에 있는 print(x)를 한다. D를 출력하는 것이다. 고로 결과는 'ABD' 이렇게 된다. Super s2 = new Sub('D'); 처럼 한 줄이지만, 총 세개의 생성자가 실행되는 기이한 현상이.. 일어난다. 문제를 위한 문제 이해를 위한 문제라고 생각하면 되지 않을까...