티스토리 뷰

728x90

로컬에 저장한 사진이나 로그같은 파일에 접근할 때 계속 하드코딩을 써오다가…(win에서 테스트할 때는 win경로, ubuntu에서 테스트할때는 ubuntu 경로로 바꿔줌..;;)

OS별로 그냥 구분해서 알려주면 얼마나 좋을까 싶어서 if로 구분해서 알려주는 방식을 써보기로 했다.

@Configuration
public class OsCheck {

    public String osCheck() {
        String os = System.getProperty("os.name").toLowerCase();
        String path = "";
        if(os.contains("win")) {
             path = "C:/Cuna/images/";
        }else {
            path = "/home/cuna/";
        }
        return path;
    }
}

물론 OS를 이렇게만 구분하면 안된다..... 나는 어짜피 테스트할 목적이었기 때문에..

 

결국 path를 지정해줘야하긴하는데 그래도 얘를 여기저기 가져다 쓰면 win에서 테스트할때 ubuntu에서 테스트할 때 내가 일일이 바꿀 필요가 없다!

문제는 얘를 불러오는 방법

여기저기에 autowired 해서 가져오는 방법은 너무 비효율적이라고 생각이 되었다. 왜냐면 os는 프로젝트 시작하면 그때 딱 알 수 있거든 굳이굳이 불러낼때마다 확인할 필요가 없거든

그렇다고 ProjectApplication.class에 넣자니 뭔가 무서웠다.

그래서 어떻게하면 프로젝트 안에서 변수를 공유할 수 있을 지 찾아보다가 알게된 것이 static. static은 public static void main(String[] args) 할 때나 봤지 그게 뭔데 싶어서 찾아보았다.

[Java] 자바 static의 의미와 사용법

Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당됩니다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static영역에 있는 멤버들은 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 됩니다.

빨간 줄 부분만 읽고 이거다! 하고 바로 static 갈김

@Configuration
public class OsCheck {

    public static String os = System.getProperty("os.name").toLowerCase();

    public static String osCheck() {
        String path = "";
        if (os.contains("win")) {
            path = "C:/Cuna/images/";
        } else {
            path = "/home/cuna/";
        }
        return path;
    }
}

최종적인 코드는 이렇다.

그래서 테스트를 해보면

log.info("path is {}", OsCheck.osCheck());

00:00 INFO .... -path is C:/Cuna/images/

잘 적용됨을 알 수 있다^^!

 

 

 

 

728x90
댓글
250x250
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함