객체지향

개념
객체(object)란 실세계에 존재하거나 또는 개념적인 그 어떤 것을 표현한 것이다.

  • 객체지향

I. 배경 : 객체지향은 구조적 방식의 문제점을 극복하고 인간이 사고하는 방식대로 프로그램을 개발하려는 노력으로부터 탄생함

 

II. 객체지향의 장점 

  • 실세계를 자연스럽게 표현할 수 있음
  • 요구사항이 변경되더라도 유연하게 대응할 수 있음
  • 반복 개발 프로세스에 쉽게 적용할 수 있음
  • 프로젝트에서 의사 소통을 원활히 할 수 있음
  • 융통성, 확장성, 재사용성을 높일 수 있음

 

III. 객체지향의 주요 용어

객체(object)란 실세계에 존재하거나 또는 개념적인 그 어떤 것을 표현한 것이다. 예를 들면, 자동차, 사람, 컴퓨터는 실세계에 존재하는 객체이고 성적, 주문, 스택은 개념적인 객체임. 객체는 다음과 같은 3가지 특성 즉, 상태(state), 행위(behavior), 유일성(identity)을 갖는다. 구조나 행위가 유사한 객체들은 같은 공통 클래스에 정의된다. 클래스의 인스턴스와 객체는 거의 같은 의미로 사용됨.

구분

내용

클래스

(Class)

 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것

 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user define data type)

 클래스는 프로그래머가 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 사용할 수 있고, 다른 클래스 또는 외부 요소와 독립적으로 디자인되어야 한다.

객체

(Object)

 클래스의 인스턴스(실제로 메모리상에 할당된 것)

 자신 고유의 데이터(attribute)를 가지며 클래스에서 정의한 행위(behavior)를 수행.

 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용한다.

  1. 객체의 정의
    1. 소프트웨어 모듈(객체) =  자료구조  +  함수
  2. 객체는 상태(state), 능력(behavior), 정체성(identity)을 가진다.
    1. 상태
    2. 능력 : 연산(operation)을  수행 할 수 있는 능력
    3. 정체성 : 구별 가능성
  3. 객체 인스턴스(instance) = 객체
  4. 비슷한 객체의 구조와 행동은 공통 클래스로 선언

메서드(Method)

 클래스로부터 생성된 객체를 사용하는 방법

메시지

(Message

 객체에 명령을 내리는 메시지라 할 수 있다.

 객체 간의 통신은 메시지를 통해 이루어진다

 

 

IV. 자동차라는 클래스 예

자동차의 속성은 용도, 정원, 무게, 크기, 구조 등으로 정의되며 이 성질에 따라 여러 종류의 자동차가 존재

이때 속성의 정의는 자동차라는 클래스가 되고, 각 클래스의 속성의 값을 초기화 하여 여러 종류의 자동차 객체들이 선언

 

 

V. 객체지향의 특징

가. 객체지향개발방법론의 특징

캡슐화

(Encapsulation)

속성(데이터)과 메소드(연산)을 하나로 묶어서 객체로 구성하는 것

개념도

  특징

클래스를 선언하고 그 클래스를 구성하는 객체에 대하여

 public, private, protected

 장점

-Readability향상: 유지보수 용이

-재사용성이 높은 소프트웨어 개발

-정보은닉(Information Hiding)으로 내부자료에 대한 일괄성 유지

-객체간 인터페이스(메시지)를 이용하여 종속성 최소화

추상화

(Abstraction)

공통 성질을 추출하여 슈퍼클래스를 설정하는 것

1) 기능추상화 : 클래스 내 메소드를 정의(obj.getName())

2) 자료(데이터)추상화  : 객체 클래스 자체를 데이터 타입으로 사용(String,  Class)

3) 제어추상화 : 제어행위에 대한 개념화, 명령 및 이벤트(if, for, while)

개념도

특징

객체지향 언어에서는 클래스를 이용함으로써 데이터와 프로세스를 함께 추상화의 구조에 넣어 보다 완벽한 추상화 실현

장점

객체중심의 안정된 모델 구축 실세계를 자연스럽게 표현 분석의 초점이 명확

다형성

(Polymorphism)

동일한 이름의 오퍼레이션(메소드)이 각 클래스마다 다른 사양으로 정의될 수 있다는 것을 말함

종류

Overloading

메소드의 이름은 같으나 argument나 retrun type이 다른 경우

Overriding

Argument와 return type 같은 경우

정보은닉

(Information Hiding)

캡슐화된 항목들이 다른객체(Object)에게 보이지 않게 하는것

메시지 전달에 의해 다른 클래스내의 메소드가 호출됨

외부에서 클래스 내부의 정보를 알수 없게 숨기는 것

  •  
  • 단순히 외부에 데이터 공개 차단

예)

잘 모아진 개념을 적절하게 숨겼고, x와 y좌표를 잘못 사용할 수 있는 가능성줄임

 

public interface Point {
    double GetX();
    double GetY();
    void SetCartesian(double x, double y);
    double GetR();
    double GetTheta();
    void SetPolar(double r, double theta);
}

상속성

(Inheritance)

하위 클래스에게 자신의 속성과 메소드를 사용할 수 있도록 허용하는 것

 종류

 단일

부모와 자식 클래스 간의 관계가

수퍼클래스와 서브클래스로 유지

 다중

하나의 클래스가

하나 이상의 클래스로부터 상속 받음

 반복

같은 조부모 클래스로부터

상속 받은 두 부모 클래스로부터 상속 받는 것

 

 

댓글