yesolje
Spring의 기능 확장 - 상속과 템플릿 메소드 패턴 본문

클래스에 대한 관심사를 분리하기 위한 방법 중 하나는 상속이다.
슈퍼클래스의 기본적인 로직의 흐름 외에, 변경/확장의 가능성이 있는 일부 기능을 추상메소드로 만들어 놓고, 구현체에서 이를 재정의하여 사용한다.
이를 통해 변경이 용이하고, 확장이 쉬운 코드를 만들 수 있다.
✔️ 템플릿 메소드 패턴(팩토리 메소드 패턴)
🔹슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤, 서브클래스에서 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법
🔹예시
- UserDao(슈퍼클래스)
package com.tobySpringStudy.user.dao;
import com.tobySpringStudy.user.domain.User;
import java.sql.*;
public abstract class UserDao {
public void add(User user) throws ClassNotFoundException, SQLException {
Connection c = getConnection();
.......
}
public User get(String id) throws ClassNotFoundException, SQLException{
Connection c = getConnection();
.......
}
public abstract Connection getConnection() throws ClassNotFoundException, SQLException;
}
- NUserDao(서브클래스)
package com.tobySpringStudy.user.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class NUserDao extends UserDao{
public Connection getConnection() throws ClassNotFoundException, SQLException {
//N사의 DB connection 생성 코드
Class.forName("org.h2.Driver");
Connection c = DriverManager.getConnection(
"jdbc:h2:tcp://localhost/~/testDB", "sa", ""
);
return c;
}
}
✔️ 추상클래스
직접 인스턴스를 만들 수 없고, 하위 클래스로 상속하여 사용해야 하는 클래스
abstract 키워드를 붙여 생성, extends 키워드를 붙여 상속
필드/일반 메서드/ 추상 메서드를 가질 수 있음
❗참고 : Java 의 접근 제어자
| 접근제어자 | 같은 클래스 | 같은 패키지 | 다른 패키지의 자식 클래스 | 외부클래스 |
| public | ✅ | ✅ | ✅ | ✅ |
| protected | ✅ | ✅ | ✅ | ❌ |
| (default) | ✅ | ✅ | ❌ | ❌ |
| private | ✅ | ❌ | ❌ | ❌ |
❗참고 : 자바는 클래스의 다중상속을 허용하지 않는다?
하나의 클래스가 여러 클래스로부터 상속 받는것을 허용하지 않는다는 뜻
필요할 경우, 인터페이스 구현을 통해 가능하다.
소잃고 외양간 고치기
'기술' 카테고리의 다른 글
| GitLab Runner와 Docker를 활용한 개발 서버 CI/CD 파이프라인 구축 (0) | 2026.02.16 |
|---|---|
| Scapy를 활용한 실시간 TCP 패킷 수집과 Kafka‑DB 데이터 파이프라인 구축 (1) | 2025.07.24 |
| 스프링 빈(Spring bean) 생명주기 (0) | 2025.05.08 |
| 캐시(Cache) 의 동작 원리 (0) | 2025.05.01 |
| 멀티모듈 구조로 Spring 프로젝트 리팩토링 (0) | 2025.04.16 |