- 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요
객체지향 프로그래밍은 현실세계에 객체를 모델링하여 프로그래밍 하는 기법. 즉, 프로그래밍에서 필요한 데이터를 추상화시켜 행위(Method)와 속성(Attribute)를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.
코드의 재사용이 용이하며, 유지보수가 쉽고 대형 프로젝트에 적합하지만 처리속도가 상대적으로 느릴 수 있습니다.
OOP에는 5가지의 설계 원칙이 있으며 단일 책임의 원칙인 SRP, 개방 폐쇄 원칙인 OCP, 리스코프 치환 원칙인 LSP, 인터페이스 분리 원칙인 ISP, 의존 역전 법칙인 DIP가 있으며 앞글자를 따 SOLID라고 부른다.
- SRP (Single Responsibility Principle, 단일 책임 원칙)
한 클래스는 하나의 책임만 가져야 합니다. 예를 들어, 주문 관리 시스템에서 주문과 결제를 담당하는 클래스가 하나의 클래스에서 처리된다면, 이를 분리하여 각각의 클래스에서 담당하는 것이 SRP 원칙을 지키는 것입니다.
- OCP (Open/Closed Principle, 개방-폐쇄 원칙)
객체는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 합니다. 예를 들어, 로그인 기능을 구현할 때, 새로운 로그인 방식이 추가되더라도 기존 코드를 수정하지 않아도 새로운 로그인 방식을 추가할 수 있도록 설계하는 것이 OCP 원칙을 지키는 것입니다.
- LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
리스코프 치환 법칙은 "부모 클래스 객체는 언제나 자식 클래스 객체로 치환할 수 있어야 한다"는 원칙입니다. 즉, 어떤 클래스의 인스턴스를 사용하는 코드가 있다면, 그 코드는 그 클래스의 서브클래스의 인스턴스도 사용할 수 있어야 합니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.
- ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 합니다. 예를 들어, 로그인 기능과 관리자 기능이 함께 구현되어 있는 클래스가 있다면, 인터페이스를 분리하여 각각의 기능을 담당하는 클래스에서 해당 인터페이스만 구현하도록 설계하는 것이 ISP 원칙을 지키는 것입니다.
- DIP (Dependency Inversion Principle, 의존 역전 원칙)
추상화된 것은 구체적인 것에 의존해선 안 됩니다. 대신 구체적인 것은 추상화된 것에 의존해야 합니다. 예를 들어, 로그인 기능이 데이터베이스에 의존하는 것보다는 데이터베이스 인터페이스에 의존하도록 만드는 것이 DIP 원칙을 지키는 것입니다.
키워드로는 캡슐화, 추상화, 상속, 다형성이 있으며 OOP는 위 네 가지 키워드들을 통해서 어떤 대상을 추상화(Abstraction)하여 공통점을 찾고, 그것을 캡슐화(Encapsulation)해 한 군데에 모아 객체를 만들고, 새로운 객체가 상속(Inheritance)받아 재사용이 가능하게 만들어 주며 상속받은 객체는 다형성(Polymorphism)을 통해 기능을 수정 또는 추가하여 재사용할 수 있다.
**
캡슐화는 객체의 속성과 메서드를 외부에서 직접 접근하지 못하도록 보호하는 기능으로, 객체를 보다 안전하고 신뢰성 높은 방식으로 사용할 수 있도록 합니다.
캡슐화를 하면 불 필요한 정보를 감출 수 있기에, 정보를 은닉할 수 있다는 특징이 있다. ( 캡슐화와 정보 은닉은 동일한 개념은 아니다)
추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말하며 공통 특성을 파악해 필요없는 특성을 제거하는 과정을 말한다.
객체들은 실제 그 모습이지만, 클래스는 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상적인 개념이며 즉, 추상화는 객체들의 공통된 특징을 파악해 정의해놓은 개념이라고 할 수 있다.
상속은 기존 상위클래스에 기능을 가져와 재사용할 수 있으며 동시에 새로운 하위클래스에 새로운 기능을 추가할 수 있는 것이다. 즉, 부모가 자식에게 유전자를 물려주듯이 부모의 특징을 자식에게 물려주며 이를 OOP에선 부모클래스, 자식클래스라 부르며 상속을 사용하면 코드의 중복을 줄일 수 있으며 상속관계를 맺으면 자식 객체를 생성할 때 부모클래스의 속성을 자동으로 물려받기에 자식클래스에선 따로 정의할 필요가 없다.
다형성은 상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성 되는 것을 말하며 간단히 한 부모 밑에서 태어난 자식들이 조금씩 다르다는 것이다.
오버로드, 오버라이드이 다형성의 대표적인 예라 할 수 있으며, 이것을 구현하는 것을 오버로딩, 오버라이딩이라고 한다.
오버로딩(Overloading)은 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것입니다. 이때 메서드의 매개변수의 타입, 개수, 순서가 달라야 합니다. 컴파일러는 호출하는 메서드의 인자를 보고 매개변수를 구분해 호출될 메서드를 결정합니다. 즉, 오버로딩은 메서드의 이름은 같지만 매개변수가 다르므로 다른 메서드로 인식하는 것입니다. 하지만 JS에서는 지원하지않습니다.
오버라이딩(Overriding)은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다. 이때 메서드 이름, 매개변수, 반환값이 모두 같아야 합니다. 즉, 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 구현 내용을 다르게 해서 덮어쓰는 것입니다.
.
https://jeong-pro.tistory.com/95
OOP(객체 지향 프로그래밍)
OOP(객체 지향 프로그래밍)이란 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론이다.대표적으로 Java와 C++이 객체 지향 프로그
velog.io
객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)
객체 지향 프로그래밍(Object Oriented Programming) 여러 소프트웨어 관련 IT기업 신입사원 기술면접에서 면접자들 긴장을 풀어줄 겸 워밍업으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해
jeong-pro.tistory.com
- REST API란 무엇인가요? (모두가 답변) 프로젝트에 REST API를 사용한 이유가 무엇인가요? (프로젝트에 REST API를 사용하셨을 경우에만 추가 답변), REST API 말고 다른 비교할만한 것을 알고 있나요?
REST API는 REST를 기반으로 서비스 API를 구현한 것이다. 여기서 REST는 HTTP URI 를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT DELETE) 를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
REST API를 사용한 이유는 HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없고 REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있으며 서버와 클라이언트 역할을 명확하게 분리해주기에 사용하였습니다.
그 외의 API로는 XML-RPC, JSON-RPC, SOAP 등이 있습니다.
[Network] REST란? REST API란? RESTful이란?
자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미즉, 자원의 표현에 의한 상태 전달자원의 표현자원 : 해당 소프트웨어가 관리하는 모든 것자원의 표현 : 그 자원을
velog.io
https://appmaster.io/ko/blog/rest-apiran-mueosimyeo-dareun-yuhyeonggwa-eoddeohge-dareungayo
REST API란 무엇이며 다른 유형과 어떻게 다른가요? | AppMaster
REST API와 언제 사용해야 하는지 알아보십시오.
appmaster.io
'발표' 카테고리의 다른 글
| 면접 스터디(MSA, 제네릭, List, Set, Map, HashMap) (0) | 2023.02.23 |
|---|---|
| 면접 스터디 (DI, 인덱스) (0) | 2023.02.22 |
| 67일차 마지막 발표 (0) | 2022.07.20 |
| 65일차 발표 (0) | 2022.07.18 |
| 62일차 발표 (0) | 2022.07.13 |