무작정 개발.Vlog

[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 ) : 의존 역전 원칙

  • 상위 클래스가 하위 클래스에 의존하면 안 된다는 법칙.
  • 즉, 기본적인 공통되는 속성을 하위 클래스에 의존하면 안 된다.

 

 


[참고 문헌]

 

https://velog.io/@hygoogi/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0#java

 

기술면접 준비하기

기술면접 빡세게 준비하자

velog.io

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기