TIL

[TIL] 내일배움캠프_Unity 최종 프로젝트 3주차: 추가 기능 구현1, 기술 면접 대비 17일차

Hwone 2023. 11. 9. 21:42

 

오늘 한 일  

- 객체 지향 원칙

- 정렬 알고리즘의 안정성

- 기술면접 답변  & 롤플레잉

- 판매 결산 인수 인계 전 로직 확인

 

객체지향 원칙 SOLID 

1. 단일 책임 원칙 

: 하나의 객체는 하나의 책임을 가져야한다 

- 객체가 담당하는 책임이 많아질 수록 해당 객체의 변경에 따라 모듈화가 약해져서 다른 객체와의 의존/연관성은 크게 늘어난다 이러한 현상은 객체 지향의 주요 특징 중 하나인 캡슐화를 부정한다 

단일 책임 원칙은 특정 객체의 책임 의존성 과중을 최대한 지향하기 위한 원칙이다 

 

2. 개방 폐쇄 원칙 

: 객체의 확장은 개방적으로, 객체의 수정은 폐쇄적으로 대해야한다

- 기능이 변하거나 확장 가능하지만, 해당 기능의 코드는 수정하면 안된다는 뜻으로 

객체 하나를 수정할 때 단순히 해당 객체만 수정하는 것이 아니라 해당 객체에 의존하는 다른 객체의 코드까지 고쳐야한다면 좋은 설계로 보기 힘들다 이처럼 개방 폐쇄 원칙은 각 객체의 모듈화와 정보 은닉의 올바른 구현을 추구하며, 이를 통해 객체 간의 의존성을 최소화하여 코드 변경에 따른 영향력을 낮추기 위한 원칙이다 

 

3. 리스코프 치환 원칙

: 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙이다

- 자식 객체는 부모 객체의 특성을 가지며, 확장할 수 있는데 이 과정에서 무리하거나 객체의 의의와 어긋나는 확장으로 인해 잘못된 방향으로 상속되는 경우가 생긴다 

리스코프 치환 원칙은 올바른 상속을 위해 자식 객체의 확장이 부모 객체의 방향을 온전히 따르도록 권고하는 원칙이다 

가급적 부모 객체의 일반 메소드를 그 의도와 다르게 오버라이딩 하지 않는 것이 중요하다 

(부모 객체의 오버라이딩은 주로 동일한 메소드를 자식 객체만의 동작을 추가하기위해 한다는 걸 감안하면 까다로운 원칙이다) 

 

4. 인터페이스 분리 원칙

: 객체가 반드시 필요한 기능만을 가지도록 제한하는 원칙

- 불필요한 기능의 상속, 구현을 최대한 방지함으로써 객체의 불필요한 책임을 제거한다 큰 규모의 객체는 필요에 따라 인터페이스로 잘게 나누어 확장성을 향상시키고 객체를 상속할 땐 해당 객체가 상속 받는 객체에 적합한지 판단해야한다 

 

5. 의존성 역전 원칙 

: 객체는 저수준 모듈보다 고수준 모듈에 의존해야한다 

*고수준 모듈: 인터페이스와 같은 객체의 형태나 추상적 개념 

* 저수준 모듈 : 구현된 객체 

 

즉, 객체는 객체보다 인터페이스에 의존해야 한다 라고 볼 수 있는데 가급적 객체의 상속은 인터페이스를 통해 이루어져야 한다는 의미로 해석할 수있다 

 

정렬 알고리즘의 안정성 

: 정렬 후에도 동일한 값의 순서가 정렬에 의해 변경되지 않는 정렬 알고리즘을 안정한 정렬 알고리즘이라고 한다 

 

- 정렬 알고리즘은 어떤 경우에 안정성이 필요한 것인가 ? 

: 여러 개 필드를 가지는 값에 대해 지정된 키의 순서로 정렬할 때 같은 키 값을 가지는 행들이 있다면 순서가 뒤섞였을 때 기존 순서를 잃어버리게 된다 

 

 

