객체 지향 프로그래밍(OOP: OBject Oriented Programming)

  • 컴퓨터 프로그래밍 패러다임 중 하나
  • 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
  • 문제를 여러 개의 객체 단위로 나누어 처리하는 방식

 

장점

  • 코드 재사용이 용이
    • 남이 만든 클래스를 가져와 이용 가능
    • 상속을 통해 확장해서 사용 가능
  • 유지보수가 쉬움
    • 객체 단위로 구분되므로 코드를 수정할 때 해당하는 클래스에서 필요한 부분만 수정하면 된다.
    • 절차 지향 프로그래밍은 코드를 수정할 때 일일이 찾아 수정해야 함.
  • 대형 프로젝트에 적합
    • 클래스 단위로 모듈화 하여 개발 가능
    • 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담이 쉽다.

 

단점

  • 처리 속도가 상대적으로 느림
  • 객체가 많으면 용량이 커짐
  • 설계 시 많은 시간과 노력, 즉 비용이 듦.

 

특징

추상화

  • 불필요한 정보는 숨기고 중요한 정보만을 표현하여 간단히 만드는 것
  • 객체들의 공통된 속성과 행위(필요한 정보)를 묶어 클래스로 설계하는 과정 자체

캡슐화

  • 두 가지 개념
    • 객체들의 공통된 속성(변수 또는 필드)과 행위(메서드)를 클래스(캡슐)로 묶는 것
      • 객체의 재사용에 유리
    • 실제 구현 내용의 일부를 외부로부터 감추어 은닉하는 것
      • 접근 제어자(ex. private)를 통해 외부에 노출하지 말아야 하는 정보 또는 기능을 제어 권한이 있는 객체에서만 접근할 수 있도록 함.

상속

  • 상위 개념의 특징을 하위 개념이 물려받은 것
  • 새로운 클래스가 기존 클래스의 자료와 연산을 물려받아 이용할 수 있게 하는 기능
    • 부모 클래스의 속성과 기능을 자식 클래스가 이어받아 사용
    • 일부를 변경해야 할 경우 자식 클래스에서 재정의하여 사용
  • 다중 상속
    • 하나의 자식 클래스가 여러 개의 부모 클래스를 갖는 것
    • 자바에서는 지원하지 않음
      • 다이아몬드 문제
        • A(부모 클래스)-> B, C(자식 클래스)
        • B, C(부모 클래스) -> D(자식 클래스, 다중 상속)
        • 만약 B와 C가 A로부터 메서드를 각각 오버라이딩하여 구현하였다면 D는 어떤 부모의 메소드를 써야 하나? -> 충돌!

다형성

  • 하나의 변수명 또는 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것
  • 오버라이딩(Overriding)과 오버로딩(Overloading)으로 구현
    • 오버라이딩: 부모 클래스의 메서드를 자식 클래스에서 같은 메서드 이름과 매개변수로 재정의하는 것.
    • 오버로딩: 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것.

 

출처

https://webclub.tistory.com/155

https://jeong-pro.tistory.com/95

'Backend > 🌏OOP' 카테고리의 다른 글

[OOP] 의존성 주입  (0) 2021.11.16
[OOP] 클래스, 객체, 인스턴스  (0) 2021.11.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기