ssausand-sunny / cs-study

면접.. 붙으려면 CS 공부 해야겠지?
0 stars 0 forks source link

OOP의 특징에 대해서 설명해주세요. #29

Open kgh2120 opened 4 months ago

kgh2120 commented 4 months ago

문제

예상 꼬리 질문 - (4개 중 1개) OOO에 대해서 자세히 설명해주세요. - 답변한 것에 대한 예시를 좀 설명해주세요.

들어가야 할 키워드 정리

Hunnibs commented 4 months ago
질문 답변

객체 지향 프로그래밍은 상속, 캡슐화, 다형성, 추상화의 특징을 가지고 있는 소프트웨어 설계 방식입니다.

꼬리 질문

1. 자세히 설명하고 예시를 좀 설명해주세요. - 상속은 기존 클래스의 속성과 메소드를 하위 클래스에서 재사용할 수 있도록 도와주는 것 입니다. 예를 들면 부모 클래스에 eat()이라는 메소드가 존재한다면 자식 클래스에서 해당 부모 클래스를 확장 받으면 eat()메소드를 작성하지 않아도 사용이 가능합니다. - Interface나 부모 클래스를 상속 받아 다양한 자식 클래스의 객체가 만들어지는 것이 다형성입니다. 메소드 Overriding과 Overloading이 존재하며 동일한 메소드를 재정의 하거나 리턴타입, 매개변수를 변경하여 재사용할 수 있습니다. 예를 들어, eat 메소드가 밥을 먹는 것에 한정되어있었다면 다형성을 이용하면 고기를 먹을수도, 술을 마실수도 있게 확장할 수 있습니다. - 객체의 데이터에 직접적인 접근을 할 수 없고 메소드를 통해서만 접근 가능하도록 설정하는 것입니다. 이는 데이터의 무결성을 보장하고 내부 로직을 숨길 수 있습니다. 예를 들어, 접근지정자(접근제한자)를 사용하여 캡슐화를 진행합니다. private 접근지정자가 붙는다면 해당 데이터에는 어떤 클래스에서도 직접적인 접근이 불가능합니다. - 복잡한 내부 구현은 숨겨서 제공하는 방법입니다. Interface 혹은 abstract class를 이용하여 구현합니다. 예를 들어, Interface로 creature라는 것을 만들어놓는다면 해당 인터페이스를 상속 받아 creature의 특징을 가져가면서 사람의 특징을 가지는 Person class를 만드는 방식이 있습니다. 이렇게 하면 구체적인 구현은 각 클래스에서 처리해 내부 구현을 숨길 수 있습니다.

kjy0349 commented 4 months ago
예상 답변

OOP는 Object-Oriented Programming의 약자로, 객체 중심의 개발 방법론을 말합니다. 비즈니스 로직에 사용 될 사물들을 추상화하여 공통 속성들을 뽑아내고, 이를 클래스로 만들어 개발함으로써 다형성, 캡슐화등 여러 장점을 얻을 수 있습니다.

예상 꼬리 질문 답변

캡슐화 : 클래스의 필드와 메서드를 한데 묶어 데이터를 보호하고, 외부에서 직접적으로 접근하는 것을 막습니다.
상속 : 클래스들의 공통 속성이나 행동을 모아 부모클래스를 만들고, 자식클래스에서 이를 상속 받아 사용함으로써 코드의 재사용성을 높입니다.
다형성 : 인터페이스, 오버라이드와 같은 기능들을 이용해 한 메소드나 인터페이스가 여러 방식으로 사용되게 함으로써 코드의 재사용성을 높입니다.
추상화 : 클래스를 사용하는 사람들은 클래스 내부의 동작을 알지 못하게 구현합니다. 이렇게 함으로써 조금 더 쉽게 기능을 사용할 수 있습니다.

kgh2120 commented 4 months ago
예상 답변 OOP의 특징으로는 추상화, 상속, 캡슐화, 다형성이 있습니다. OOP는 이러한 특징을 통해 데이터를 상태와 동작을로 추상화시켜 객체를 만들고, 객체들간의 상호작용을 통해 프로그램을 개발합니다.
예상 꼬리 질문 답변 - 상세 & 예시 추상화 객체지향에서의 추상화는 공통된 속성과 기능을 추출하여 추상 클래스나 인터페이스로 만드는 것을 말합니다. 추상 클래스나 인터페이스를 사용해 공통된 기능을 정의하고 이를 통해 코드 재사용성과 유지보수성을 높힙니다. 주된 예시로는 Collections FW에서의 ArrayList와 LinkedList를 추상화한 추상 클래스인AbstractList나 List가 있습니다. 상속 객체지향에서의 상속은 부모 클래스의 속성과 기능을 자식 클래스가 물려받아 사용하는 것입니다. 상속을 통해 코드 재사용성과 유지보수성을 높일 수 있습니다. 대표적인 예시로는 컬렉션 프레임워크의 AbstractList를 상속받은 ArrayList와 LinkedList가 있습니다. 이들은 addAll()과 같은 메서드를 공통적으로 사용할 수 있습니다. 다형성 다형성은 어떤 객체의 속성이나 기능이 상황에 따라서 다르게 동작할 수 있는 것을 말합니다. 다형성의 대표적인 예시로는 Overriding과 Overloading가 있습니다. 오버리이딩은 상속받은 메서드를 재정의하고, 오버로딩은 같은 이름의 메서드를 다중 정의하는 것으로 다형성을 제공합니다. 대표적인 예시로 Collections Framework에서의 AbstractList의 add()는 기본으로 예외를 리턴하지만, ArrayList나 LinkedList는 이를 재정의하여 다르게 동작합니다. 캡슐화 캡슐화는 연관된 속성이나 기능을 하나의 단위로 만들어 외부로부터 보호하는 것을 의미합니다. 클래스와 접근 지정자를 사용해 캡슐화를 구현할 수 있습니다. 이를 통해 객체 내부의 구현을 감추어 코드 변경을 용이하게 합니다.