Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

yesolje

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

기술

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

yesolje 2025. 6. 1. 20:00

클래스에 대한 관심사를 분리하기 위한 방법 중 하나는 상속이다.

 

슈퍼클래스의 기본적인 로직의 흐름 외에, 변경/확장의 가능성이 있는 일부 기능을 추상메소드로 만들어 놓고, 구현체에서 이를 재정의하여 사용한다.

 

이를 통해 변경이 용이하고, 확장이 쉬운 코드를 만들 수 있다.

 

✔️ 템플릿 메소드 패턴(팩토리 메소드 패턴)

 

🔹슈퍼클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 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

 

 

참고 : 자바는 클래스의 다중상속을 허용하지 않는다?

하나의 클래스가 여러 클래스로부터 상속 받는것을 허용하지 않는다는 뜻

필요할 경우, 인터페이스 구현을 통해 가능하다.

 

 

 

 

 

소잃고 외양간 고치기