Java

객체지향

기초공사 2023. 4. 3. 19:00

객체지향 프로그래밍이란?

현실세계의 개체를 하나의 객체로 만들어 기계를 조립하듯 제품을 만드는 프로그래밍 방식을 말한다. 

객체 : 데이터와 데이터를 처리하는 함수를 묶어 놓은 것.

 


객체지향 프로그래밍 언어의 특징

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

 

추상화

 객체 공통된 특징들을 추출해 설계도를 만드는 작업

 

캡슐화

데이터와 데이터를 처리하는 함수를 하나로 묶는 것

사용자는 interface로 소통하고 굳이 내부를 알 필요가 없다.

  1. 정보은닉이 되어있어 파급효과가 적다.
  2. 유지보가 좋다.(재사용성이 용이)
  3. 인터페이스가 단순해지고 결합도가 낮아진다.

 

상속

상위 클래스의 속성(변수)과 기능(method)들을 하위 클래스가 물려받는 것

확장의 개념

  1. 재사용이 가능

※다중상속 : 한 클래스가 두 개 이상의 상위 클래스로부터 상속받는 것 (c++은 가능, 자바는 불가능)

 

다형성

여러 가지 형태를 가지고 있다는 의미

자식 객체의 타입 ⊇ 부모 객체의 타입

  • 오버로딩

        함수의 이름이 같더라도 매개변수의 개수나 타입이 다르면 다른 함수로 인식한다. (함수의 이름 재사용)

 

  • 오버라이딩

         부모클래스의 메서드를 자식 클래스에서도 같은 이름으로 재정의해 사용가능 

         (+ 연산자의 경우 숫자를 연산하는 연산자이지만 오버라이딩해 문자열을 이어주는 연산자로 재정의해 사용이 가능하다.)

 


객체지향의 장단점

 

장점

  • 유지보수가 용이하다.
  • 재사용성이 좋다.

단점

  • 상대적으로 느린 실행속도
  • 필요한 메모리가 증가한다.

객체지향  설계 원칙

 

시스템의 변경이나 확장에 유연한 시스템을 설계하기 위해 만든 5가지 원칙들의 앞글자를 따서 SOLID원칙이라고 부른다.

 

 

  1. 단일 책임 원칙 (Single Responsibility Principle)
    • 객체는 단 하나의 책임만을 가져야 한다.
    • 응징도는 놓고 결합도는 낮게 설계해야 한다.
  2. 개방 폐쇄 원칙 (Open Closed Principle)
    • 기존의 코드를 변경하지 않고 기능을 추가할 수 있게 설계해야 한다.
    • 공통인터페이스를 하나의 인터페이스로 묶어 캡슐화하는 방식이 대표적이다.
  3. 리스코프 치환원칙 (Liskow Subsitution Principle)
    • 자식 클래스는 최소한 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다.
    • 자식 클래스는 부모클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야 한다.
  4. 인터페이스 분리원칙 (Interface Segregation Principle)
    • 자신이 사용하지 않는 인터페이스와 의존관계를 맺거나 영향을 받지 않아야 한다.
    • 인터페이스가 갖는 하나의 책임이다.
  5.  의존 역전 원칙 (Dependency Inversion Principle)
    • 각 객체들 간의 의존 관계가 성립될 때 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다.

 


Reference