[java] OOP - SOLID, A PIE
업데이트:
객체 지향 설계법칙 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)
한 클래스에는 하나의 책임만 가져야 한다
- 단일 책임 원칙 (Single responsibility principle)
O
: OCP- 개방-폐쇄 원칙 (Open/closed principle)
소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다
- 개방-폐쇄 원칙 (Open/closed principle)
L
: LSP- 리스코프 치환 원칙 (Liskov substitution principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위타입의 인스턴스로 바꿀 수 있어야 한다
- 리스코프 치환 원칙 (Liskov substitution principle)
I
: ISP- 인터페이스 분리 원칙 (Interface segregation principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
- 인터페이스 분리 원칙 (Interface segregation principle)
D
: DIP- 의존관계 역전 원칙 (Dependency inversion principle)
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다
- 의존관계 역전 원칙 (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]란? 무엇인가?
댓글남기기