| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- CodeCommit
- Spring Boot
- s3
- Cache
- 티스토리챌린지
- spring
- 오블완
- 스터디
- serverless
- 기본형
- 자바
- goorm x kakao
- goorm
- data
- bootcamp
- mapping
- orm
- QueryDSL
- backend
- jvm
- MSA
- backenddeveloper
- Redis
- nosql
- aws
- Docker
- 개발자
- 자격증
- java
- jpa
- Today
- Total
gony-dev 님의 블로그
추상 클래스? 알려드리겠습니다! 본문
지난 시간에는 자바에서 빠질 수 없는 객체 지향 클래스에 대해 알아보고 실습해보았다!
[JAVA] - JAVA의 꽃, 객체 지향 프로그래밍(OOP)의 클래스 문법
이번에는 구체적이지 않지만 중요한 "Abstract"에 대해 알아보도록 하자.
추상화?
추상적이라는 단어는 현실의 구체적인 형태나 모습이 아닌 여러 사물에서 공통된 속성을 뽑아내어 만든 개념 또는 관념적인 것을 의미한다.
지금까지 우리가 실습하며 작성해왔던 클래스는 구체적으로 데이터를 담아 인스턴스화하여 다루었다.
이번에 배우게 될 추상 클래스는 구현부가 없는 메서드를 포함하여 자식 클래스에서 반드시 구현화해야하는 클래스이다.
당연히 인스턴스화가 불가능하며, 선언 시 "abstract" 키워드를 추가해야한다.

객체 지향 프로그래밍에서 듣게 되는 '추상화'랑 동일하며,
서울의 지리를 추상화시켜 보여주는 서울 지하철 노선도가 그 예시가 된다.
그럼 추상화를 클래스에 접목시킨 추상 클래스에 대해 더 자세히 알아보자.
추상 클래스
추상 클래스는 추상화 개념을 추가하여 구조적으로 객체를 설계하고, 기능 수정이나 추가를 포함하여 전체적인 유지보수성을 높여준다.
때문에 개별 프로젝트보다는 범용 라이브러리나 프레임워크 시스템을 설계하는데 유용하게 작용한다.
(ex. String.toUpperCase(), for, while)
아래는 추상 클래스를 간단하게 작성한 것이다.
// 추상 클래스
public abstract class Player {
private int level;
private int power;
private String nickname;
public Player(String nickname) {
this.level = 1;
this.power = 30;
this.nickname = nickname;
}
public abstract void levelUp();
}
// 상속받은 클래스
class Archer extends Player {
public void levelUp() {
System.out.println("궁수" + this.nickname + "님이 레벨업하였습니다.");
}
}
추상 클래스 내에 선언된 abstract를 가진 메서드는 추상 메서드라고 하며, 저렇게 미완성인 채로 완성한다.(?)
미완성으로 남겨놓는 이유는 추상 클래스를 상속 받는 자식 클래스에 따라 상속 받는 메서드의 내용이 달라지기 때문이다.
즉, 실제 내용은 상속 받는 클래스에서 구체적으로 구현하도록 비워둔다고 생각하면 된다.
추상 클래스 생성자
추상 클래스는 인스턴스 객체를 생성할 수 없다.
추상 클래스는 구체화하지 않기 때문에 객체에서 구체적인 설정이 불가능하며,
오로지 부모 클래스로서 상속시키기 위한 개념으로 작용되기 때문이다.
따라서 반드시 추상 클래스를 어떤 자식 클래스에 상속시키고, 자식 클래스를 인스턴스화하여 사용해야만 한다.
// 추상 클래스
public abstract class Player {
private int level;
private int power;
private String nickname;
public Player(String nickname) {
this.level = 1;
this.power = 30;
this.nickname = nickname;
}
public abstract void levelUp();
}
// 상속받은 클래스
class Archer extends Player {
public Archer(String name) {
super(name);
this.power = 20;
}
public void levelUp() {
System.out.println("궁수" + this.nickname + "님이 레벨업하였습니다.");
}
}
추상화는 생각보다 어렵지 않은 개념이었다.
다만 OOP에서는 빠질 수 없는 개념이므로 확실히 이해하고 넘어가야 한다고 느꼈다.
추상 클래스를 기반으로 공통 기능들을 미리 정의해두고, 이를 상속받은 실제 클래스에서 필요한 부분만 확장하거나 구체화하면 코드 구조가 확실히 명확해진다. 결과적으로 중복 코드를 줄이고, 변경이 생겼을 때 영향 범위를 최소화할 수 있어 유지보수성을 높일 수 있다.
프로젝트 관점에서 추상 클래스를 잘 설계해주면, 개발자는 공통적으로 필요한 부분만 오버라이딩하여 구현만 하면 되기 때문에 개발 비용이 줄어들고, 구현에만 온전히 집중할 수 있다.
추상화는 단순한 문법이 아니다. 협업과 확장성을 위한 설계 도구임을 확실히 짚고 넘어가자!
'JAVA' 카테고리의 다른 글
| JAVA의 꽃, 객체 지향 프로그래밍(OOP)의 클래스 문법 (1) | 2026.01.12 |
|---|---|
| JAVA 배열을 모르겠다고? 알려드리겠습니다! (0) | 2026.01.06 |
| JAVA 타입 형변환 (1) | 2026.01.04 |
| JAVA 기본형 데이터 타입 (0) | 2025.12.31 |
| JAVA 변수 종류 (0) | 2025.12.30 |