[IT 기술 면접] OOP(객체 지향 프로그래밍) 이란?
by 무작정 개발2022년 5월 24일에 6개월 국비 교육과정을 수료하였다.
일주일 간 휴식 시간을 보내고, 오늘부터 기술 면접을 준비하고자 한다.
- 하루에 2~3개씩 정리해서 포스팅 하기
Java 개발자 기술 면접 단골 질문인 OOP에 대해 정리하고자 한다.
▶ OOP 란?
먼저 OOP는 Object Oriented Programming의 줄임말이다.
- 객체(Object) / Oriented(지향) / Programming(프로그래밍)
객체 지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임(견해, 사고법)이라고 할 수 있다.
즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다. 현실 세계의 사물들을 객체라고 보고
그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는 것이다.
이것을 추상화 라고 한다.
정리하자면
OOP(객체 지향 프로그래밍)이란
프로그래밍에서 필요한 데이터를 추상화시켜서 상태(속성, 어트리뷰트)와 행위(메서드)를 가진 객체로 만들고,
그 객체간의 상호 작용을 통해 로직을 구성하는 방법을 의미한다.
▶ 장점
- 다른 클래스를 가져와 사용할 수 있고, 상속받을 수 있어 코드의 재사용성 증가
- 자주 사용되는 로직을 라이브러리로 만들어두면 계속해서 사용할 수 있어 신뢰성을 확보 가능
- 클래스 단위로 모듈화가 가능하여, 대형 프로젝트에 적합.(위와 비슷한 의미)
- 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수가 용이함.
▶ 단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량이 커짐
- 설계 시 많은 노력과 시간이 필요
▶ 객체 지향의 특성
▶ 캡슐화
코드를 수정없이 재활용하는 것을 목적으로 함.
클래스라는 캡슐에 기능과 특성을 담아 묶는다. (목적을 기준으로 묶는다.)
▶ 상속
클래스로부터 속성과 메서드를 물려받는 것을 말함.
다른 클래스를 가져와서 수정할 일이 있다면, 그 클래스를 직접 수정하는 대신 상속을 받아 변경하고자 하는 부분만 변경
▶ 추상화
객체 지향 관점에서 클래스를 정의하는 것.
불필요한 정보 외 중요한 정보만 표현함으로써 공통의 속성과 기능을 묶어 이름을 붙이는 것.
▶ 다형성
하나의 변수명이나 함수명이 상황에 따라 다르게 해석될 수 있음.
대표적인 다형성이 오버 라이딩, 오버 로딩이다.
▶ OOP의 5가지 설계 원칙 (SOLID)
1. SRP ( Single Responsibility Principle ) : 단일 책임 원칙
- 클래스는 단 하나의 책임(목적)을 가지고, 그에 대한 책임을 져야 한다.
2. OCP ( Open Close Principle ) : 개방-폐쇄 원칙
- 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- 즉, 클래스를 수정해야 한다면 그 클래스를 상속(확장)하여 수정한다.
3. LSP ( Liskov Substitution Principle ) : 리스 코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 즉, 자식 클래스를 사용 중일 때, 거기에 부모 클래스로 치환하여도 문제가 없어야 함.
4. ISP (Interface Segregation Principle ) : 인터페이스 분리 원칙
- 각 행위에 대한 인터페이스는 서로 분리되어야 한다.
- ex) 핸드폰으로 전화를 하는데 핸드폰 카메라가 방해가 되면 안 된다는 뜻
5. DIP ( Dependency Inversion Principle ) : 의존 역전 원칙
- 상위 클래스가 하위 클래스에 의존하면 안 된다는 법칙.
- 즉, 기본적인 공통되는 속성을 하위 클래스에 의존하면 안 된다.
[참고 문헌]
'CS 지식 & 기술면접 > 기술 면접 정리' 카테고리의 다른 글
신입 백엔드 개발자 기술 면접 핵심 정리 - Java (3) | 2023.01.09 |
---|---|
[기술 면접] 신입 백엔드 기술 면접 질문 정리 및 답변 (2) | 2022.07.12 |
[기술 면접 후기] 가장 인상 깊었던 3번째 기술 면접 및 질문 정리 (1) | 2022.06.03 |
[IT 기술 면접] Java의 Collection Framework 이란? (0) | 2022.05.31 |
[IT 기술 면접] JVM (자바 가상 머신) 이란? (0) | 2022.05.30 |
블로그의 정보
무작정 개발
무작정 개발