본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의탄생-생성자

노을이 질 때 나는 편안한 주황색 색감에 취해 잠시 몽롱해지곤한다. 몽롱함은 마치 소주에 취한 것처럼 달고 약간은 쓸쓸하다. 1,2년에 한번씩 동해바다 아침 노을을 볼 때 나는 진하게 취한 느낌이 든다. 어쩌다 한번 마시는 고급 양주를 마시는 느낌이다. 아침 노을은 어쩌다 한번 비싼 값을 치루고 보는 광경이라 고급 양주와 같다. 작은 동그란 노른자 태양이 서서히 뜰때면 나는 새로운 생명의 에너지를 받는 착각에 빠진다. 저녁에는 저 에너지 넘치는 태양이 흐릿하게 사라질것이다. 삶과 죽음은 순환한다.

 

돌아가신 외할머니의 구순 생신때 찍은 사진을 보았다. 외할머니와 외할머니의 증손주 다섯살 내 조카가 생일케익을 앞에두고 똑같이 촛불을 끄고 있었다. 나는 그 사진을 보며 생각 많고 감수성 풍부한 시인처럼 뭉클해졌고 삶과 죽음에 대해 생각해보았다. 생일케익의 촛불끄는 예식은 암 말기 환자셨던 외할머니 인생의 마무리를 준비하는 의식 같았고, 다섯살 귀여운 증손주 조카의 화창한 미래를 축하하는 축하 의식 같았다. 외할머니는 생일케익을 먹기 좋게 썰어 증손주를 직접 먹여 주셨다. 그 사진속에 삶과 죽음을 오랜만에 생각할 수 있었다. 삶과 죽음은 순환한다.

 

객체지향 세상과 우리의 세상이 같다면 삶과 죽음의 뜻도 같고, 삶과 죽음도 순환할 것이다. 객체는 생성자로부터 탄생하고 객체의 쓰임새가 다 하면 자바는 가비지 컬렉터가 알아서 소멸 시킨다. 객체지향에서도 삶과 죽음은 순환한다.

 

 

생성자는 식물이 씨앗을 벗고 발아하는 것과 병아리가 알을 깨고 부화하는 바로 그 순간을 개발자가 직접 코딩 하는 일과 같다. 생성자는 객체를 처음 생성 할 때 호출해야 하는 또 하나의 메소드이다.

 

- 실행 클래스

public static void main( String[] args ) throws Exception {

    …..

    ExObject exObject = new ExObject(); // 주석 1

    …...

}

 

- 예제 클래스

public class ExObject {

    public ExObject () { // 2

        // 객체 생성시 해야할 일

    }

    …..

}

 

위의 코드처럼 주석1, 실행 클래스가 exObject 클래스를 생성하면, 주석2, 객체의 생성자가 호출 된다. 생성자는 객체가 최초에 생성될때 호출되는 곳이기 때문에, 객체가 처음 생성되었을 때 객체가 특별한일을 해야 한다면 생성자를 통해 편리하게 구현할 수 있다. 예를들어 병아리가 처음 세상에 나왔을 때 해야하는 일이 어미닭으로부터 먹이를 먹는 일이라면 생성자에 먹이 먹는 로직을 추가하면 된다.

 

- 실행 클래스

public static void main( String[] args ) throws Exception {

    …..

    ExObject exObject = new ExObject(3); // 주석 1 먹이 개수 3

    …...

}

 

- 예제 클래스

public class ExObject {

int energy = 0;

 

    public ExObject (int 먹이) { // 2

     energy += 먹이;

    }

    …..

}

 

객체가 처음 생성 되었을 때 해야하는 일이 있다면 생성자를 통해 편리하게 구현할 수 있다. 그리고 경우에 따라 여러 생성자가 필요하다면, 생성자의 '인자값'을 다르게 주어 같은 이름의 여러 생성자/메소드를 호출하는 객체지향의 '오버로딩' 기법을 이용할 수 있다.

 

그래서 원하는 생성자를 호출할 수 있다. 만약 생성자가 필요 없다면 생성자 코드를 아예 구현 하지 않아도 좋은데 이때 컴파일러는 기본적으로 아무 인자도 없는 '디폴트 생성자'를 기본적으로 구현하고 있다.

 

- 생성자 오버로딩 예제-실행 클래스

public static void main( String[] args ) throws Exception {

    …..

    ExObject exObject1 = new ExObject(); // 1

    ExObject exObject2 = new ExObject("인자1"); // 2

    ExObject exObject3 = new ExObject("인자1 ", "인자2"); // 3

    …...

}

 

- 생성자 오버로딩 예제-예제 클래스

    public class ExObject {

        public ExObject() { // 디폴트 생성자, 없어도 컴파일러에서 기본적으로 생성함

        }

 

        pulbic ExObject(String message1) {

            System.out.println(message1);

        }

 

        pulbic ExObject(String message1, String message2) {

            System.out.println(message1 + message2);

        }

    }

 

생성자는 객체를 처음 생성 할 때 호출해야 하는 또 하나의 메소드이다. 만약 객체가 생성될 때 해야할일이 있다면 생성자에 로직을 구현하면 된다. 경우에 따라 여러 생성자가 필요하다면 생성자의 인자값을 다르게 주어 원하는 생성자를 실행할 수 있다. 생성자는 객체가 탄생하는 바로 그 순간을 개발자가 직접 코딩 하고 관리하는 일이다.

 

덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다. 특별한 일 없으면 매주 월수 발행 예정입니다.