재사용 가능한 JSON 유틸리티 생성
소프트웨어 개발에서는 재사용 가능한 코드를 작성하는 것이 모범 사례입니다. 파일 읽기 로직을 필요한 모든 클래스에서 반복하는 대신 유틸리티 클래스를 만들 수 있습니다. "Don't Repeat Yourself" (DRY) 로 알려진 이 접근 방식은 코드를 더 깔끔하고 유지 관리하기 쉬우며 오류 발생 가능성을 줄여줍니다.
JsonUtils 클래스 생성
JSON 파일을 읽는 로직을 캡슐화하는 유틸리티 클래스를 만들어 보겠습니다.
- WebIDE 에서
src/main/java/com/labex 디렉토리 안에 JsonUtils.java라는 새 파일을 생성합니다.
- 다음 코드를 추가합니다.
package com.labex;
import org.json.JSONObject;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class JsonUtils {
/**
* 상대 경로에서 JSON 파일을 읽어 JSONObject 로 파싱합니다.
*
* @param filePath JSON 파일의 상대 경로.
* @return 파일 내용을 나타내는 JSONObject.
* @throws IOException 파일을 읽는 동안 I/O 오류가 발생하는 경우.
*/
public static JSONObject readJsonObjectFromFile(String filePath) throws IOException {
String content = new String(Files.readAllBytes(Paths.get(filePath)));
return new JSONObject(content);
}
}
이 클래스에는 단일 static 메서드인 readJsonObjectFromFile이 포함되어 있습니다. static 메서드는 인스턴스가 아닌 클래트 자체에 속하므로 객체를 생성하지 않고 클래스 이름을 사용하여 직접 호출할 수 있습니다 (예: JsonUtils.readJsonObjectFromFile(...)).
유틸리티 클래스 사용
이제 새 유틸리티를 사용하는 메인 애플리케이션 클래스를 만들어 보겠습니다.
- WebIDE 에서
src/main/java/com/labex 디렉토리 안에 Main.java라는 새 파일을 생성합니다.
Main.java에 다음 코드를 추가합니다.
package com.labex;
import org.json.JSONObject;
public class Main {
public static void main(String[] args) {
try {
// 유틸리티 클래스를 사용하여 JSON 파일 읽기
JSONObject data = JsonUtils.readJsonObjectFromFile("src/main/resources/data.json");
// 이제 이전과 같이 JSONObject 를 사용할 수 있습니다.
String name = data.getString("name");
String city = data.getJSONObject("address").getString("city");
System.out.println("--- JsonUtils 를 사용하여 읽은 데이터 ---");
System.out.println("Name: " + name);
System.out.println("City: " + city);
System.out.println("\nJsonUtils 를 사용하여 JSON 을 성공적으로 읽었습니다.");
} catch (Exception e) {
System.out.println("오류가 발생했습니다: " + e.getMessage());
}
}
}
이 Main 클래스는 훨씬 더 깔끔합니다. 파일 읽기 및 파싱 작업을 JsonUtils에 위임하고 결과 JSONObject로 무엇을 할지에만 집중합니다.
메인 애플리케이션 실행
마지막으로 Main 클래스를 실행해 보겠습니다.
- WebIDE 에서 터미널을 엽니다.
- 다음 명령을 실행합니다.
mvn compile exec:java -Dexec.mainClass="com.labex.Main"
다음과 같은 출력을 볼 수 있습니다.
--- Data read using JsonUtils ---
Name: John Doe
City: Anytown
Successfully read JSON using JsonUtils.
유틸리티 클래스를 생성함으로써 코드를 더 모듈화하고 재사용 가능하게 만들었습니다. 이는 효과적인 소프트웨어 엔지니어링의 핵심 원칙입니다.