기술면접 대비 - 객체 지향 프로그래밍
들어가며
기술면접을 준비하기 위하여 CS 내용들을 따로 정리해두고자 한다. 내 기억력의 휘발성은 상당히 강하기에 정리한 내용을 반복적으로 보며 숙달할 필요가 있어 보인다. 하루 한 개 씩이라도 꾸준히 정리해 두다 보면 필히 큰 도움이 될 터!
객체 지향 프로그래밍(OOP, Object Oriented Programming)
객체 지향 프로그래밍이란 컴퓨터 프로그래밍 패러다임 중 하나로,
프로그래밍에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체 를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
여기서의 객체는 세상에 존재하는 모든 것을 의미(자동차, 사람, 동물 등)한다.
OOP의 장점
코드 재사용성 증가
상속을 바탕으로 프로그래밍에서의 코드 재사용을 높일 수 있다.
생산성 향상
잘 설계된 클래스를 통해 독립적인 객체를 활용함으로써, 개발의 생산성을 향상 시킬 수 있다.
자연적인 모델링
일상 생활에서 쓰는 개념을 그대로 객체라는 구조로 표현함으로써, 생각한 것을 그대로 구현 가능
유지보수의 용이성
프로그램 수정, 추가 시 캡슐화를 통해 주변 코드에 영향이 적기 때문에 유지보수가 용이함
OOP의 단점
상대적으로 느린 실행 속도
절차 지향 언어(C 등)는 컴퓨터의 처리 구조와 비슷하여 실행 속도가 빠른 반면, 객체 지향 언어(C++, JAVA 등)는 상대적으로 실행 속도가 느리다.
프로그램 용량이 크다
객체 단위로 프로그램을 계속해서 만들다 보면 불필요한 정보가 같이 삽입될 위험이 있으며. 이는 프로그램 용량 증가로 이어질 수 있다.
설계에 많은 시간 소요
클래스 별로 객체 별로 설계하고, 상속 등의 구조 또한 설계하여야 하기 때문에 절차 지향 언어에 비해 설계에 많은 시간을 쏟게 된다.
OOP의 특징
추상화(Abstraction)
객체의 공통적인 속성이나 기능을 추출하여 정의하는 것을 의미한다.
캡슐화(Encapsulation)
데이터와 데이터를 처리하는 함수를 하나로 캡슐의 형태로 만들어 묶는 것을 의미한다.
캡슐화는 코드를 재수정 없이 재활용이 가능케하고 private 선언을 통해 데이터를 보호하고 접근 제어자를 통해 간접적인 접근만을 허용하여 코드 수정이 발생하였을 때 영향 범위 예측을 보다 수월해준다.
상속(Inheritance)
상속이란 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 기능을 하위 클래스(자식 클래스)가 물려받는 것을 의미한다.
ex) 동물(호흡한다 + 걸어다닌다) ➡ 포유류(호흡한다 + 걸어 다닌다 + 젖을 먹인다)
상속의 목적은 코드의 중복을 제거하기 위함이다.
중복된 코드가 증가할 수록 개발 및 유지 보수에 비용도 증가하기 때문에 상속 과정을 통해 이러한 중복을 최소화할 수 있다.
다형성
변수 또는 함수가 상황에 따라 의미를 달리 하는 것을 말한다.
ex) 동물 클래스의 울음소리 메서드 ➡ 강아지 클래스의 울음소리 메서드(멍멍)
➡ 고양이 클래스의 울음소리 메서드(야옹야옹)
오버로드(Overload) 또는 오버라이드(Override)가 다형성의 대표적인 예이며 이것을 구현하는 것이
오버로딩(Overloading) 과 오버라이딩(Overriding) 이라고 한다.
오버로딩 : 같은 이름의 함수를 둘 이상 정의하고, 매개변수의 타입과 개수를 다르게 하여 용도와 결과를 다르게 하하는 것
오버라이딩 : 하위 클래스(자식 클래스)가 상위 클래스(부모 클래스)에서 만들어진 메서드를 재정의 하는 것
Reference
기본기를 쌓는 정아마추어 코딩블로그 - 객체 지향 프로그래밍이 뭔가요?(꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)
'🖥CS > 기술면접대비🔎' 카테고리의 다른 글
http와 https (2) | 2022.12.02 |
---|---|
[Java] static, final, staic final 차이 (0) | 2022.11.17 |
[Java] 접근 제어자(private, default, protected, public) (0) | 2022.11.02 |
Java Object Class (0) | 2022.10.25 |
Restful (0) | 2022.10.22 |