diff --git a/1/1.md b/1/1.md index 99a5a8e..1c25d8a 100644 --- a/1/1.md +++ b/1/1.md @@ -1,40 +1,40 @@ # OOP란 무엇인가요? -> +> Object-oriented programming으로 객체 지향 프로그래밍이라 한다. 프로그램을 메소드, 필드를 가지는 수많은 객체라는 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다. # OOP의 주요 특징 4가지에는 무엇이 있나요? -1. -2. -3. -4. +1. 캡슐화: 변수와 함수를 하나의 단위로 묶는 것. +2. 정보 은닉: 프로그램의 세부 구현이 드러나지 않도록 내부 모듈로 감추는 것. +3. 상속: 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것. +4. 다형성: 하나의 변수 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것. # 객체지향의 SOLID 법칙의 5가지 원칙에는 무엇이 있나요? -1. -2. -3. -4. -5. +1. SRP 단일 책임 원칙: 클래스는 단 하나의 책임만 가져야 한다. +2. OCP 개방 폐쇄 원칙: 클래스는 확장에 열려있어야 하며, 수정엔 닫혀있어야 한다. +3. LSP 리스코프 치환 원칙: 서브 타입은 언제나 부모 타입으로 교체할 수 있어야 한다. +4. ISP 인터페이스 분리 원칙: 인터페이스를 각각 사용에 맞게 잘게 분리해야 한다. +5. DIP 의존 역전 원칙: Class를 참조하려면 그 대상의 상위 요소로 참조해야 한다. # 객체지향의 Tell, Don’t Ask가 무엇인가요? -> +> `객체에게 데이터를 요구하지 말고, 객체에게 일을 시켜라` 란 뜻으로, 캡슐화가 잘 이루어진 설계를 하기 위해서 탄생한 원칙. # DRY, KISS에 대해 설명해주세요. -- DRY -- KISS +- DRY: Don't Repeat Yourself: 같은 코드를 반복하지 말아야 한다. +- KISS: Keep It Simple, Stupid: 불필요한 코드를 쓰지 말고 가장 단순하게 작성하라. # 객체지향 설계에서 응집도와 결합도가 무엇인지 설명하고, 각각 높은 경우와 낮은 경우의 차이를 간단히 예를 들어보세요. -- 응집도: -- 결합도: +- 응집도: 한 모듈 내의 구성 요소 간의 밀접한 정도로, 응집도가 높을 수록 한 모듈이 하나의 책임을 갖고 있게 됨. +- 결합도: 모듈간의 상호 의존 정도, 연관된 관계의 끈끈함을 의미. 결합도가 과하게 높으면 한 클래스를 변경하면 다른 클래스도 변경해야 할 수도 있음. **예시:** -- 응집도가 낮고 결합도가 높은 경우 -> -- 응집도가 높고 결합도가 낮은 경우 -> +- 응집도가 낮고 결합도가 높은 경우 -> 여러 기능들이 하나의 모듈에서 구동됨. +- 응집도가 높고 결합도가 낮은 경우 -> 여러 기능들이 독립적으로 존재하며 필요한 부분만 연결되어 구동됨. # 자신이 생각하는 좋은 객체지향 코드의 조건을 말해보세요. -> +> 좋은 객체지향 코드는 간결하고, 이해하기 쉬우며 수정하기 쉬워야 함. 따라서 모듈 내 불필요한 코드 및 같은 기능을 하는 코드 제거, 한 모듈은 하나의 책임만 가지도록 해야 하는 것입니다.