OOP, 다이나믹 바인딩이 OOP에서 왜 필수인가요? 장점, 단점은?

- 장점 : runtime시에 클래스를 변경할 수 있다.
- 단점 : 어떤 값이 들어올지 몰라서 들어올 값보다 많은 메모리 공간을 차지하고 있기 때문에 메모리 공간이 낭비될 수 있다.
들어오는 값이 메모리 타입에 맞는지 확인하기 때문에 속도가 늦어진다.

 

OOP 5가지 원칙에 대해서 설명해 보세요.

Abstraction
- 객체의 공통된 속성들 중 필요한 부분을 포착해서 클래스로 정의하는 설계 기법
- 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것
Encapsulation
- 외부에 노출할 필요가 없는 정보들은 은닉
- 필요한 정보만 보여주게끔 설계
Inheritance
- 부모 클래스가 자손 클래스에게 속성을 물려주는 것
- 코드의 재사용
Polymorphism
- 같은 형태이지만 다른 기능을 하는 것
- 오버라이딩(Overriding) 은 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
- 오버로딩(Overloading) 은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
Composition
- ‘Has-a’ 관계. 런타임에 동적으로 다른 객체의 reference를 얻어 정의됨. Interface를 통해서만 접근하므로 Encapsulation 원칙을 망가뜨리지 않음

 

Encapsulation, 무엇인가요?

SW가 어떻게 동작하는지 자세히 몰라도 쉽게 사용할 수 있도록 설계/구현함

 

Information Hiding, 무엇인가요?

Client에게 interface만 제공하고 data에 대한 접근은 막음(Visibility)

 

Inheritance, 무엇인가요?

‘Is-a’ , ‘Is a kind of’ 관계라고도 하며 Class를 organize 하는 방식, Generalization이라고도 표현함. 공통 속성을 갖는 Class들을 묶어서 공통 속성이 한 번만 정의되도록 함

 

Polymorphism, 무엇인가요? 4가지 기억

Descendants(자손)
부모의 X에서 X b = new Y()를 할 수 있다. 반대는불가

다형성은 "여러 객체에게 동일한 명령을 내렸을 때 서로 다르게 반응하는 현상"을 의미합니다.
1) 인터페이스(interface)
2) 추상클래스(abstract)
3) 메소드 오버라이딩
4) 메소드 오버로딩

 

컴파일 타임과 런타임시에 Polymorphism을 설명하세요.

메소드 오버라이딩을 통해 컴파일 타임/런타임 폴리모피즘 가능
컴파일시 - 메소드명은 같으나 파라미터가 다른경우 -> Overloading
런타임시 - 상속을 통해 메소드 명, 파라미터가 같은 경우 -> Overriding

 

Abstract Class

추상 클래스와 인터페이스의 차이점은 무엇입니까?
인터페이스 : 역할 구분을 하고 싶다면, 구현할 컴포넌트의 표준을 정하는 것
추상클래스 : abstract is a 관계가 명확할 때, 구체화시킬 구현체를 추상화시키는 기법

 

추상화란?

여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용, 구체적인 것을 감추고 보고 싶어하는 전체적인 특성을 드러내는 것

 

Generic Class & Template 무엇인가?

클래스를 디자인할 때 클래스를 사용할 타입을 지정하지 않고, 클래스를 사용할 때 지정하여 사용하는 기술을 뜻한다. 미리 정의하지 않은 타입은 매개변수로 제공한다. 예를 들어, List 클래스는 내부에 포함할 원소들의 타입으로 매개변수화 될 수 있다. 정수형의 리스트를 선언하고 싶으면 List 타입에 Integer 타입을 매개변수로 넘겨주면 되고, String 객체의 리스트를 만들고 싶다면 String을 넘기면 된다. C++에서는 Template이라고 하며, Ada와 Eiffel에서는 Generic이라고 한다.

 

OOP, C와 같은 절차적 프로그램의 일반적인 단점은 무엇입니까?

장점
1. 개인 프로젝트에 적합한 언어입니다.
2. 객체지향 프로그래밍과 비교하여 속도가 빠른편입니다.

단점
1. 유지보수가 어렵습니다.
2. 코드의 순서가 바뀌면 의도한 대로 프로그램이 동작하지 않을 수 있습니다.
3. 프로그램의 분석과 디버깅이 어렵습니다.
4. 위와 같은 단점으로 인해 대형 프로젝트에는 부적합합니다.

 

OOP, Functional Programming 장점

자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 것이 핵심이며, 객체지향 프로그래밍보다 강한 추상화를 통해서 상태 변경에 따른 부작용에서 자유로울 수 있다.

 

OOP, Convert from C to OOP

도메인 엔티티를 식별해내고 그것을 객체로 만듭니다
Procedure에 있던 책임을 GRASP 원칙을 지키면서 객체들에 옮겨줍니다
Procedure을 Usecase라고 본다면 Loose coupling, high cohesion으로 묶어서 객체화, Component화 합니다.
Abstraction, Encapsulation하여 객체를 만들어야합니다.

 

OOP 개념

728x90
1···12131415
반응형

+ Recent posts