목차

객체지향과 클래스

🗓️

객체지향의 개념

클래스란 정확히 무엇인가? p.34

간단히 말해서 클래스는 객체에 대한 처사진이다 객체의 인스턴스를 만들 때 객체를 구성하는 기초로 클래스를 사용한다.
클래스와 객체를 설명하려고 하는 일은 닭이 먼저냐 계란이 먼저냐 같은 딜레마이다. 객체란 용어를 사용하지 않고 클래스를 설명하기 어렵고 그 반대도 마찬가지이다. 예를 들어, 어느 개인의 자전거는 객체이다. 그러나 누군가 자전거를 만들기 위한 청사진 (즉, 클래스)을 만들어야만 했다. 닭이 먼저냐 계한이 먼저냐는 딜레마와 달리 OO 소프트웨어에서 무엇이 먼저인지는 알고 있는데, 그것은 클래스이다. 클래스가 없이는 객체의 인스턴스를 만들 수 없다. 그래서 이 단락에 있는 개념 대부분은 이 장의 앞부분에서 설명한것 것과 비슷하며, 특히 속성과 메서드에 대한 내용이 그렇다.


객체지향의 개념 요약 p.54

캡슐화

데이터와 행위를 단일 객체에 캡슐화하는 것은 OO 개발에서 우선적으로 중요하다. 단일 객체는 데이터와 행위를 포함하며 다른 객체로부터 원하는 것을 숨길 수 있다.

상속

클래스는 다른 클래스로부터 상속 할 수 있고 상위 클래스에 정의한 속성과 메소드를 활용할 수 있다.

다형성

다형성은 비슷한 객체가 다른 방식으로 동일한 메시지에 반응할 수 있다는 의미이다.
예를 들어, 시스템에 여러 도형이 있을 수 있다. 그러나 원, 사각형, 별모양은 각자 다르게 그린다. 다형성을 사용하면 이런 도형 각각에 동일한 메시지를 보낼 수 있으며, 각 도형이 스스로 그리는 책임을 진다.

조합

조합은 다른 객체로부터 객체를 구성 할 수 있다는 의미이다.


클래스는 객체 템플릿이다.

클래스는 객체의 템플릿이나 쿠키 절단틀과 같은 것으로 생각 할 수 있다. 클래스를 사용하여 객체를 만든다.
클래스는 높은 차원의 데이터 유혀으이 일종이라고 생각 할 수 있다. 예를들어 정수 또는 부동소수를 만드는 것처럼.

int x;
float y;

미리 정의된 클래스를 사용하여 객체를 만들 수도 있다.

myClass myObject;

이 예에서, 이름 자체에서 myClass가 클래스이고 MyObject가 객체라는 것을 분명히 나타낸다.

객체마다 고유한 속성(필드와 유사)과 행위(함수 또는 루틴과 비슷)가 있다는 것을 기억해야 한다. 클래스는 이 클래스를 사용하여 만드는 모든 객체가 소유하는 속성솨 행위를 정의한다.
클래스는 코드조각이다. 클래스에서 인스턴스가 생성되는 객체는 개별적으로 배포되거나 라이브러리의 일부가 될 수 있다. 객체가 클래스에서부터 생성되기 때문에 당연히 클래스는 객체의 기본적인 구성 블록(속성, 행위 및 메시지)을 정의해야 한다. 간단히 말해서 객체를 만들기 전에 클래스를 설계해야 한다.

예를 들어, 다음은 Person 클래스의 정의이다.

public class Person{
    //속성
    private String name;
    private String address;

    //메소드
    public String getName(){
        return name;
    }
    public void setName(String n){
        name = n;
    }
    public String getAddress(){
        return address;
    }
    public void setAddress(String adr){
    address = adr;
    }
}

속성

이미 살펴본 대로 클래스의 데이터는 속성으로 표현된다. 클래스 마다 속성을 정의해야만 속성이 클래스에서 인스턴스가 생긴 각 객체의 상태를 저장할 수 있다.

  • 액세스 지정
    데이터 유형이나 매소드가 공개(public)로 정의되면 다른 객체가 직접 액세스할 수 있다. 데이터 유형이나 메소드가 비공개(private)로 정의되면 특정 객체만 액세스 할 수 있다. 다른 액세스 수정자인 보호(protected)는 관련 객체가 액세스하는 것을 허용한다.

메시지

메소드는 클래스의 필요한 행위를 구현한다.

메소드

메시지는 객체 간 의사소통 메커니즘이다. 예를 들어 객체 A가 객체 B의 메소드를 호출할 때 객체 A는 객체 B로 메시지를 보낸다. 객체 B의 응답은 반환 값에 의해 정의된다.