객체지향 프로그래밍 특징
1. 추상화
- 공통된 특징, 본질을 모아 추출
- 설계(역할)와 구현을 분리
- 인터페이스 등을 이용해서, 어떤 객체가 가져야 할 핵심적 기능을 규정 (설계)
- 인터페이스를 상속받은 클래스에서 구현한다. (구현)
2. 상속
- 기존의 클래스를 재활용하여 새로운 클래스를 만든다.
- 반복적인 코드를 최소화, 오류를 줄여줌.
- 메서드 오버라이딩(Method Overriding)을 통해 재정의.
3. 다형성
어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질
4. 캡슐화
- 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하게 은닉
- 접근제어자(public, private, protected, getter, setter etc.)
객체지향 SOLID 원칙
- SRP (Single Responsibility Principle, 단일책임의 원칙)
- 하나의 클래스는 하나의 책임만 갖는다.
- 너무 많은 기능을 넣지 않는다.
- 기준이 모호하다는 비판, 각자의 SRP 기준은 다를 수 밖에 없다.
- 변경사항이 있을 때, 애플리케이션의 파급 효과가 적으면 SRP 원칙을 잘 따른 것으로 볼 수 있다.
- 지금 필요한 건 기능을 줄이는 용기 (출처 : SBS 골목식당)
- OCP (Open Closed Principle, 개방폐쇄의 원칙)
- 높은 응집도와 낮은 결합도
- 확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적
- 유연한 코드 수정, 쉽게 확장할 수 있게 설계
- 객체를 직접 수정하는 것을 제한
- LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
- 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스(객로 변환
- 하위클래스는 인터페이스의 규약을 잘 지켜야 한다.
- 자식 객체는 부모 객체를 완전히 대체할 수 있어야 한다.
public class Rectangle { protected int width; protected int height; public int getWidth() { return width; } public int getHeight() { return height; } public virtual void setWidth(int width) { this.width = width; } public virtual void setHeight(int height) { this.height = height; } public int getArea() { return width * height; } } public class Square : Rectangle { public override void setWidth(int width) { super.setWidth(width); super.setHeight(getWidth()); } public override void setHeight(int height) { super.setHeight(height); super.setWidth(getHeight()); } } public class Main { public static void main(String[] args) { Rectangle rectangle = new Square(); rectangle.setWidth(10); rectangle.setHeight(5); System.out.println(rectangle.getArea()); } }
- ISP (Interface Segragation Principle, 인터페이스 분리 원칙)
- 범용 인터페이스 하나보다는 특정 클라이언트를 위한 여러 개의 인터페이스 분리가 더 좋다.
- ex. 스마트폰 인터페이스(전화, 문자, 무선충전, AR, 생체인식)로 갤럭시 S23을 만들 때, 갤럭시 S2를 만들 때
- 출처 : Inpa 티스토리 (inpa.tistory.com)
- 범용 인터페이스 하나보다는 특정 클라이언트를 위한 여러 개의 인터페이스 분리가 더 좋다.
- DIP (Dependency Inversion Principle, 의존관계 역전 원칙)
SRP (Single Responsibility Principle, 단일책임의 원칙)
-
- 하나의 클래스는 하나의 책임만 갖는다.
- 너무 많은 기능을 넣지 않는다.
- 기준이 모호하다는 비판, 각자의 SRP 기준은 다를 수 밖에 없다.
- 변경사항이 있을 때, 애플리케이션의 파급 효과가 적으면 SRP 원칙을 잘 따른 것으로 볼 수 있다.
- 지금 필요한 건 기능을 줄이는 용기 (출처 : SBS 골목식당)
- OCP (Open Closed Principle, 개방폐쇄의 원칙)
- 높은 응집도와 낮은 결합도
- 확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적
- 유연한 코드 수정, 쉽게 확장할 수 있게 설계
- 객체를 직접 수정하는 것을 제한
- LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
- 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스(객로 변환
- 하위클래스는 인터페이스의 규약을 잘 지켜야 한다.
- 자식 객체는 부모 객체를 완전히 대체할 수 있어야 한다.
public class Rectangle { protected int width; protected int height; public int getWidth() { return width; } public int getHeight() { return height; } public virtual void setWidth(int width) { this.width = width; } public virtual void setHeight(int height) { this.height = height; } public int getArea() { return width * height; } } public class Square : Rectangle { public override void setWidth(int width) { super.setWidth(width); super.setHeight(getWidth()); } public override void setHeight(int height) { super.setHeight(height); super.setWidth(getHeight()); } } public class Main { public static void main(String[] args) { Rectangle rectangle = new Square(); rectangle.setWidth(10); rectangle.setHeight(5); System.out.println(rectangle.getArea()); } }
- ISP (Interface Segragation Principle, 인터페이스 분리 원칙)
- 범용 인터페이스 하나보다는 특정 클라이언트를 위한 여러 개의 인터페이스 분리가 더 좋다.
- ex. 스마트폰 인터페이스(전화, 문자, 무선충전, AR, 생체인식)로 갤럭시 S23을 만들 때, 갤럭시 S2를 만들 때
- 출처 : Inpa 티스토리 (inpa.tistory.com)
- 범용 인터페이스 하나보다는 특정 클라이언트를 위한 여러 개의 인터페이스 분리가 더 좋다.
- DIP (Dependency Inversion Principle, 의존관계 역전 원칙)
'코린이 부트캠프 일상' 카테고리의 다른 글
유니티 UI 텍스트와 버튼기능으로 씬이동 (1) | 2023.12.01 |
---|---|
유니티 기초 프로젝트 캐릭터 이동, 반전/ 카메라 이동 / 맵 구현 (0) | 2023.11.28 |
유니티 캐릭터 이동 구현하기 (0) | 2023.11.24 |
코린이 15일차 팀프로젝트 TextRpgGame (0) | 2023.11.17 |
코린이 14일차 C# delegate (0) | 2023.11.16 |