티스토리 뷰
로컬에 저장한 사진이나 로그같은 파일에 접근할 때 계속 하드코딩을 써오다가…(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)
할 때나 봤지 그게 뭔데 싶어서 찾아보았다.
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/
잘 적용됨을 알 수 있다^^!
'#2 > JAVA' 카테고리의 다른 글
[JAVA] 문자(열)을 요리조리~~ split, charAt, toCharArray() (0) | 2022.12.23 |
---|---|
[JAVA] Optional 이란? + Iterable (0) | 2022.11.09 |
[java] 인터페이스 interface 에 관한 간단한 생각 (0) | 2021.12.30 |
[Java] Wrapper 클래스, 오토박싱, 언박싱.. (0) | 2021.11.08 |
casting, parsing 캐스팅, 파싱 (0) | 2021.11.08 |