Skip to main content

Command Palette

Search for a command to run...

Intellij) JDBC 프로젝트 (5) 위임된 Main Application

Updated
Intellij) JDBC 프로젝트 (5) 위임된 Main Application

Simple JDBC Project (kor)
(1) 
Java, DB 설치 + Docker Compose로 쉽게 해 보기
(2) 프로젝트 생성, Postgresql 컨테이너 게시
(3) Flyway 도입하기
(4) JDBC 연결하기
(5) Main Application 만들기

MainApplication Runner 만들기

자바의 main 함수는 static 함수입니다. 지금 설명하기에는 어려운 이야기지만, 우리는 static 필드 관리를 피할수록 좋습니다. 필드 변수든, 메소드든 static 위주로 사용하는 상황을 피하는 것이죠.

그래서 실행할 애플리케이션 역할을 거의 대신하는 클래스를 만들 것입니다.

  • package: com.example.app
package com.example.app;

public class MainApplicaiton {
    public void run() {
        // 이곳이 이제 main 함수의 역할을 거의 대신합니다.
        // 우리가 실행하려는 '관심사'의 코드가 대부분 이곳을 거쳐 표현됩니다.
        // 마치 메인 루틴이라고 생각할 수 있습니다. (엄연히 서브루틴으로 분류합니다.)
        System.out.println("잘 실행되고 있는지 확인합니다.");
    }
}

Main 함수에서 호출

main 함수에서 MainApplicaiton 인스턴스를 생성하고, run 함수를 호출합니다. 직전 글에서 작성한 JDBC Access Check 인스턴스와 함수는 이제 필요하지 않습니다.

import com.example.app.MainApplicaiton
import com.example.common.flyway.config.MyFlyway;

import static com.example.common.support.db.DatabaseAccessConstants.DB_PASSWORD;
import static com.example.common.support.db.DatabaseAccessConstants.DB_URL;
import static com.example.common.support.db.DatabaseAccessConstants.DB_USERNAME;

public class Main {

    public static void main(String[] args) {
        // 이전 글에서 작성한 플라이웨이 실행 코드입니다.
        MyFlyway myFlyway = new MyFlyway(DB_URL, DB_USERNAME, DB_PASSWORD);
        myFlyway.migrate();

        // 이제 본격적인 루틴을 실행합니다.
        MainApplicaiton application = new MainApplication();
        application.run();
    }

}

당연히 이 코드를 통해 Flyway가 동작하고, "잘 실행되고 있는지 확인합니다."라는 문자열이 콘솔 화면에 출력됩니다.

객체지향에서 위임(delegation)이란

객체지향에는 위임이라는 개념이 있습니다. 보통은 필드 수준에서 구현하는 편이죠. 프록시라고 부르는 편입니다. "내가 이것을 하겠다."라고 해 놓고, 다른 곳에 하청을 주는 것처럼 이해하셔도 꽤 편합니다.

이번에는 필드를 통한 위임까지는 사용하지 않았습니다. 지역 변수 수준에서 사용하였는데, 엄연히 위임 동작을 구현하고 있죠. (main 함수에 담을 주요 동작을 대부분 MainApplicationrun() 메서드에 담았죠.)


< Prev

(4) JDBC 연결하기

More from this blog

클래스에 Serializable 인터페이스를 구현 받는 이유가 무엇인가요? #42

이 아티클은 깃허브 nettee-space 조직의 디스커션 #42 항목을 옮겨 온 것입니다.관련 논의: nettee-space/backend-sample-hexagonal-simple-crud/discussions/42 Question: 클래스에 Serializable 인터페이스를 구현 받는 이유가 무엇인가요? 여러 소스들을 접하면서 VO 객체 등에 Serializable를 구현받는 것을 많이 접했습니다. 저희 헥사고날(스터디 팀내 2단계 ...

Feb 7, 2025
클래스에 Serializable 인터페이스를 구현 받는 이유가 무엇인가요? #42

개념 2. JWT 액세스 토큰의 생성과 전달, Stateful한 리프레시 토큰의 생성, 전달, 보존

이전 글에서 정리에 꽤 힘을 뺐기 때문에, 이번 글에서는 서두와 부연설명을 줄이고 필요한 정보를 담아 전달해 보겠습니다. JWT 액세스 토큰 JWT 액세스 토큰은 인가에 직접 사용되는 토큰이고, stateless 하다는 장점이 있었습니다. 액세스 토큰의 생성 JWT(JSON Web Token)로 생성합니다. 비밀번호 인증 등 자격 검토 후 JWT를 발급합니다. JWT는 헤더, 페이로드, 시그니처 세 영역을 점(.) 기호로 구분한다고 했습니다....

Oct 23, 2024
개념 2. JWT 액세스 토큰의 생성과 전달, Stateful한 리프레시 토큰의 생성, 전달, 보존

Merge Simpson의 매너 있고 다정한 한국어 개발자 블로그

37 posts