Java - 면접질문(OOP)

면접 대비를 해보자

Posted by Yan on September 24, 2021

객체 지향 방식을 왜 사용한다고 생각하시나요?

이전에 정리했던 포스팅 참고

Spring - 객체지향 SOLID 5원칙

OOP

  • Object-Oriented Programming으로, 객체 지향적인 프로그래밍을 뜻한다.
  • OOP는 객체를 기준으로 코드를 나누어 구현하는데, 자바는 클래스 단위로 객체를 표현한다.
  • 클래스는 설계도고, 직접 일을 하는 구현체는 인스턴스다.

장점

  • 코드의 재사용성이 높다.
  • 유지보수가 쉽다.
  • 대형 프로젝트에 적합하다.

단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계시 많은 노력과 시간이 필요하다.

객체 지향의 4가지 특징

1. 캡슐화

  • 하나의 객체가 가진 특정한 목적을 이루기 위한 변수나 메소드를 하나로 묶는 것.
  • 변수와 메소드를 관련성있게 클래스에 구성해야한다.
  • 캡슐화를 하는 이유 : 정보은닉
    • 변수를 private으로 접근을 제한하고, getter나 setter 등의 메소드를 통해서만 간접적으로 접근이 가능하도록 한다.

2. 추상화

  • 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하는 것.
  • 어떤 데이터를 표시해야할지, 어떤 데이터를 숨겨야할지를 정의한다.
  • 인터페이스와 추상클래스로 추상화를 구현할 수 있다.
  • 추상화는 객체의 공통적인 특징을 파악해 정의해 놓은 설계기법이다.

3. 다형성

  • 같은 동작이지만 다른 결과물이 나오는 것을 다형이라 한다.
  • 상속을 통해 기능을 확장하거나 변경할 수 있게 한다.
  • 코드의 재사용이 용이해지고, 코드 길이가 감소하여 유지보수가 용이하도록 돕는다.

오버라이딩

  • 부모 클래스를 상속받은 자식 클래스에서 상속받은 메소드를 재정의해 사용하는 것이다.

오버로딩

  • 같은 이름의 메소드를 사용하지만, 메소드마다 매개변수의 갯수나 데이터 타입을 다르게 설정하여 오버로딩을 적용한다.

4. 상속성

  • 상속이란 기존 상위 클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
  • 기존 클래스에 기능을 가져와 재사용할 수 있으면서, 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어준다.
  • 인터페이스는 다중상속을 지원하기 위해 존재한다.
  • 상속이 필요한 이유 : 코드 중복을 줄이기 위해서

객체지향 설계 원칙 SOLID

1. SRP Single Responsibility Principle 단일 책임 원칙

클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.

2. OCP Open Closed Principle 개방 폐쇄 원칙

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

3. LSP Liskov Substitution Principle 리스코프 치환 원칙

상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

4. ISP Interface Segregation Principle 인터페이스 분리 원칙

인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

5. DIP Dependency Inversion Principle 의존 역전 원칙

고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

reference

OOP(Object-Oriented Programming, 객체 지향 프로그래밍) 이란?
[Java] 객체지향 프로그래밍 개념