![[기술 면접] 1. 객체지향을 설명해보세요. 1 객체지향을 설명해보세요](http://allhoneytip.com/wp-content/uploads/2023/07/제목을-입력해주세요__복사본-2-001-300x300-optimized.png)
면접에서 주로 다루는 객체지향은 유지보수, 확장 가능한 소프트웨어 개발을 위한 핵심 개념입니다. 코드의 재사용성과 유연성을 높임으로써 개발 생산성을 향상시키며, 모듈화와 추상화를 통해 복잡한 문제를 해결하는 강력한 도구입니다. 객체지향 개념을 이해하는 시간을 가져보겠습니다.
![[기술 면접] 1. 객체지향을 설명해보세요. 2 객체지향](http://allhoneytip.com/wp-content/uploads/2023/07/image-12-optimized.png)
Q: 객체지향을 설명해보세요.
절차지향 소프트웨어가 빠른 변화를 쫓아가지 못하여, 코드 재사용성, 유지보수, 중복 제거 등을 목적으로 등장한 구조입니다. 분석과 관찰을 통해 실제 세계를 SW로 구성하여 컴퓨터로 실행시킨다고 할 수 있습니다.
객체 지향은 프로그램을 단순하게 명령어의 목록으로 보는 시각에서 벗어나, 여러 개의 독립된 단위, 즉 “객체”들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있습니다.
객체 지향은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됩니다.
Q: 객체지향의 특성을 설명해주세요.
객체지향을 올바르게 설계할 수 있도록 도와주는 원칙으로 캡슐화, 상속, 추상화, 다형성이 있습니다.
- 캡슐화 : 객체의 자율성을 보장하기 위해 구현을 외부로부터 감추는 것으로, 정보은닉이라고도 부릅니다.
- 객체의 자율성이란, 객체 내부와 외부를 명확하게 구분 하고 다른 객체가 무엇을 수행하는지는 알고 있지만, 어떻게 수행 하는지는 알 수 없는 것입니다.
- 자율성이 높은 객체들은 재사용이 용이합니다.
- 접근 제어자를 사용하여 외부로부터 데이터 접근을 보호합니다.
- 상속 : 부모 클래스를 재사용하여 새로운 클래스를 작성합니다.
- 추상화 : 인터페이스와 구현을 분리하여 핵심적인 코드만 노출시킵니다.
- 실제 지형보다, 지하철역 간의 상대적 위치 기반으로 작성된 지하철 노선도가 추상화의 대표적인 예입니다.
- 다형성 : 조상 타입 참조 변수로 자손 타입 객체를 다룹니다.
인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있습니다.
Q: 객체지향 프로그래밍의 5가지 설계원칙, SOLID를 설명해주세요.
클린코드로 유명한 로버트 마틴이 정리한 객체지향 설계 원칙입니다.
1. SRP, Single Responsiblity Principle로 단일 책임 원칙입니다.
- 한 클래스에 하나의 책임만을 요구하며, 이를 판단하는 기준은 변경입니다. 변경 시에 파급 효과가 적다면 SRP를 잘 따른 것입니다.
2. OCP, Open/Closed Principle로 개방/폐쇄 원칙입니다.
- 소프트웨어 요소는 확장에는 열려있으나, 변경에는 닫혀 있어야 합니다. 다형성을 활용하는데, 인터페이스를 구현한 클래스를 만들고 새로운 기능을 구현합니다.
- 인터페이스의 변경을 최소화합니다.
3. LSP, Liskov Substitution Principle로 리스코프 치환 원칙입니다.
- 인터페이스의 규약을 지켜서 구현해야 합니다. 특정 메서드가 상위 타입을 인자로 사용할 때, 그 타입의 하위 타입도 문제 없이 정상 작동해야함을 의미합니다. 증가 버튼을 감소로 구현하는 경우 LSP 위반이라 할 수 있습니다.
- 자식 클래스가 항상 부모 클래스의 역할에 충실해야 합니다.
4. ISP, Interface Segregation Principle로 인터페이스 분리 원칙입니다.
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 좋다는 의미입니다.
- 사용하지 않는 Method의 의존성을 제거하여 결합도를 제거합니다.
- 인터페이스가 명확해야하고 대체 가능성이 높아야 합니다.
Spring Framework 코드 참고
5. DIP, Dependency Inversion Principle로 의존관계 역전 원칙입니다.
- 추상화(역할)에 의존하며, 구체화(구현)에 의존하지 않습니다. 연극을 예로 들자면, 특정 배우에 맞게 연극을 준비했다는 이유로 배우를 바꾸고 연극이 불가능 하다면, DIP 위반입니다.
- 운전자는 자동차의 역할에 대해서 알아야 하지, 자동차의 차종에만 의존하여 차가 바뀔 때 운전을 못 하는 것은 옳지 않습니다.
- 역할 == 인터페이스
- 구현 == 인터페이스를 구현한 클래스, 구현 객체
마치며
객체지향과 객체지향의 SOLID 5가지 원칙에 대해 알아보았습니다. Java 개발자 면접이라면, 기초 지식으로 자주 등장하는 내용입니다. 가능하다면 실제로 사용해본 경험을 얘기해보면 좋은 인상을 줄 수 있을 것입니다.
다음 시간에는 Overriding과 Overloading이 무엇인지 알아보겠습니다.
![[기술 면접] 1. 객체지향을 설명해보세요. 3 SOLID](http://allhoneytip.com/wp-content/uploads/2023/07/image-13-1024x724-optimized.png)
답글 남기기