기술 면접 대비17일차

Q : 자료구조의 종류는 무엇이 있으며 각각 어떤 차이점이 있는지 설명해주세요 

 

A : 자료구조는 배열, 스택, 큐, 링크드 리스트, 트리, 해시테이블, 그래프 

 

같은 종류의 데이터가 연속적으로 저장되어 있는 배열, 

데이터와 다음 데이터를 가리키는 참조로 구성된 노드가 연결되어 있는 연결 리스트,

배열과 연결리스트의 차이는 원소의 삽입과 삭제가 배열은 비효율적이고 연결리스트는 효율적이다 

먼저 들어온 데이터가 제일 나중에 나가는 후입선출의 스택,

그 반대로 먼저 들어온 데이터가 제일 먼저 나가는 선입선출의 큐,

부모 노드 밑에 여러 개의 자식 노드가 연결되고, 자식 노드가 다시 부모가 되어 각각의 자식 노드가 연결되는 계층적 구조를 가진 트리,

노드와 노드를 연결하는 간선을 모아놓은 구조인 그래프, 

입력 데이터가 저장되는 배열로, 해시 함수에 의해 계산된 인덱스에 데이터가 저장되는 해시테이블이 있습니다 

 

a.(꼬리질문) 위 자료구조는 무조건 좋은가요 ?

: 무조건으로 좋은 자료구조는 없다고 생각합니다 문제나 상황에 따라서 데이터를 저장하고 접근하는데 소요되는 시간에 따라서 자료구조를 골라야 한다고 생각합니다 

 

Q :객체지향이란 무엇인지 설명해주세요 

 

A : 데이터와 절차를 하나의 덩어리로 묶어서 생각하는 기법으로 기능별로 묶어서 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하여 하드웨어의 처리량을 획기적으로 줄여줍니다 단, 절차지향보다 느린 단점이 있습니다 

 

a.(꼬리질문) 객체지향의 특징은 무엇이 있나요? 

: 여러 객체들의 공통적인 속성과 기능을 추출하여 정의하는 추상화, 객체 내부의 벼눗 도는 구현을 사용자로부터 은폐하는  캡슐화, 부모 클래스의 속성과 기능을 상속받아 동일하게 사용하는 상속, 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있도록 만드는 (오버로딩, 오버라이딩) 다형성이 있습니다

 

b.(꼬리질문) OOP란? 

: 속성과 기능을 하나로 묶어서 객체로 만들고, 객체들이 서로 상호작용하면서 프로그램을 구성하는 것으로 객체 지향 프로그래밍은 코드의 재사용성과 유지보수성을 높여주는 등 과 같은 장점이 있습니다 

 

c. (꼬리질문) SOLID 원칙은 무엇인가요? 

: 하나의 객체는 하나의 책임을 가져야 한다는 단일 책임의 원칙, 기존의 코드를 변경하지 않으면서 기능을 추가 가능하게 만드는 개방 페쇄 원칙, 자식 클래스는 최소한 부모클래스에서 가능한 행위는 수행 가능해야하는 리스코프 치환 원칙, 인터페이스를 클라이언트에 영향 받지 않도록 분리하는 인터페이스 분리 원칙, 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 거의 변화가 없는 것에 의존하라는 의전 역전 원칙이 있습니다 

 

 

출처: 

https://blog.itcode.dev/posts/2021/08/13/single-responsibility-principle

 

[OOP] 객체지향 5원칙(SOLID) - 단일 책임 원칙 SRP(Single Responsibility Principle) - 𝝅번째 알파카의 개발

올바른 객체지향 설계를 위해 수립한 원칙이 있으며, 이 다섯 가지 원칙을 통틀어 객체지향 5원칙(SOLID)이라 명명한다. 필수로 적용하지는 않지만, 적어도 이 규칙을 준수하면 준수할 수록 올바

blog.itcode.dev