반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/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
Archives
Today
Total
05-19 00:03
관리 메뉴

ImJay

[Java Spring MVC] 컨트롤러로부터 받아온 값을 전역변수처럼 사용하기 본문

Java Spring

[Java Spring MVC] 컨트롤러로부터 받아온 값을 전역변수처럼 사용하기

ImJay 2023. 4. 26. 19:38
반응형

컨트롤러로부터 받아온 값을 프로젝트 내의 어떤 클래스든 사용하려면, 값을 저장하는 방법은 다양합니다. 이에 대한 예시를 몇 가지 들어보겠습니다.

1. 변수에 저장하기

public class MyController {
    public void handleRequest(String data) {
        // 데이터를 변수에 저장
        String myData = data;
        
        // 다른 클래스에서 변수 사용
        MyService myService = new MyService();
        myService.processData(myData);
    }
}

public class MyService {
    public void processData(String data) {
        // 변수 사용
        System.out.println("Data received: " + data);
    }
}


가장 간단한 방법은 변수에 값을 저장하는 것입니다. 이 경우 변수의 스코프(scope)에 따라 다른 클래스에서 사용할 수 있는 경우와 제한되는 경우가 있습니다.

2. Singleton 패턴 적용하기 

public class MyController {
    public void handleRequest(String data) {
        // Singleton 객체에서 데이터 저장
        MyDataSingleton.getInstance().setData(data);
        
        // 다른 클래스에서 Singleton 객체 사용
        MyService myService = new MyService();
        myService.processData();
    }
}

public class MyService {
    public void processData() {
        // Singleton 객체에서 데이터 조회
        String data = MyDataSingleton.getInstance().getData();
        
        // 데이터 사용
        System.out.println("Data received: " + data);
    }
}

public class MyDataSingleton {
    // Singleton 객체
    private static final MyDataSingleton INSTANCE = new MyDataSingleton();
    
    // 데이터 변수
    private String data;
    
    // 생성자는 private으로 선언하여 외부에서 객체 생성 방지
    private MyDataSingleton() {}
    
    // Singleton 객체 반환
    public static MyDataSingleton getInstance() {
        return INSTANCE;
    }
    
    // 데이터 설정 및 조회 메소드
    public void setData(String data) {
        this.data = data;
    }
    
    public String getData() {
        return data;
    }
}


Singleton 패턴은 전역 변수를 사용하는 것과 유사한 방식으로, 하나의 객체만 생성하고 이를 여러 곳에서 공유하여 사용합니다. 이 경우, 컨트롤러로부터 받아온 값을 Singleton 객체에 저장하고, 다른 클래스에서는 Singleton 객체를 이용하여 값을 사용할 수 있습니다.

3. 스태틱(static) 변수나 메소드를 이용하기

public class MyController {
    public void handleRequest(String data) {
        // 스태틱 변수에 데이터 저장
        MyData.setData(data);
        
        // 다른 클래스에서 스태틱 메소드를 이용하여 데이터 사용
        MyService.processData();
    }
}

public class MyService {
    public static void processData() {
        // 스태틱 변수에서 데이터 조회
        String data = MyData.getData();
        
        // 데이터 사용
        System.out.println("Data received: " + data);
    }
}

public class MyData {
    // 스태틱 변수
    private static String data;
    
    // 데이터 설정 및 조회 메소드
    public static void setData(String data) {
        MyData.data = data;
    }
    
    public static String getData() {
        return data;
    }
}


스태틱 변수나 메소드를 이용하여 값을 저장하고, 다른 클래스에서는 스태틱 변수나 메소드를 이용하여 값을 사용할 수 있습니다. 이 경우에도 Singleton 패턴과 유사한 효과를 얻을 수 있습니다.

4. 데이터베이스나 파일에 저장하기

public class SomeClass {
    private String someData;
    
    public SomeClass(String data) {
        this.someData = data;
    }
    
    public void doSomething() {
        System.out.println("Doing something with " + someData);
    }
}

@RestController
public class MyController {
    
    @PostMapping("/someEndpoint")
    public ResponseEntity<String> handleRequest(@RequestBody String data) {
        SomeClass someClass = new SomeClass(data);
        someClass.doSomething();
        return ResponseEntity.ok("Success");
    }
}


컨트롤러로부터 받아온 값을 데이터베이스나 파일에 저장하고, 다른 클래스에서는 이를 조회하여 값을 사용할 수 있습니다. 이 경우, 데이터베이스나 파일에 저장하는 방식은 선택된 기술에 따라 다르며, 이를 위해 필요한 라이브러리나 프레임워크를 추가로 사용해야 할 수도 있습니다.

반응형
Comments