객체지향 설계(object-oriented design)방법은 객체지향 개념(object-oriented conceps)에 입각하여

시스템 명세를 분석하고 잘 정의된 객체들을 먼저 식별 한 뒤에

이들이 상호 작용할 수 있도록 구성함으로써 원하는 결과를 생성하게 하는것이다.

 

객체지향 설계의 개념

1. 문제 해결을 위한 핵심 클래스들을 식별한다. 이 때 클래스가 지원하는 캡슐화를 이용한다.

2. 식별된 클래스들간의 계층 관계를 설계를 설계한다. 이 때 클래스들간의 상속을 이용하여,

   프로그램 코드를 재사용할 수 있도록 교려한다.

 

객체지향 개념의 본질

캡슐화(capsulation), 상속(inheritanc), 다형성(polymorhism)

 

클래스 : 클래스는 똑같은 종류의 클래스 객체를 생성하는 형틀인 템플릿(template) 기능을 한다.

data값을 저장하는 필드(field)

이 필드에 연산을 수행하는 메소드(method)

 

객체는 클래스의 한 인스턴스(instance-실사례)로 생성된다.

클래스의 인스턴스로 한 객체가 생성되면 그 객체는 클래스에서 정의된 필드들을 가지게 되고,

이 필드들은 그 클래스의 메소드들을 통해서만 접근되고 조작할 수 있다.

다른 클래스의 객체들은 이 객체의 필드들을 직접 접근할 수 없다.

또한 메소드들은 객체와 함께 매개변수를 통해 함수 호출 형태로 기동된다.

 

캡슐화 : 클래스 내부 필드의 존재나 메소드의 구현에 대해서는 가능한 외부에 노출시키지 않는 것

캡슐화의 핵심은 외부와의 인터페이스를 위한 부분만 공개하고 나머지 부분은 은닉시키는 것인데,

이를 정보 은닉(information hiding)이라고 한다.

 

객체지향을 사용하는 주요 목적 중 하나는 소프트웨어 코드의 재사용(reuse)에 있다.

 

상속 : 기존의 클래스에다 추가로 필요로 하는 필드와 메소드를 첨가하여 새로운 클래스로 확장하는 것

새로 확장된 클래스는 원래의 클래스 필드와 메소드들을 모두 그대로 상속받아 사용할 수 있다.

 

이때 재사용된 원 클래스는 슈퍼 클래스(super class)라 하고,

새로 확장된 클래스를 서브 클래스(sub class)라 한다.

슈퍼 클래스와 서브 클래스를 기본 클래스(base class) 파생 클래스(derived class)라고 한다.

슈퍼 클래스와 서브 클래스의 관계는 이행적(transitive)성질을 가지고 있다.

 

메소드 재정의 : 서브클래스가 슈퍼클래스로부터 상속받은 특정 메소드가 적절치 않다고 판단되면

                        서브클래스가 슈퍼클래스로부터 상속된 메소드를 재정의 하여 사용하는 것

이렇게 메소드 재정의(method overriding)를 하면, 메소드의 이름과 매개변수의 수와, 타입,

즉, 시그니처(signature)가 같으면서도 슈퍼클래스의 것과는 연산 내용이 전혀 다른 메소드가 된다.

 

다형성 : 하나의 메소드 이름이 상이한 클래스에 여러 메소드로 중복되어 나타나 있다는 의미

             이렇게 되면 실행시켜야 할 메소드는 실행시간에 가서야 정확히 결정 할 수 있다.

             이것을 동적 바인딩(dynamic binding)이라고 한다.

- 원래의 다형성 의미 : 여러(poly) 가지 형태(morph)

 

중복된 메소드가 존재하는 클래스 계층에서 한 클래스의 참조 타입으로 선언된 변수가

여러 상이한 클래스 객체(서브 클래스 객체)를 참조할 수 있고

참조 변수에 의해 호출되는 메소드가 여러 개 중복 구현되어 있어서

어느 클래스의 메소드를 실행시켜야 될지 애매한 경우에,

시스템은 실행 시간에 실제로 이 참조 변수가 참조하고 있는 객체의 클래스를 판단해서

그 클래스에서 구현된 메소드를 실행시킨다.

 

메소드 다중화(method overloading)

한 클래스 내에서 이름이 같고 매개 변수의 수나 타입만 다른 메소드들이 여러개 구현되어 있는 것

 

이 경우에 메소드 호출시 시스템은 인자의 수와 타입에 일치하는 메소드 구현을 선정하여 실행시준다.

이것(메소드 다중화)도 다형성에 속한다고 볼 수 있다.


'General > C, C++, C#' 카테고리의 다른 글

[C++] Using namespace  (0) 2009.11.30
[C++] 객체지향 프로그래밍  (0) 2009.11.30
[C++] 객체지향  (0) 2009.11.30
[C 실습] 50문제 코딩하기  (0) 2009.11.30
[API] 가상키 코드(virtual key code) / WM_KEYDOWN  (0) 2009.11.30
[API] 유니코드  (0) 2009.11.30
Posted by croute

댓글을 달아 주세요