객체지향 프로그래밍 (Object-Oriented Programming)

parkrootseok·2025년 2월 4일

자바

목록 보기
8/19
post-thumbnail

객체지향 프로그래밍이란?

객체지향 프로그래밍이란 프로그램을 여러 개의 독립된 객체로 구성하고, 객체 간의 상호 작용을 통해 기능을 수행하는 프로그래밍 패러다임입니다. 이러한 패러다임은 유지보수성과 확장성이 뛰어나며 코드의 재사용성을 높일 수 있다는 장점이 있습니다. 이에 대한, 핵심 개념으로 캡슐화, 상속, 다형성, 추상화 등이 있습니다. 이 4가지 개념을 이해하고 활용하는 것은 객체지향 프로그래밍을 효과적으로 구현하는 데 필수입니다.

캡슐화 (Encapsulation)

캡슐화는 객체 내 변수와 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하도록 보호하는 개념으로 접근 제한자를 사용하여 구현할 수 있습니다. 이를 통해, 데이터 무결성 보장과 객체의 내부 구현을 숨기고 이에 대한 영향을 최소화할 수 있습니다.

접근 제한자

접근 제한자는 클래스 내의 데이터와 메서드에 대한 접근 범위를 지정하는 데 사용합니다. 이에 대한 종류는 4가지가 존재하며 다음과 같습니다.


구분 범위
private 클래스 내부에서만 접근 가능
default 같은 패키지 내에서 접근 가능
protected 같은 패키지 및 자식 클래스에서 접근 가능
public 모두 접근 가능

상속 (Inheritance)

상속은 기존(부모) 클래스의 속성과 메서드를 새로운(자식) 클래스가 물려받아 사용할 수 있도록 하는 개념으로 자식 클래스는 1개의 부모 클래스만 상속받을 수 있습니다. 이를 통해, 코드 재사용성과 유지보수성을 높이며 기존 기능을 확장할 수 있습니다.

super

super는 부모 클래스의 생성자나 메서드를 호출할 때 사용하는 키워드입니다. 다음 예시와 같이 사용할 수 있습니다.

다형성 (Polymorphism)

다형성은 같은 인터페이스나 부모 클래스를 공유하는 객체들이 각자 다른 방식으로 동작하는 개념으로 오버로딩과 오버라이딩으로 구현할 수 있습니다. 이를 통해, 코드 유연성과 유지보수성을 높이며 실행 시간에 동적으로 객체의 동작을 제어할 수 있습니다.

Compile-time 다형성과 Runtime 다형성

또한, 다형성의 경우 컴파일 시간 다형성과 실행 시간 다형성으로 나뉩니다. 이러한 다형성을 구현하기 위해 사용하는 개념이 메소드 오버로딩과, 메소드 오버라이딩 입니다.

메소드 오버로딩 (Overloading)

메소드 오버로딩이란 Compile-time 다형성을 구현하기 위해 사용하는 개념입니다. 이를 위해, 같은 클래스 내에서 동일한 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러개 정의할 수 있습니다.

메소드 오버라이딩 (Overriding)

메소드 오버라이딩이란 Runtime 다형성을 구현하기 위해 사용하는 개념입니다. 이를 위해, 상속 관계에서 부모 클래스의 메서드를 자식 클래스가 재정의할 수 있습니다.

추상화 (Abstraction)

추상화는 객체의 핵심적인 속성과 동작만 추려내어 정의하고 세부 사항은 숨기는 개념으로 추상 클래스와 인터페이스를 통해 구현할 수 있습니다. 이를 통해, 불필요한 정보 노출을 방지하며 객체의 공통된 특성을 정의하여 일관성을 유지할 수 있습니다.

추가 학습이 필요한 내용

아래는 위 개념을 공부하면서 추가 학습이 필요할 것 같은 내용들입니다. 이 내용들은 차차 정리하여 링크를 달도록 하겠습니다.

클래스, 추상 클래스, 인터페이스

SOLID

정적 바인딩과 동적 바인딩

Upcasting과 DownCasting

예상 질문

객체 지향의 특성은 무엇이 있나요?

상속, 캡슐화, 다형성, 추상화라는 4가지 핵심 개념이 있습니다.

상속은 무엇인가요?

상속은 기존 클래스의 데이터나 메서드를 새로운 클래스가 물려받아 사용할 수 있도록 하는 개념으로 Java의 경우 단일 상속만 지원하고 있습니다. 이를 통해, 유지보수성과 재사용성을 높일 수 있습니다.

캡슐화는 무엇인가요?

캡슐화는 객체 내부의 데이터와 메서드를 묶는 것으로, 이에 대한 외부 접근을 제어하기 위한 개념입니다. 이를 통해, 데이터 무결성을 보장하며 내부 구현 메서드를 숨겨 영향을 최소화 할 수 있습니다.

캡슐화와 은닉화는 무엇이 다른가요?

정보 획득 여부

  • 캡슐화는 특정 변수에 대한 직접 접근을 막고, 메소드를 통해 간접적인 접근을 수행하도록 한 것
  • 정보 획득 가능
  • 은닉화는 정보에 대한 접근 차제를 막은 것
  • 정보 획등 불가능
  • 즉, 캡슐화라고 해서 반드시 정보 은닉이 되는 것은 아님

다형성은 무엇인가요?

다형성은 같은 인터페이스나 부모 클래스를 공유하는 객체들이 서로 다른 동작을 할 수 있도록 하는 개념으로 메소드 오버로딩과 오버라이딩을 통해 구현할 수 있습니다. 이를 통해, 동적으로 객체들의 행동을 제어할 수 있습니다.

오버로딩과 오버라이딩은 어떤 차이가 있나요?

오버로딩은 같은 클래스 내부에서 동일한 이름을 가지는 메서드의 매개 변수 타입, 개수를 다르게하여 재정의하는 것을 말합니다. 오버라이딩은 상위 클래스의 메서드를 재정의하는 것을 말합니다.

추상화는 무엇인가요?

추상화는 객체의 핵심적인 속성과 동작만 추려내어 정의하고 세부적인 기능은 숨기는 개념을 말하며, 추상 클래스나 인터페이스를 통해 구현할 수 있습니다. 이를 통해, 불필요한 세부 정보 노출을 방지하며 객체의 일관성을 유지할 수 있습니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글