티스토리 뷰

Java/기본

028. 객체 지향 프로그램 ( OOPL )

따강아지 2022. 5. 9. 23:45

자바 언어는 객체 지향 언어로 자바의 Class를 학습하기 전에 객체 지향 프로그램에 대해서 알아보고자 합니다.

" 객체 지향 프로그램(OOP)모델을 기반으로 하는 고급 프로그램 언어 " 

1. 객체 지향 프로그램 언어 ( Object-Oriented Programming Language )

모든 데이터(객체)의 상태(Status)와 행동(Behavior)을 구체화하는 프로그래밍을 객체 지향 프로그래밍으로 논리적 클래스, 객체, 메서드의 관계 및 기타 프로세스를 설계 하는 하는 것으로 프로그래밍 구문이 하나 이상의 객체를 기반으로 데데이터 추상화, 상속, 갭슐화 하여 클래스를 생성 하고 관련 객체를 포함하여 개발 하는 것을 의미합니다.

1-1. 왜 Class가 만들어 졌을까 ?

 데이터의 처리는 Data 관점과 처리 관점으로 나누어서 생각을 해보겠습니다.


Data 관점에서 보면 절차적 언어 시절 현실 세계의 정보를 담기 위해서는 변수를 사용하여 코드를 작성 하기 시작 했습니다.  그러나 코드를 작성 하면 할 수록 많은 변수가 필요하게 되었고 변수를 관리하는데 어려움이 나타나서  동일 자료형을 데이터를 관리 할 수 있는 배열을 사용하여 코드를 작성 하였으나 현실 세계의 정보를 담기 위해서는 다차원 배열을 사용하게 됩니다. 다차원 배열은 프로그램 코드를 복잡해 졌읍니다. 이것은 배열의 한계였습니다. 언어가 발전 하면서 서로 다른 자료형을 사용하는 구조체를 사용하게 되지만 이것 또한 현실 세계의 정보를 담기에는 부족 하여서 출현 할 것이 클래스 입니다.

 처리 관점의 절차적 언어에서는 프로그램 코드는 순차적으로 처리 하게 됩니다. 사람이 자동차를 운전 하여 장애 감지 하는 프로그램을 작성 한다면

  1. 운전자가 자동차에 탑승 한다.
  2. 운전자가 자동차 시동을 켠다.
  3. 운전자가 자동차 운전을 한다.
  4. 장애 감지가 되면 운전자는 자동차를 정치 한다. 그렇지 않으면 운전자가 자동차를 운전 한다.

로 코드를 작성 하게 됩니다. 만약 운전자가 다른 사람 이면 코드를 재 작성을 해야 하였습니다. 이런 문제는 프로그램 기술의 진화로 객체 지향 프로그램 개념이 나왔습니다.


1-2. OOP 3대 요소

  • 캡슐화( Encapsulation ) = 정보 은닉 :
    - 프로그램 내에서 같은 기능의 목적으로 작성된 코드를 모아서 다른 곳 ( Class ) 에서 안 보이게 숨기는 것
    - Class 속성을 숨기고 ( private ), 공개 ( public )
  • 상속 ( Inheritance ) = 재사용 + 확장
    - Class와 Class관계 정의 ( 부모와 자식 )
    - 자식 Class는 부모 Class 속성 및 기능을 사용 할 수 있음
  • 다양성( polymorphism; 폴리모피즘 ) = 사용 편의
    - 하나의 객체가 여러 가지 형태를 가질 수 있는 것
    - 오버라이딩(  재정의 : Overriding ), 오버로딩(  기능확장  : Overloading )

1-3. OOP 5원칙

  • 단일 책임 원칙(Single Responsibility Principle)
    -  모든 클래스는 각각 하나의 책임만 가져야 한다.
    -  특수한 목적을 수행하도록 만든 클래스는 해당 목적 외에 다른 기능을 수행하면 안된다.
  • 개방-폐쇄 원칙(Open Closed Principle)
    -  클래스는 확장에는 열려 있고 수정에는 닫혀 있어야 한다.
    - 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계 되어야함
  • 리스코프 치환 원칙(Liskov Substitution Principle)
    - 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다
    - 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야 한다.
  • 인터페이스 분리 원칙(Interface Segregation Principle)
    -  한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 함.
    -  하나의 일반적인 인터페이스보다 여러 개의 구체적인 인터페이스가 낫다
  • 의존 관계 역전 원칙(Dependency Inversion Principle)
    -  의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 한다.
    - 구체적인 클래스보다는 인터페이스나 추상 클래스와 관계를 맺어야 한다.

'Java > 기본' 카테고리의 다른 글

030. Class 구성 요소  (0) 2022.05.16
029. 클래스 ( Class )  (0) 2022.05.11
027. 자바 : 제어문  (0) 2022.03.14
026. 자바 : instance 연산자  (0) 2022.03.06
025. 자바 : 삼항연산자  (0) 2022.03.06