본문으로 바로가기

1. 객체지향언어의 역사

1) 객체지향의 기본 개념 : 실제 세계를 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용읻.

2) 객체지향이론 : 상속, 캡슐화, 추상화

3) 장점 

- 코드의 재사용이 높다

- 코드 관리가 용이하다

- 신뢰성이 높은 프로그래밍을 가능하게 한다

  : 제어자와 메서드를 이용해서 데이터를 보호, 올바른 값을 유지하도록 함

  : 코드의 중복을 제거해 코드의 불일치로 인한 오작동 방지


2. 클래스와 객체

2-1. 클래스와 객체의 정의와 용도

1) 클래스 : 객체를 정의해놓은 것, 또는 객체의 설계도 또는 틀

- 클래스의 정의 : 객체를 정의해 놓은 것

- 클래스의 용도 : 객체를 생성하는데 사용

클래스와 객체의 관계를 실생화에서 예를 들면 제품 설계도와 제품과의 관계라고 할 수 있다.
TV설계도(클래스)는 TV라는 제품(객체)를 정의 한 것이며, TV(객체)를 만드는데 사용된다.
붕어빵기계는 클래스, 붕어빵은 객체

이처럼 클래스는 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아니다.
우리가 TV를 볼때 TV(객체)가 필요한 것이지 TV설계도(클래스)가 필요한 것은 아니며,
TV설계도(클래스)는 단지 TV라는 제품(객체)을 만드는데 사용한 뿐이라는 것.
이처럼 클래스르 잘만들어 놓으면 객체를 만들 때 매번 제품을 만들때마다 고민할 필요 없다. (그냥 클래스로 부터 객체를 생성하면 되니까)

2) 객체 

- 실제로 존재하는 것 ex) 유형(책상, 의자, 자동차...), 무형(수학공식, 프로그램 에러와 같은 논리나 개념)

- 프로그래밍에서는 클래스에 정의된 내용대로 메모리에 생성하는 것

- 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념

- 객체의 용도 : 객체가 가지고 잇는 기능과 속성에 따라 다름


클래스와 객체의 관계를 실생화에서 예를 들면 제품 설계도와 제품과의 관계라고 할 수 있다.
TV설계도(클래스)는 TV라는 제품(객체)를 정의 한 것이며, TV(객체)를 만드는데 사용된다.
붕어빵기계는 클래스, 붕어빵은 객체

이처럼 클래스는 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아니다.
우리가 TV를 볼때 TV(객체)가 필요한 것이지 TV설계도(클래스)가 필요한 것은 아니며,
TV설계도(클래스)는 단지 TV라는 제품(객체)을 만드는데 사용한 뿐이라는 것.
이처럼 클래스르 잘만들어 놓으면 객체를 만들 때 매번 제품을 만들때마다 고민할 필요 없다. (그냥 클래스로 부터 객체를 생성하면 되니까)


2-2. 객체와 인스턴스

1) 인스턴스화 : 클래스로부터 객체를 만드는 과정

2) 인스턴스 : 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라함


TV 클래스로부터 만들어진 객체를 TV클래스의 인스턴스라한다면,
결국 인스턴스는 객체아 같은 의미이지만 객체는 모든 인스턴스를 대표하는 포괄적인 의미.
즉 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적은 의미를 갖고있다

즉, 클래스에 의해서 만들어진 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까?
Animal cat = new Animal() 이렇게 만들어진 cat은 객체이다.
그리고 cat이라는 객체는 Animal의 인스턴스(instance)이다.
즉 인스턴스라는 말은 특정 객체(cat)가 어떤 클래스(Animal)의 객체인지를 관계위주로 설명할 때 사용된다.
즉, "cat은 인스턴스" 보다는 "cat은 객체"라는 표현이 "cat은 Animal의 객체" 보다는 "cat은 Animal의 인스턴스" 라는 표현이 훨씬 잘 어울린다.



2.3. 객체의 구성요소 - 속성과 기능

- 객체는 속성과 기능, 두 종류의 구성요소로 이루어져있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.

- 즉, 객체는 속성과 기능의 집합이라 할 수 있다.

- 그리고 객체가 가지있는 속성과 기능을 그 객체의 멤버(구성원) 이라 한다

1) 속성(Property) : 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)

2) 기능(Function) : 메서드(method), 행위(behavior), 함수(function)

TV의 속성은 전원상태, 크기, 길이, 높이, 색상, 볼륨, 채널

기능은 켜기, 끄기, 볼륨 높이기, 채널 변경하기


2.4. 인스턴스의 생성과 사용

- 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.

class Tv {
    String color;
    boolean power;
    int channel

    void power() {
        power = !power;
    }

    void channelUp() {
        ++channel;
    }

    void channelDown() {
        --channel;
    }

    class TvTest {
        public static void main(String[] args) {
            Tv t; //Tv클래스의 타입의 참조변수 t 선언
            t = new Tv(); //Tv 인스턴스 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
            t.channel = 7; //Tv인스턴스의 멤버변수 channel의 값을 7로 선언
            t.channelDown(); //Tv인스턴스의 메서드 channelDown() 호출
            System.out.printf("현채 채널은" + t.channel + " 입니다"); //6
        }
    }
}
인스턴스와 참조변수의 관계는 마치 TV와 TV리모컨의 관계와 같다.

TV리모콘(참조변수)를 사용하여 TV(인스턴스)를 다루기 때문.