1. 추상화(Abstraction)
공통의 속성이나 기능을 묶어 이름을 붙이는 것을 추상화라고 할 수 있다.
- 객체 지향적 관점에서 클래스를 정의하는 것을 추상화라고 할 수 있다. 예를 들어 사자, 고양이, 강아지가 있을 때 우리는 이것을 각자 객체라고 하며, 이 객체들의 공통적인 동물이라고 표현할 수 있는데 이때 동물을 묶는 행위를 추상화라고 한다.
2. 캡슐화(encapsulation)
특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것을 캡슐화라고 한다.
- 쉽게 말해 모듈화를 의미한다. 이러한 캡슐화를 통해 정보를 객체 안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개함으로써 정보 은닉(외부 접근 제한) 효과도 자연스럽게 따라온다.
캡슐화와 정보은닉의 차이
정보 은닉 기법은 대표적으로 3가지 정도가 있다
- 객체의 구체적인 타입 은닉(=업캐스팅)
- 구체적의 필드 및 메소드 은닉(=캡슐화)
- 구현 은닉(=인터페이스&추상 클래스)
정보 은닉 기법 중 하나가 캡슐화라는 것이다.
3. 상속(inherutance)
상위 개념의 특지을 하위 개념이 물려받는 것을 상속이라 한다.
- 상속에서 주의해야할 점은 계층도, 조직도 관점(가족 관계도와 같은)에서 이해하면 안된다는 점이다. 분류도 관점에서 이해해야한다. 하위 클래스는 상위 클래스의 역할을 대신할 수 있으면서 고유의 역할도 수행할 수 있어야 한다. 아버지와 아들을 예시로 들면 아들은 아버지의 역할을 할 수 있으면서 아들 고유의 역할도 수행할 수 있어야 하지만 그렇지 못한다. 이와 같은 부분에서 상속을 사용할 때는 주의해야 한다. 상속은 코드의 재사용성을 높이고 확장성을 높여준다.

업캐스팅
- 정의: 자식 클래스가 부모 클래스 타입으로 형변환
- 특징
Parent p = new Child();
형변환을 선언하지 않아도 자동으로 형변환이 된다.
- 업캐스팅을 사용하는 이유: 공통적으로 할 수 있는 부분을 만들어 간단하게 다루기 위해서이다. 상속 관계에서 상속 받은 서브 클래스가 몇 개이든 하나의 인스턴스로 묶어서 관리할 수 있기 때문이다.
예를들어 다음과 같이 부모 클래스 Shape에 각각 자식 클래스 Rectangle, Triangle, Circle가 상속 관계를 맺었다고 하자.
본래라면 Rectangle, Triangle, Circle 클래스는 서로 다른 타입이니 각각 타입을 정의해서 사용해야 한다.
Rectangle[] r = new Rectangle[];
r[0] = new Rectangle();
r[1] = new Rectangle();
Triangle[] t = new Triangle[];
t[0] = new Triangle();
t[1] = new Triangle();
Circle[] c = new Circle[];
c[0] = new Circle();
c[1] = new Circle();

하지만 상속 관계를 맺어 부모 클래스로 업캐스팅이 가능하다면, 다음과 같이 하나의 타입으로 묶어 배열을 구성할 수 있게 된다.
Shape[] s = new Shape[];
s[0] = new Rectangle();
s[1] = new Rectangle();
s[2] = new Triangle();
s[3] = new Triangle();
s[4] = new Circle();
s[5] = new Circle();
다운캐스팅
- 정의: 부모 클래스가 자식 클래스 타입으로 캐스팅
- 특징
Parent p = new Childe();
Child c = (Child)p;
업캐스팅이 먼저 선행되어야 한다.
명시적으로 타입을 지정해주어야한다.
- 다운캐스팅을 하는 이유: 다운캐스팅의 목적은 업캐스팅한 객체를 다시 자식 클래스 타입의 객체로 되돌리는데 목적을 둔다. (복구)
4. 다형성
같은 모양의 코드가 다른 행위를 하는 것을 나타낸다. 자바에서는 Overriding, Overloading이 그 방법이다.
Overriding 오버라이딩
- 상위클래스로부터 상속받은 메서드를 하위클래스에서 재정의
- → 단, 메서드 이름 / 매개변수 / 반환 타입은 동일해야 함
Overloading 오버로딩
- 메서드 이름은 동일하나 매개변수 개수 또는 타입을 다르게 지정
check)
1. OOP의 4가지 특성은 무엇인가?
2. 캡슐화와 은닉화의 차이?
3. 업캐스팅과 다운캐스팅이란?
4. 오버로딩과 오버라이딩의 차이?
출처: 개발자 인큐티비 백엔드개발 자바 기술면접 | 개발자 기술 면접 )IT 서비스 탑티어 회사 신입개발자 JAVA 단골 질문1
https://www.youtube.com/watch?v=a-f0HxYRNiM
출처: https://inpa.tistory.com/entry/JAVA-☕-업캐스팅-다운캐스팅-한방-이해하기 [Inpa Dev 👨💻:티스토리]
☕ JAVA 업캐스팅 & 다운캐스팅 - 완벽 이해하기
자바의 참조형 캐스팅 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 타입 변환 혹은 형변환(캐스팅) 이라고 한다. 자바의 데이터형을 알아보면 크게 두가지로 나뉘게 된다. 기본형(primitive ty
inpa.tistory.com
'cs > dev' 카테고리의 다른 글
| [CS]인터페이스와 추상클래스? (0) | 2025.09.17 |
|---|---|
| [CS]클래스와 객체, 인스턴스의 차이가 뭔가요? (0) | 2025.09.16 |
| [Spring]spring과 spring boot (0) | 2025.09.16 |
| [Spring]JPA란 무엇인가요? (ORM, SQL Mapper) (0) | 2025.09.16 |
| [CS]프로시저란 무엇인가요? (0) | 2025.09.14 |