본문 바로가기
to Developer/JAVA

객체 지향 프로그래밍

by EH헌 2024. 1. 27.

객체 지향 프로그래밍 (OOP, Object-Oriented Programming)

객체 지향 프로그래밍이란 프로그램 구현에 필요한 객체를 파악하고 객체들 간의 상호작용을 통해 프로그램을 만드는 것 을 말한다.


객체 지향 프로그래밍 특징

  • 캡슐화
    • 정보 은닉 : 필요 없는 정보는 외부에서 접근하지 못하도록 제한
    • 높은 응집도, 낮은 결합도로 유연함과 유지보수성 증가
  • 추상화
    • 사물들의 공통적인 특징을 파악해서 하나의 개념(집합)으로 다루는 것
    • 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념
  • 상속
    • 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념
  • 다형성
    • 형태가 같은데 다른 기능을 하는 것을 의미
    • 오버라이딩, 오버로딩
      • 오버라이딩(Overriding) - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
      • 오버로딩(Overloading) - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것

OOP(객체 지향 프로그래밍) SOLID 원칙

  • S : 단일 책임 원칙(Single Responsible Principle)
    • 객체는 단 하나의 책임만을 가져야한다.
    • 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.
  • O : 개방 폐쇄 원칙(Open Closed Principle)
    • 기존 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계되어야 한다.
  • L : 리스코프 치환 원칙
    • 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야한다.
  • I : 인터페이스 분리 원칙
    • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
    • 인터페이스가 명확해지고, 대체 가능성이 높아진다.
  • D : 의존관계 역전 원칙 (Dependency Inversion Principle)
    • 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 것이다.
    • 쉽게 이야기하면, 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻.

객체 지향 프로그래밍 장점

  • 코드 재사용이 용이하다
    • 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.
  • 유지보수가 쉽다
    • 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 있기 때문에 해당 부분만 수정하면 된다.
  • 대형 프로젝트에 적합
    • 클래스단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러명, 여러회사에서 개발이 필요할 시 업무 분담하기 쉽다.

 

객체 지향 프로그래밍 단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계시 많은 시간과 노력이 필요하다.

 객체 지향 프로그래밍 vs 절차 지향 프로그래밍

  • 객체 지향 프로그래밍
    • 구현해야할 객체들 사이의 상호작용을 프로그래밍하는 방식으로 상속, 다형성, 추상화, 캡슐화를 통해 결합도를 낮추고 응집도를 높일 수 있으며 코드의 재사용성도 높일 수 있다.
  • 절차 지향 프로그래밍
    • 실행하고자 하는 절차를 정하고, 순차적으로 프로그래밍 하는 방식으로 빠르다.
    • 엄격하게 순서가 정해져 있기에 비효율적이고 유지보수가 어렵다.
    • 목적을 달성하기 위한 일의 흐름에 중점을 둔다.


자료 참고
[참고 1] [참고 2]

'to Developer > JAVA' 카테고리의 다른 글

Java 기초  (0) 2024.01.29
JVM  (0) 2024.01.28
Java의 특징  (0) 2024.01.27