객체지향 프로그래밍

dgh03207·2022년 3월 1일
0

CS

목록 보기
3/6

객체지향(OOP)과 절차지향의 차이점

절차적 프로그래밍은 ‘절차적’으로 코드를 구성한다. 그래서 데이터에 대한 순서를 파악하여 필요한 기능을 함수로 만들어 절차적으로 진행시킨다.

반면에 객체지향 프로그래밍은 기능들을 묶어 객체로 만든다.각 메소드나 필드를 호출하여 서로간의 상호작용으로 알고리즘을 구성한다.

오라클에서는 객체지향 프로그래밍에 대해서 다음과 같이 정의하고 있다.

객체지향 프로그래밍은 클래스간의 구조와 상호작용하고 잘 정의된 객체들을 기반으로하는 프로그래밍 도구이다.

또한 클래스와 객체에 대해서는 다음과 같이 정의하고 있다.

클래스는 데이터와 데이터를 처리하는 메소드들을 정의한 구조체이다.

객체는 클래스의 실행가능한 복제품이다.

지원하는 기능과 특징의 차이점

  1. 캡슐화,다형성,클래스 상속을 지원하는가?
  2. 데이터 접근 제한을 걸 수 있는가?
💡 객체지향은 코드의 재사용성이 높고, 유지보수, 중복된 코드의 제거가 용이하다는 점이 이점이다.
  1. 코드의 재사용성이 높다.
  2. 코드의 관리가 용이하다
  3. 신뢰성이 높은 프로그래밍이 가능하다.

Q. 그렇다면 언제나 객체 지향 프로그래밍이 더 좋은가?

다루는 데이터가 구조화되어 있다면(그래서 높은 결합도를 가지고 있다면) 객체 지향 프로그래밍이 좀 더 적합하다. 왜냐하면 각각의 구조화된 데이터에 맞는 메소드를 구현하고, 외부에서 데이터에 직접 접근하는 대신에 메소드를 통해 간접적으로 접근하여, 외부와 구조화된 데이터 사이의 결합도를 낮출 수 있다.(캡슐화)

객체지향 SOLID 5원칙

  1. 단일 책임 원칙(SRP : Single Responsibility Principle)
    • 결합도(Coupling)은 낮추고 응집도(Cohesion)은 높여야 한다.
      • 결합도 : 클래스간 상호 의존 정도
        • 결합도가 낮으면 의존성이 줄어 재사용 및 유지보수 유리
      • 응집도 : 모듈 내부 구성 요소들의 기능적 관련성
        • 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용 및 유지보수 유리
  2. 개방-폐쇄 원칙(OCP : Open Close Principle)
    • 자신의 확장에는 열려있고, 주변의 변화에는 닫혀있음.
      • 상위 클래스 or 인터페이스를 중간에 두어 자신의 변화에 대해서는 폐쇄하고 인터페이스는 외부의 변화에 대해 확장성을 개방한다.
        • JDBC,Mybatis,Hibernate등 JAVA에서는 Stream
  3. 리스코프 치환 원칙(The Liskov Substitution Principle)
    • 하위 타입은 언제나 자신의 기반인 상위 타입으로 교체할 수 있어야 한다.
      • ex) 상위 : 자동차/운송수단 - 하위: SUV,승용차
  4. 인터페이스 분리 원칙(ISP : Interface Segregation Princple)
    • 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
      • 인터페이스로 각 기능을 분리하여 사용하는 메소드에만 의존 관계를 맺는다.
    • 프로젝트 요구사항과 설계에 따라 SRP 또는 ISP를 선택한다.
  5. 의존관계 역전 원칙(DIP : Dependency Inversion Principle)
    • 클래스는 다른 클래스에 직접 의존하기 보다, 인터페이스나 추상 클래스에 의존해야한다.
    • 자신보다 변하기 쉬운 것에 의존하지 말아야 한다.
      • 개방폐쇄 원칙

4가지 특징

- 캡슐화(Encapsulation) : 정보은닉(information hiding)
- 상속(Inheritance) : 재사용
- 추상화(Abstraction) : 모델링
- 다형성(Polymorphism) : 사용편의

  1. 캡슐화
    • 변수와 함수를 하나의 단위로 묶는 것을 의미한다.
    • 객체의 속성을 보호하기 위해 사용한다.
      • 객체 안의 속성을 처리하는 Method
        • 다른 객체를 전달받아 다른 객체에 정의된 속성을 처리해서는 안된다.
        • 실행에 필요한 값들은 매개 변수의 형태로 전달되어야 한다.
    • Method 설계
      • 실물 객체가 가진 기능을 모두 제공
      • 각각의 Method는 서로 관련성이 있어야 한다.
      • Getter/Setter Method
        • 외부에서 내부 속성에 직접 접근하면 안된다.
      • CRUD
      • Business Logic Method
      • 객체 생명 주기 처리 Method
        • destroy(),disconnect(),quit()등 소멸에 대한 method
      • 객체 영구성 관리 Method
        • 유효성 속성에 대한 변화가 필요한 경우 외부에서 접근이 불가하도록 private으로 선언하고, 내부의 다른 Method를 통해 사용 됟록 한다.
      • Method 속성은 1개에 속할 필요는 없고 여러 속성에 해달될 수 있다.
    • 장점
      • 객체지향의 패러다임 중 하나인 추상화 제공
        • 단순 호출만으로 해당 기느을 실행하고 이를 통한 객체 단위 프로그램 설계 가능
      • 재사용성 향상
        • 한 객체 관련 속성 or Method는 모두 캡슐화의 형태로 제공되기 때문에 모듈성과 응집도가 높아짐
        • 객체의 경우 단일 객체에만 영향을 주기 때문에 전체 프로그램에 영향을 주지 않아 재사용성이 높음
        • 유지 보수의 효율성 향상
      • 무결성 보장
        • Getter/Setter 제외하고 public method는 입력된 매개변수를 Validation을 한 후에 실행하는 것을 기본으로 한다.
  2. 상속
    • 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말한다.
    • 상속은 하위로 내려갈수록 구체화된다.
    • 장점
      • 프로그램 구조에 대한 이해도 향상
        • 최상위 클래스의 구조를 보고 하위 클래스의 동작을 이해할 수 있음
      • 재사용성 향상
        • 상속을 이용하여 해당 클래스에 필요한 속성 및 메소드를 모두 정의하지 않고 상속 받아 사용가능
      • 확장성 향상
        • 일관된 형태의 객체를 추가 할 수 있어 간단하게 확장 가능
      • 유지보수성 향상
        • 각 객체마다 일관된 형태를 지님
  3. 다형성
    • 하나의 객체가 여러 형태로 변화하는 것을 의미 : 오버라이딩
    • 같은 이름의 Method로 각자의 객체에 맞는 여러 형태의 다른 기능을 구현할 수 있다. : 오버로딩
  4. 추상화
    • Modeling
    • 구체적으로 공통적인 부분 또는 특정 특성을 분리해 재조합하는 부분
    • 다형성,상속 모두 추상화에 속한다.

대표적인 객체지향 언어

  • C++
  • JAVA
  • Python(접근제한자가 없음)

CS 스터디 : 노션 주소

Reference

profile
같이 공부하자!

0개의 댓글