본문 바로가기

cs(with 매일메일)

[260218수] 객체 지향 프로그래밍이랑 무엇이고, 어떤 특징이 있나요?

객체 지향 프로그래밍은 상태(필드)와 행위(메서드)를 가진 객체를 중심으로 프로그램을 설계하는 프로그래밍 패러다임이다. 

각 객체에 역할과 책임을 부여하고, 이 객체들이 서로 협력하는 방식으로 프로그램을 구성

 

 

1. 캡슐화 

- 객체의 상태와 행위를 하나의 단위로 묶는 것

- 내부 구현은 숨기고 외부에서 접근할 수 있는 인터페이스만 제공 

- 장점 : 객체의 무결성을 보고하고 코드의 유지보수성 높임

 

2. 추상화

- 불필요한 세부 사항을 감추고 핵심적인 기능만 간추려내는 것

- 객체의 공통적인 특징을 추출하여 인터페이스 또는 추상 클래스로 정의하고, 구체적인 세부 사항은 구현체에 위임함

- 장점 : 객체의 핵심 기능에만 집중 가능

✨ 추상클래스 : 공통된 기능을 재사용하려는 목적. 일반 메서드/추상 메서드 포함 가능하며 인스턴스 변수 가능(is - a)

✨ 인터페이스 : 구현을 강제하려는 목적. 추상 메서드와 default메서드 포함 가능, 상수만 가능(can - do, 다중 상속)

 

3. 다형성

- 하나의 인터페이스아 여러 형태로 동작할 수 있는 것

- 오버로딩, 오버라이딩을 사용하여 같은 메서드명이더라도 객체에 따라 다르게 동작 가능

✨ 오버로딩 : 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것(매개변수의 개수, 타입, 순서 차이)

✨ 오버라이딩 : 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것

 

4. 상속

- 상위 클래스의 특징을 하위 클래스가 물려받아 확장하는 것

- 기존 기능 + 새로운 기능 추가 가능

- 장점 : 확장성이 뛰어남. 중복을 제거하여 코드의 재사용성 높임

 

다이아몬드 문제

- 다중 상속에서 발생하는 모호성 문제를 의미한다.

- C++ : 다중상속을 지원하는 언어이르모 직접 해결 필요

- Java : 클래스에 대한 다중 상속을 지원하지 않고 인터페이스에서만 허용