2023. 2. 21. 20:32ㆍ스터디/면접
객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요
객체지향 프로그래밍(Object Oriented Programming; OOP)는 프로그램을 수많은 '객체(Object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 프로그램 설계 방법론입니다. OOP의 특징으로는 캡슐화Encapsulation, 추상화Abstraction, 상속Inheritance, 다형성Polymorphism이 있습니다.
OOP는 큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Botton-up)해결법을 도입한 것입니다.
객체를 독립성/신뢰성이 높게 만들어 놓기만 하면 그 이후에 객체를 수정 없이 재사용할 수 있으므로 개발 기간과 비용이 대폭 줄어들게 됩니다.
장점
- 코드 재사용성
- 모듈화된 객체를 기반으로 코드가 작성되므로, 해당 객체의 특징을 비슷한 다른 로직에도 적용해서 사용하거나, 다른 개발자가 구현한 객체를 가져와 쓰기에도 용이함.
- 간편한 유지보수
- 객체를 수정할 경우, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용 -> 중복 코드에 대한 관리가 간단해짐. 혹은 객체나 동작이 변경될 경우 해당 객체나 동작과 연관된 객체만들 찾아 수정
- 큰 규모의 프로그래밍에 유리
- 객체, 모듈 단위로 구분되는 특징으로 인해 업무 분장이 쉽고, 각 모듈의 연관성을 도식하기에 용이함.
단점
- 비교적 느린 속도
- 객체지향은 각 객체의 의존 관계로 인해 대체적으로 속도가 느림
- 높은 설계역량 요구
- 모듈 단위의 상호작용으로 이루어진 방식은, 모듈의 정확한 명세와 상호 간의 연관성이 얼마나 짜임새있게 설계되었는지가 중요함.
- 코드의 잠재적인 복잡성
- 추상 객체, 상속, 인터페이스 등의 복잡한 개념과 그 활용은 코드의 구조를 파악하기 어렵게 만듬.
특징
- 캡슐화 Encapsulation
- 객체의 속성과 매소드를 하나의 단위로 묶는 데이터 번들링(bundling)
- 정보 은닉(information hiding) : 프로그램 세부 구현을 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것.
- 추상화 Abstraction
- 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
- 상속 Inheritance
- 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것.
- 다형성 Polymorphism
- 매서드나 클래스가 다양한 방법으로 동작하는 것.
- 오버로딩(overloading) : 같은 이름의 메소드를 정의하되, 매개변수의 유형과 개수를 다르게 해서 여러 개의 메소드를 정의하는 것을 말합니다. 메소드의 다형성을 구현하는 방법 중 하나.
- 오버라이딩(overriding) : 자식 클래스에서 상속받은 기능을 수정해서 다시 정의
Reference
객체 지향 프로그래밍 - 나무위키
프로그램의 세부 구현을 외부로 드러나지 않도록 특정 모듈 내부로 감추는 것이다. 내부의 구현은 감추고 모듈 내에서의 응집도를 높이며, 외부로의 노출을 최소화하여 모듈 간의 결합도를 떨
namu.wiki
https://blog.itcode.dev/posts/2021/08/07/what-is-oop#%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5
[OOP] 객체지향 프로그래밍(Object Oriented Programming)이란? - 𝝅번째 알파카의 개발 낙서장
IT 업계에 종사하게 된다면 십중팔구 JAVA, C++, C# 중 하나는 다루게 된다. 국내 IT의 최다 공급이자 수요인 JAVA를 위시한 위 세 가지 언어의 공통점은 전부 객체지향언어라는 점이다. 물론 지금에
blog.itcode.dev
https://blog.deering.co/oop-at-work/
OOP at work
정말 오랜만입니다! 최근 디어 내부에 투자 유치와 3분기 OKR 등 많은 일들이 있어 글을 부지런히 쓰지 못했네요. OOP는 ‘객체지향프로그래밍’을 뜻하는 축약어인데요, 이 글을 읽는 동안에는
blog.deering.co
REST API란 무엇인가요? 프로젝트에 REST API를 사용한 이유가 무엇인가요? (프로젝트에 REST API를 사용하셨을 경우에만 추가 답변), REST API 말고 다른 비교할만한 것을 알고 있나요?
REST는 Representational State Transfer의 약자로 소프트웨어 개발 아키텍처의 한 방식입니다. REST의 특징을 지키는 API 통신 규칙이 REST API입니다. REST는 URI로 표현되는 자원, HTTP Method로 표현되는 행위, 그리고 표현의 세가지 요소로 구성되어있습니다. REST의 특징으로는 6가지가 있는데, "유니폼 인터페이스, 무상태성, 캐시 가능, 자체 표현 구조, 클라이언트-서버 구조, 계층형 구조"가 있습니다.
REST의 구성
- 자원(Resource) - URI
- 행위(Verb) - HTTP METHOD
- 표현(Representations)
REST의 특징
- Uniform (유니폼 인터페이스)
- URI로 지정한 리소스에 대한 조작을 통일하고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일
- Stateless (무상태성)
- 작업을 위한 상태정보를 따로 저장하고 관리하지 않음.
- Cacheable (캐시 가능)
- REST는 HTTP라는 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용 가능하다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
- Self-descriptiveness (자체 표현 구조)
- REST API 메시지만 보고도 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있음.
- Client - Server 구조
- 클라이언트와 서버에서 개발해야 내용이 명확하고(역할 구분) 서로간 의존성이 줄어들게 된다.
- 계층형 구조
- REST 서버는 다중 계층으로 구성될 수 있으며, 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반 중간매체를 사용할 수 있게 한다.
프로젝트에 REST API를 사용한 이유는 HTTP 프로토콜의 인프라를 그대로 활용 가능하기 때문에 별도의 인프라 구축이 필요하지 않고, 자체 표현 구조로 되어있어 메시지만 보고도 쉽게 이해 가능하고, 클라이언트와 서버의 역활을 명확하게 분리해서 작업이 가능하기 때문에 사용하게 되었습니다.
그 외의 대안으로는 SOAP, RPC, GraphQL이 있습니다.
Reference
https://ksw0627.tistory.com/78
API와 REST APT
이전의 글 https://ksw0627.tistory.com/74 Routing와 Router 1. Routing이란? 클라이언트의 요청 조건(메서드, 주소 등)에 대응해 응답하는 방식 더보기 라우팅은 네트워크에서 경로를 선택하는 프로세스이다.
ksw0627.tistory.com
https://meetup.nhncloud.com/posts/92
REST API 제대로 알고 사용하기 : NHN Cloud Meetup
REST API 제대로 알고 사용하기
meetup.nhncloud.com
'스터디 > 면접' 카테고리의 다른 글
| 면접 스터디(절차지향/객체지향/함수형 프로그래밍, 시간복잡도/공간복잡도) (0) | 2023.03.01 |
|---|---|
| [면접 스터디]웹 서버와 WAS, Stack/Queue, Array/Linked List (0) | 2023.02.28 |
| 면접 스터디(트랜젝션, TCP&UDP) (0) | 2023.02.27 |
| 면접 스터디(Parameter/Argument, 프로세스/스레드) (0) | 2023.02.24 |
| 면접 스터디(MSA/제네릭/List, Set, Map, HashMap) (0) | 2023.02.23 |