[ 객체 지향 프로그래밍 ]
프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 프로그램을 제작합니다. 여기서 객체란 하나의 역할을 수행하는 '메서드와 변수(데이터)'의 묶음입니다.
[ 객체 지향 프로그래밍 요소 ]
👀 캡슐화 → 정보 은닉
: 변수와 함수를 하나의 단위로 묶는 것을 의미합니다.
👀 상속 → 재사용+확장
: 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 의미합니다.
👀 다형성 → 사용편의
: 하나의 변수, 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 의미합니다.
- 오버라이딩(Overriding) : 부모 클래스에 정의되어 있는 메서드를 자식클래스에서 재정의하여 사용하는 것입니다.
- 오버로딩(Overloading) : 같은 이름을 가진 메서드를 인자값의 종류나 개수를 다르게 하여 다른 기능을 구현하도록 정의하는 것입니다.
[ 객체 지향 설계 5대 원칙 ]
👀 SRP(Single Responsibility Principle) 단일 책임 원칙
: 모든 클래스는 각각 하나의 책임만 가져야 합니다.
👀 OCP(Open Closed Principle) 개방 폐쇄 원칙
: 클래스는 확장에는 열려있고 수정에는 닫혀있어야합니다.
👀 LSP(Liskov Substitution Principle) 리스코프 치환 원칙
: 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 합니다.
👀 ISP(Interface Segregation Principle) 인터페이스 분리 원칙
: 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 합니다.
👀 DIP(Dependency Inversion Principle) 의존 역전 원칙
: 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 합니다.
[ 디자인 패턴 ]
디자인 패턴의 개수는 엄청나게 많지만 싱글톤과 팩터리 메서드, 이 2가지 패턴은 알아두면 유용합니다.
👀 싱글톤(singleton)
: 어떤 클래스가 오직 하나의 객체만을 갖도록 하며, 프로그램 전반에 걸쳐 그 객체 하나만 사용되도록 보장해야 합니다.
⭐ 정확히 하나만 생성되어야 하는 전역 객체를 구현해야 하는 경우에 특히 유용합니다.
public class Restaurant{
private static Restaurant _instance = null;
public static Restaurant getInstance(){
if (_instance == null){
_instance = new Restaurant();
}
return _instance;
}
}
👀 팩터리 메서드(factory method)
: 어떤 클래스의 객체를 생성하기 위한 인터페이스를 제공하되, 하위 클래스에서 어떤 클래스를 생성할지 결정할 수 있도록 도와줍니다.
이를 구현하는 한 가지 방법은 팩터리 메서드 자체에 대한 구현은 제공하지 않고 객체 생성 클래스를 abstract로 선언하고 놔두는 것입니다. 또 다른 방법으로는 팩터리 메서드를 실제로 구현할 Creator 클래스를 만들고, 생성해야 할 클래스를 인자로 넘겨줘야 합니다.
public class CardGame{
public static CardGame createCardGame(GameType type){
if(type==GameType.Poker){
return new PokerGame();
}else if(type==GameType.BlackJack){
return new BlackJackGame();
}
return null;
}
}
'프로그램 개발 > 미분류' 카테고리의 다른 글
[코딩 인터뷰]개념과 알고리즘 - 시스템 설계 및 규모 확장성 (0) | 2023.01.02 |
---|---|
[코딩 인터뷰]개념과 알고리즘 - 재귀와 동적 프로그래밍 (0) | 2022.12.26 |
[코딩 인터뷰]개념과 알고리즘 - 수학 및 논리 퍼즐 (0) | 2022.12.19 |
[코딩 인터뷰]개념과 알고리즘 - 비트 조작 (0) | 2022.12.15 |
[코딩 인터뷰]자료구조 - 트리와 그래프 (2) | 2022.12.07 |