Programming/Java

자바 기초부터 모던 자바까지 - 객체 편

KOOCCI 2022. 7. 2. 15:57

목표 : 자바의 객체의 개론을 알아본다.


Object

객체가 무엇인지를 정의하고자 한다기 보다, 내가 아는 내용을 정리하고자 한다.

세상 모든 것을 개체라고 할 수 있다.

개체 중에서 내가 관심을 가지는 영역을 객체로 바라보자.

그리고, 그 객체의 성격과 행동, 서로간의 소통들을 정의해나갈 수 있을 것이다.

결국 그 객체에 대해 내가 관심이 있고, 다루고자 하는 영역들을 성격과 행동이라는 용어로 정리하다 보면 특정해 나갈 수 있게 된다.

이를 클래스라는 용어로 불러본다.

 

사람이라는 객체가 있다.

철학적인 물음으로 사람이란 무엇인가?에 대해서 대답하고자 하는건 아니다. (나라는 것은 무엇인가? 라는 질문으로 넘어가면 철학과 과학의 오묘한 결합이 나오게 된다)

그렇지만 우리가 원하는 어떠한 결과물을 위해서는 원하는 바를 정리해보며 사람을 만들어가야 한다.

눈이 있고, 코가 있고, 귀가 있으며, 옆 사람과 대화할 수 있는 것 이라고 먼저 정의했다고 하자.

그럼 사람이라는 것의 특징은 눈, 코, 귀가 있다는 것. 그리고 옆 사람과 대화를 한다는 행동을 정의할 수 있다.

class Person {
    private Eye eye;
    private Nose nose;
    private Ear ear;

    public void conversation(Person person) {
    
    }
}

아주 간단한 클래스가 만들어졌다.

 

민수, 철수, 영희 모두 사람이라고 하자.

클래스를 통해 민수를 만들고, 철수, 영희를 만들면 그것이 인스턴스라는 용어로 통용될 수 있게 된다.

심지어, 대화도 할 수 있다.

Person minsoo = new Person();
Person chulsoo = new Person();
Person younghee = new Person();

minsoo.conversation(chulsoo);
minsoo.conversation(younghee);

성격 혹은 특징(속성)은 클래스의 멤버 변수(Member Variable)로 표현했으며, 그 행동은 메서드(Method)를 통해 만들어 주었다.

 

붕어빵과 붕어빵 틀이라는 유명한 비유가 있다. (위 사람과도 비교해보자)

비유는 모든 것을 설명하지 못하지만, 이해력을 높여주는 좋은 도구다.

붕어빵이라는 것에 내가 관심이 있고, 그 관심에 대한 성격과 행동, 소통들을 정의해 나가다보면 하나의 틀이 만들어진다.

붕어빵 사장님은 관심사들을 찍어내기 위해 붕어빵 틀이라는 것을 만든다.

그럼 붕어빵들을 열심히 찍어낼 수 있게 되는 것이다.

 

프로그램도 결국 내가 관심을 가지는 영역을 프로그램 언어로서 성격을 규정하고, 행동, 소통들을 정의해 원하고자 하는 바를 구현한 결과물이다.

 

조금 다른 용어로 이를 정의해보면, 클래스 객체의 청사진(BluePrint)라고 할 수 있다.

 

Object Class

위와 같이 객체라는 용어에 대해 정리해보았다.

Java에서도 모든 객체의 최상위 클래스는 Object 클래스다.

굳이, import하지 않아도 자동으로 import되며, 모든 클래스는 Object에서 상속받고, Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있다.

 

즉, 자동으로 extends Object가 되는 것이라 보면 된다.

그리고, Object의 메소드 중 가장 많이 쓰는 것은 toString(), equals(), hashCode()가 있을 것이다.