면접관의 기술면접 의도
1.개념(정의) : 너가 이 주제에 대해 개념을 잘 알고 있느냐?
2.구현방식 : 물어본 주제가 어떤식으로 동작되는지 알고 있느냐?
3.장점과 단점 or 특징 : 해당 주제의 장단점을 알고 어떡해 사용되는지 알고 있느냐?
4.실용적인 예시 : 실제로 사용해본적이 있는가? 없다면 언제 사용해야되는지 알고 있는가?
1.객체란 무엇인가요? 클래스와 어떤 연관이 있나요?
개념 : 객체는 오브젝트를 의미하며 런타임시 실제로 동작하게되는 하나의 단위라고 생각합니다.
구현 방식 : C++이나 C#에서는 new라는 키워드를 사용하여 동적 할당을 할 수 있고 , 자료형을 선언하여 정적으로도 생성하여 사용 할 수 있습니다.
장점과 단점 or 특징: 하나의 기능 및 동작을 추상화하여 객체 안에 작성하여 사용 함으로 하나의 객체로 수 십개의 똑같은 객체를 만들어 사용 할 수 있습니다.
실용적인 예시 : 클래스는 객체를 만드는 설계도로 , 해당 클래스에 구현 코드를 작성한 뒤 new 키워드나 정적으로 생성하여 어러 객체를 사용 할 수 있습니다.
4.static 한정자에 대해 설명해주세요.
static은 전역변수의 위험성을 보완하기 위한 한정자입니다.
static은 클래스간 공유 상태를 관리 하거나 인스턴스(객체)에 의존하지 않는 멤버를 선언하는데
사용되는 한정자입니다.
static 한정자가 붙은 필드나 메서드는 컴파일시 제일 먼저 생성되며,
static 멤버는 프로그램 실행 시(즉, 클래스가 로드될 때) 메모리에 할당되며, 런타임에 클래스가 처음 참조되거나
로드 될때 초기화 됩니다.
어느 클래스에서든지 호출이 가능해집니다.
해당 클래스의 정적멤버로서 ,명시적으로 클래스 이름을 통해 접근하여 호출이 가능해짐
static이 사용되는 주요 사례 -> 유틸리티메서드 , 싱글톤 패턴에 사용된다고 언급하기
5.SOLID 원칙에 대해 설명해주세요
객체지향 프로그래밍(OOP) 및 설계의 다섯 가지 기본 원칙을 정리한것을 SOLID원칙이라고 합니다.
S는 SRP(single responsibley principle )로 , 단일 책임 원칙을 의미하며
하나의 클래스에 하나의 책임을 가진다는 의미입니다.
O는 OCP(Open-Close principle)로, 개방-폐쇄 원칙을 의미하며
확장에는 개방을 , 변경에는 폐쇠적으로 설계를 해야된다는 의미입니다.
L은 LSP(Liskov substitition principle)로, 리스코프 치환 원칙을 의미하며,
다형성에 관련된 원칙으로 상속,인터페이스 설계에 적용됩니다.
또한 부모-자식의 상속관계에서 자식클래스는 언제나 부모클래스로 치환되어 사용이 가능해져야 합니다.
ISP : 인터페이스 분리 원칙 (Interface segregation principle)
인터페이스의 단일 책임 , SPR는 클래스의 단일책임, ISP는 인터페이스의 단일책임을 의미
SPR도 책임의 범위에 대해 분리기준이 있듯이 , 인터페이스를 분리하는 기준은 상황에 따라 다름,
핵심은 관련 있는 기능끼리 하나의 인터페이스로 모으되 지나치게 커지지 않도로 크기에 제한을 두라는 의미
ISP는 SPR를 만족하면 성립되는가? -> 반드시 그렇다고 할수 없다
ex)게시판 인터페이스로 글쓰기 읽기 수정 삭제 권한이 있을때 해당 인터페이스는 관리자에 상속해서 사용하지만
일반 사용자가 상속해서 사용하게되면 글삭제 권한이 생기기에 ISP를 만족 할수 없다.
인터페이스를 설계할 때는 클라이언트 중심으로 설계하여 변경 가능성을 최소화해야 한다" ,
나중에 수정사항이 생겨서 또 인터페이스를
분리하는 행위를 하지 말아야되는것이 ISP원칙의 주의해야 할 점이다.
DIP 원칙이란 객체에서 어떤 Class를 참조해서 사용해야하는 상황이 생긴다면,
그 Class를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스 or 인터페이스)로 참조하라는 원칙
이 때 객체들은 나름대로의 원칙을 갖고 정보를 주고 받아야 하는 약속이 있다.
여기서 나름대로의 원칙이란 추상성이 낮은 클래스보다 추상성이 높은 클래스와 통신을 한다는 것을 의미하는데 이것이 DIP 원칙