ML/AI/SW Developer

Programming

6.l Basic

6.1.1 대표적인 객체지향 언어에는 어떤 것들이 있나요?

C++, C#, JAVA 등이 있습니다.

6.1.2 객체지향이란? 절차지향과의 차이점은?

객체지향이란 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 프로그래밍 기법입니다. 
예를 들어 자동차를 조립할 때, 
절차지향은 정해진 순서에 따라 엔진, 차체 핸들 의자를 만들어야 자동차가 완성되는 방식이라면,
객체지향은 순서에 상관없이 부품들을 개발하고, 나중에 한곳에 모았더니 각기 제기능을 해 자동차가 완성되는 방식입니다.
각기 개발했기 때문에 부품별로 유연하게 바꾸거나 기능을 추가할 수 있는 장점이 있습니다.

6.1.3 객체지향 SOLID 원칙에 대해서 설명해 주세요.

SRP (Single Representative Principle) – 한 클래스는 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나여야 한다.
OCP (Open Closed Principle) – 클래스 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.
LSP (Liskov Substitute Principle) – 상위 타입 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다.
ISP (Interface Segregation Principle) – 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야한다.
DIP (Dependency Inversion Principle) – 클라이언트는 추상화에 의존해야하며, 구체화에 의존해선 안된다.

6.1.4 객체지향 4가지 특징에 대해서 설명해 주세요.

객체지향의 4가지 특징- 추상화, 캐슐화, 상속, 다형성
추상화: 모델링. 구체적인 것을 관심영역에 두고, 특성만들 가지고 재조합
캡슐화: 접근제어자를 활용한 정보의 은닉, 데이터와 데이터를 활용하기 위한 함수를 클래스로 정의
상속: 코드의 재사용성과 확장성
다형성: 오버라이딩, 오버로딩

6.1.5 데이터 타입과 변수의 차이는 무엇인가요?

데이터 타입은 데이터를 저장하기 위해 확보해야 할 메모리의 크기라고 볼 수 있습니다. 
변수는 실제 데이터의 값의 위치를 기억하는 저장소입니다.

6.1.6 함수형 프로그래밍에 대해서 설명해 주세요.

함수형 프로그래밍(종종 줄여서 FP라고 부름)은 순수 함수(pure function)를 조합하고 공유 상태(shared state), 변경 가능한 데이터(mutable data) 및 부작용(side-effects)을 피하여 소프트웨어를 만드는 프로세스입니다. 
함수형 프로그래밍은 명령형(imperative) 이 아닌 선언형(declarative) 이며 애플리케이션의 상태는 순수 함수를 통해 전달됩니다. 
애플리케이션의 상태가 일반적으로 공유되고 객체의 메서드와 함께 배치되는 객체 지향 프로그래밍과는 대조됩니다.

6.1.7 컴파일러와 인터프리터의 차이는 무엇인가요?

인터프리터는 컴파일러와는 다르게 한 줄 한 줄씩 번역을 진행하기 때문에 한 번에 번역을 진행하는 컴파일러에 비해 번역 시간은 빠른 편입니다. 하지만 번역을 할 때 실행 파일을 생성하지 않기 때문에 매번 실행할 때마다 같은 번역을 진행해야 합니다.

6.1.8 오버로딩과 오버라이딩의 차이는?

오버로딩: 동일한 함수명을 사용하고, 파라미터의 종류 및 수를 다르게 정의
오버라이딩: 상속받은 함수를 재정의

6.1.9 1급 객체에 대해서 설명해 주세요.

- 변수나 데이타에 할당 할 수 있어야 한다.
- 객체의 인자로 넘길 수 있어야 한다.
- 객체의 리턴값으로 리턴 할수 있어야 한다.
3가지 조건을 만족하는 개체를 말합니다. 사용할 때 다른 요소들과 아무런 차별이 없다는 것을 뜻합니다.
함수를 일급 객체로 취급하는 것은 특히 함수형 언어에서 필수적인 속성입니다.

6.1.10 AOP란 무엇인가요?

* Aspect-Oriented Programming
객체지향적인 프로그래밍을 지향하면서 유지보수를 좀 더 편리하게 하기 위한 방법