본문 바로가기
Programming/java

OOP의 이해

by 막이 2012. 3. 6.

객체지향의 기본원리 : 추상화 , 캡슐화 , 모듈화 , 계층화

객체지향의 기본개념 : 객체 , 클래스 , 다형성 , 관계

1. 객체 지향 프로그래밍(OOP)

객체지향 프로그래밍이란 프로그램을 구성하는 각각의 객체를 정의하고 
서로 다른 요소들의 관계를 통해 프로그램을 개발하는 컴퓨터 프로그래밍의 패러다임 중 하나이다.
객체지향은 다른 언어가 지향하는 구조적인 프로그래밍 기법에 비해 여러 특징이 있다.


2.
객체(Object)

 

물리적인 객체 / 개념적인 객체 / 소프트웨어적 객체

*** 객체 = 식별성 (identity) + 상태 (state) + 행위 (Behavior)
==>
식별성 = 같은 상태를 가지더라도 구분 할 수 있다 .
==>
상태 = 객체가 가질 수 있는 조건일반적으로 시간에 따라 변한다 .
==> 
행위 = 객체가 반응 할 수 있는 Message의 집합  

객체란 현실 세계에서 구별되어 존재하는 사물 또는 사상이라고 정의 할 수 있다
독립적으로 식별가능하고 상태와 행위를 가지고 있는 모든 실체는 모두 객체이다
예를 들어 자동차, 휴대폰, 컴퓨터, 매수, 매도, 학생 등등 
현실세계에서 존재라는 유.무형의 실체를 객체라고 정의할 수 있다
객체와 객체는 상호연광성에 의해 관계가 형성된다.
스타크래프트 게임에서 각 유닛들이 객체가 되고
각 유닛이 다른 유닛과 건축, 전투 등의 관계 형성하는 것이다
간단히 SCV가 객체 이고 벙커 또한 객체이다. SCV가 벙커를 지으면 관계가 형성 된것이다.



3. Class

공통된 특성(속성) , 행위 , 관계 , 의미를 갖는 객체의 모임
==>
객체의 공통점을 찾아서 class로 정의 한다 .
==>
객체를 추상화 해서 표현 /정의 한것
==>
객체지향의 원리 ▶ 추상화


4. Abstraction(
추상화)
==>
객체를 구분되는 핵심적인 특징으로 분류 / 집중 
==>
문제 영역에 의존적이다 . ( 강사 -> 수강생 <- 판매원 )
==>
객체지향의 추상화를 이용 System Modeling 할수 있다 .
다양한 객체들의 공통성을 도출하여 클래스 또는 객체 클래스라는 그룹으로
다루며,모든 객체는 유일성이 존재하여 독립적으로 식별이 가능한 것을 추상화라 한다.
예를 들어, 실제 노트북은 제조회사, 모델, 시리얼넘버 등에 따라 유일하게 식별되므로 
노트북을 객체라고 할 수 있다. 또한 모든 노트북들의 공통적인 성질과 기능을 도출하여
노트북이라는 클래스로 추상화 할 수 있다.


5. Generalization(
일반화)
구체적인 클래스로 정의된 객체들의 공통성을 추출하여 부모 클래스로 일반화 시키는 것을 일반화라 한다. 냉장고, 선풍기, 텔레비젼, 전자렌지 등은 모두 가전제품이므로 가전제품이라는 클래스로 묶을 수 있다. , 임의의 클래스들 사이에 존재하는 공통사항을 모아 상위 클래스를 구성할 수 있다.
속성과 행위의 공유
~is a ~관계성립(하위는 상위가 사용되는 곳에 사용가능)
자식 클래서 구체적으로 정의해야함
class B extends A{
     //Field
    //method
}

6. Specialization
class A implemts B {
    //Override
}

7. Inheritance(상속)
일반화와는 반대되는 개념으로 계층적 추상화 수준을 분할하여 다양하고 복잡한 시스템을 일반화 시키기 위하여 하나의 일반화된 클래스를 상세화 하여 여러 클래스로 분할하여 사용하는것을 상속성 이라고한다. 이때 분할되는 클래스를 부모 클래스라고 하고, 분할되어 새로이 만들어지는 클래스를 자식 클래스라고 한다.

8. Realization

9. Association

필요하니까 생성한 다음에 불러서 사용


10. dependency

A- - -  - -  - -> B
   <use>
필요할때마다 그때 그때마다 생성해서 사용

A가 B를 사용하고 버림


Class A {

 강의하다(){
B b= new B();
b.쓰다();
}

}

11. Polymorphism(다형성)

12. Encapuslation(
캡슐화)
객체의 구현과 사용을 독립시켜 객체의 상세한 내부 로직과 상관없이 객체의 사용방법만 익히면 해당 객체의 사용이 가능한 것을 캡슐화라 한다. 예를 들어서 선풍기를 사용할때 내부구성요소는 캡슐화가 되어 있어서 미풍, 중풍, 약풍, 중지 버튼만 알면 쉽게 사용할수 있는것과 같다.