1. 객체 지향 프로그래밍 이란 무엇인가요?

프로그래밍에서 필요한 데이터를 추상화 시켜 (클래스로)

상태(변수) 와 행위(메서드)를 가진 객체(인스턴스 화)를 만들고

그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다

 

2. 객체 지향 프로그래밍 했을때의 장점 / 단점 무엇인가요?

장점

- 코드 재사용이 용이하다 (상속을 통해 확장하거나 클래스 이용)

- 유지보수가 좋다 (클래스 내부의 변수, 메서드를 수정하면되기에)

- 대형 프로젝트에 적합하다 (API별로 나눠서 업무 분담이 쉽기 때문에)

 

단점

- 처리 속도가 상대적으로 느리다

- 설계시 많은 시간과 노력이 필요하다

- 객체가 많으면 용량이 커질 수 있다

 

3. 객체지향 프로그래밍 4대 특징은 무엇인가요?

캡슐화

데이터와 코드의 형태를 외부로부터 알 수 없게 하고

데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 것이다

 

추상화

공통의 속성이나 기능을 묶어 이름을 붙이는 것이다

객체지향 관점에서 클래스를 정의하는 것이다

 

상속화

부모 클래스에 정의된 변수 및 메서드를

자식 클래스에서 상속받아 사용하는 것이다

 

다형성

다양한 형태로 표현이 가능한 구조를 말한다

오버로딩, 오버라이딩을 예로 들 수 있다

 

4. 객체지향 프로그래밍 5대 원칙은 무엇인가요?

1) 단일 책임 원칙

한 클래스는 하나의 책임만 가져야한다

ex) 사람 클래스는 사람의 역할만 충실히 한다

 

2) 개방 폐쇄 원칙

확장에는 열려있고 변경에는 닫혀 있어야 한다

ex) 기능을 더 추가는 할 수 있어도 바꾸는건 함부로 못한다

 

3) 리스코프 치환 원칙

상위 타입의 객체를 하위 타입의 객체로 치환해도

상위 타입을 사용하는 프로그램은 정상적으로 작동해야 한다

ex) 어떤 메서드에 Item 이라는 상위 타입으로 받고 있는데

apple 이라는 하위 타입으로 바뀌어 넘어와도 동작해야한다

 

4) 인터페이스 분리 원칙

인터페이스는 그 인터페이스를 사용하는

클라이언트를 기준으로 분리해야한다

ex) 3명의 클라이언트가 하나의 인터페이스를 상속받기보다

각 클라이언트 별로 인터페이스를 분리해야한다

 

5) 의존 역전 원칙

추상화에 의존해야 하고 구체화에 의존하면 안된다

ex) 자동차가 스노우 타이어(구체화)에 의존하는게 아니라

타이어(추상화)에 의존해야하는 것이다

 

5. 클래스와 인스턴스(객체)의 차이가 무엇인가요?

클래스

변수와 메서드로 정의 되어 객체를 만들기위한 설계도라고 보면된다

즉 객체를 만들기 위한 메타정보라고 볼 수있다

 

인스턴스

클래스에서 정의된 것을 토대로 실제 메모리에 할당된 것으로

실제 프로그램에서 사용되는 데이터이다

 

6. getter, setter를 사용하는 이유는 무엇인가요?

객체의 무결성을 보장하기 위해 사용한다

 

무결성은 데이터의 정확성과 일관성을 유지하고 보증하는 것이다

 

정확성은 중복이나 누락이 없는 상태이고

 

일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태이다

 

getter는 필드의 값을 숨긴채 값을 꺼낼 수있고

setter는 필드를 private로 만들어 외부 접근을 제한하고

setter로 값을 받아 가공해 넣을 수 있다

 

그러나 무분별한 setter는 무결성을 해칠 수 있기에 사용하지 말아야한다

 

builder 패턴이나 개방폐쇄원칙으로 처리해야한다