[java] OOP - SOLID, A PIE

2 분 소요

업데이트:

객체 지향 설계법칙 SOLID 그리고 A PIE

간만에 자바공부를 새로해볼 겸 A PIE에 대해 검색하려는데
java a pie 라고 쳤다가 java api,
a pie 는 진짜 먹는 파이가 나와서 난감..
java oop a pie라고 검색하세요 ..

OOP?

객체 지향 프로그래밍(Object-Oriented Programming)
컴퓨터 프로그래밍의 패러다임 중 하나로써 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 “객체”들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

객체 지향 프로그래밍의 장점

  • 재사용성
    선언한 클래스를 몇 번이고 사용할 수 있다
  • 데이터 중복
    사용자가 여러 클래스에서 유사한 기능을 원하는 경우, 유사한 기능에 대한 공통 클래스를 정의하고 상속할 수 있다
  • 생산성 향상
    잘 설계된 클래스를 독립적인 객체로 사용함으로서 개발의 생산성을 높일 수 있다
  • 보안
    데이터 숨김 및 추상화를 통해 노출되는 데이터를 제한할 수 있다
  • 자연적인 모델링
    우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있다
  • 유지보수의 우수성
    프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉬워서 매우 경제적이라할수 있다

객체 지향 설계 원칙 SOLID

읽어보기 : S.O.L.I.D: The First 5 Principles of Object Oriented Design

  • S : SRP
    • 단일 책임 원칙 (Single responsibility principle)
      한 클래스에는 하나의 책임만 가져야 한다
  • O : OCP
    • 개방-폐쇄 원칙 (Open/closed principle)
      소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다
  • L : LSP
    • 리스코프 치환 원칙 (Liskov substitution principle)
      프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위타입의 인스턴스로 바꿀 수 있어야 한다
  • I : ISP
    • 인터페이스 분리 원칙 (Interface segregation principle)
      특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
  • D : DIP
    • 의존관계 역전 원칙 (Dependency inversion principle)
      프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다

객체 지향 개념 A PIE

🥧🥧🥧

  • A : Abstraction
    • 추상화 : 복잡함을 단순한 것들로 표현하는 방법
      객체, 클래스, 변수 등을 사용해서 어떻게 작동하는 지(특징) 나타내는 것
      책을 객체로 만든다고 할 때 공통 속성이 무엇이 있을까 생각해보면,
      ISBN, 제목, 작가, 출판사 … 등이 있다
      이 때 공통적인 특징, 속성이나 기능 들을 뽑아내는 것이 추상화다
  • P : Polymorphism
    • 동일한 단어를 사용해서 다른 문맥에서 다른 뜻으로 사용하는 것
      메소드의 오버로딩, 오버라이딩처럼 같은 이름으로 다른 동작을 하게 할 수 있다
      소리지르기()이라는 메소드가 있을 때, 내가 소리지르기() 하면 “야!!!”일테고
      동생이 소리지르기()하면 악!~~ 하는 것처럼 같은 동작을 다른 대상이 다르게 수행할 수 있다
  • I : Inheritance
    • 부모로부터 상속 받아 자식도 사용할 수 있는 것
      자식 클래스가 부모클래스로부터 받은 속성을 사용할 수 있다
      우리 엄마가 소파를 샀다 그 소파는 나도 쓰고 엄마의 자식인 동생들도 쓴다
      엄마가 산 소파가 있기 때문에 나는 소파를 또 살 필요가 없다
      필요하다면 따로 살 수 있지만 엄마 소파를 쓸 수 있다
      부모로부터 받은 것은 자식인 내가 쓸 수 있지만 부모의 이름(생성자)와 비자금(private)은 못쓴다
  • E : Encapsulation
    • 속성과 행위를 하나로 묶고 외부에서 쉽게 접근하지 못하도록 숨기는 것
      private으로 정의된 속성을 외부에 노출시키지않고 자신의 클래스에서만 사용하게 하는 것
      캡슐화 되어있지 않은 데이터와 코드는 사용하기 불편하다
      예시로 적합한지 잘 모르겠지만, 음료 자판기로 생각을 해보자면
      음료 자판기 한 대에는 여러 음료수와 기능(구매하기, 품절 표시하기 등등)을 가지고 있다
      사용자인 나는 음료를 마시려면 직접 손을 넣어 뺄 수는 없고, 돈을 넣고 음료 버튼을 누른다
      자판기 외부의 버튼(음료 선택, 잔돈 반환 등)으로 자판기를 동작시킨다

참고

객체 지향 프로그래밍
객체지향언어란? [특징, 장점, 단점, 종류]
SOLID(객체 지향 설계)
Advantages of OOP
What Are OOP Concepts in Java? The Four Main OOP Concepts in Java, How They Work, Examples, and More
🙈객체 지향 프로그래밍( OOP ) 개념🐵
자바[Java] 캡슐화[Encapsulation]란? 무엇인가?

태그:

카테고리:

업데이트:

댓글남기기