OOP 4가지 개념
객체지향 언어(OOP)가 갖추어야 하는 기본 개념 4가지
특성 | 설명 | 예시 |
캡슐화 (Encapsulation) |
객체의 데이터(필드)와 동작(메서드)를 하나로 묶고, 실제 구현 내용을 외부에 감추는 개념 | private 필드 + getter/setter |
상속 (Inheritance) |
부모 객체가 자신의 필드와 메서드를 자식 객체에게 물려주는 개념 | class Child extends Parent |
다형성 (Polymorphism) |
하나의 메서드나 객체가 다양한 형태로 동작 가능한 개념 | 오버로딩, 오버라이딩 |
추상화 (Abstraction) |
공통적인 속성/기능을 추출해 클래스로 정의하는 개념 | 인터페이스, 추상 클래스 |
* 인터페이스는 "추상화"의 도구로, "다형성"을 가능하게 해주는 수단이다
캡슐화


오버로딩 / 오버라이딩
📝 오버로딩(Overloading)
- 하나의 메서드에 대해 매개변수를 다르게해서 여러개 생성하는 것
- 위치 : 같은 클래스 내에서 발생
- 목적 : 다양한 입력 처리(편의성)
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
📝 오버라이딩(Overriding)
- 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것
- @override 사용
- 위치 : 자식 클래스 내부
- 목적 : 부모 클래스의 메서드를 자식 클래스에 맞게 재정의
class Animal {
void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
💌 추상 클래스
- abstract 키워드로 정의된 클래스, 공통된 속성과 기능을 묶는 설계도 역할
- 객체 직접 생성 불가
- 일부 메서드는 구현하고, 일부는 추상 메서드로 정의 가능
- ➡️ 추상 클래스 내에, 일반 메서드 존재 가능!!
public abstract class Animal {
String name;
void eat() {
System.out.println("먹는다");
}
abstract void sound(); // 추상 메서드 (구현 없음)
}
public class Dog extends Animal {
...
}

💌 추상 메서드
- 구현부가 없는 메서드
- 선언만, 실제 구현은 자식 클래스에 맡김
- 오직 추상 클래스 내에서만 정의 가능
❓ 추상 클래스 vs 인터페이스 ❓
추상 클래스 | 클래스 간 공통된 속성과 기능을 공유 단일 상속만 가능, 자식 클래스 제어 |
인터페이스 | 자바의 다중 상속을 가능하게 하는 기능 인터페이스 아래에 여러 구현체 존재 |
*단일 상속 : 한 클래스가 오직 하나의 추상 클래스만 상속받을 수 있다.
(ex, 자식은 엄마나 아빠만 가질 수 있다. 엄마 아빠 동시에 가질 수 없다.)
*다중 상속 : 한 클래스가 두 개 이상의 부모 클래스로부터 상속을 받는 것
면접 답변이라면,
추상 클래스와 인터페이스는 모두 추상화를 위한 도구이지만 사용 목적과 기능에 차이 존재
추상 클래스는 클래스 간 공통된 속성과 기능 공유 / 상속받는 클래스들이 공통 기능을 그대로 사용하거나 재정의 가능
인터페이스는 구현해야 할 기능의 '규약'만 정의 / 여러 인터페이스를 동시에 구현할 수 있어 다중 상속이 필요한 상황에 적합
그렇다면 추상 클래스는 왜 사용할까?
그냥 상속을 사용하거나 인터페이스를 사용하면 되는거 아닌가?
추상 클래스의 장점
- 공통 기능 재사용 가능
- 상태(필드)를 가질 수 있음
- 자식클래스 제어 가능
- 메모리 효율화(일반 메서드를 추상 메서드로 관리함으로서 얻는)
'KB 국민은행 IT's your life 교육' 카테고리의 다른 글
[Java] Java의 메모리 모델(스택, 힙, 메서드)과 용어(클래스, 객체, 인스턴스, static, final) 정리 (3) | 2025.04.16 |
---|---|
[Vue.js] vue-router, 동적 라우터, 명명 라우트, 프로그래밍 방식의 라우팅 제어 (0) | 2025.03.28 |
[Vue.js] Composition API(setup 함수, ref 함수, reactive 함수), 생명 주기22 (0) | 2025.03.27 |
[Vue.js] 컴포넌트 심화(Scoped CSS, CSS모듈, 슬롯, 사용자 정의 v-model) (0) | 2025.03.27 |
[Vue.js] Vue 프로젝트 폴더 생성(Vite), 단일 파일 컴포넌트 적용 (0) | 2025.03.25 |