From 397529301b2f6ca802f7a3d9ddb3f9d7b98de21d Mon Sep 17 00:00:00 2001 From: Rinjae Date: Mon, 22 Jun 2026 10:15:44 +0900 Subject: [PATCH] =?UTF-8?q?-=20DamoManager=20singleton=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20README=20?= =?UTF-8?q?=EC=98=88=EC=A0=9C=20=EA=B0=B1=EC=8B=A0=20-=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EB=B0=A9=EC=8B=9D=20?= =?UTF-8?q?=EC=9C=A0=EC=A7=80=20-=20=EC=A0=90=EC=A7=84=EC=A0=81=20singleto?= =?UTF-8?q?n=20=EC=A0=84=ED=99=98=20=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 +++++++++++++------ .../java/com/eactive/ext/djb/DamoManager.java | 11 ++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e93aff1..04f7d2a 100644 --- a/README.md +++ b/README.md @@ -117,17 +117,24 @@ WAS 기동 시 콘솔(`catalina.out` 또는 stderr)에 다음과 같은 배너 ```java import com.eactive.ext.djb.DamoManager; -DamoManager damo = new DamoManager(); // 클래스 로딩 시점에 모드 감지 +// 기존 방식 유지 +DamoManager damo1 = new DamoManager(); -String cipher = damo.encrypt("hello"); // Base64 cipher text -String plain = damo.decrypt(cipher); // → "hello" -String h256 = damo.hash(DamoManager.SHA256, "password"); // SHA-256 base64 -String h512 = damo.hash(DamoManager.SHA512, "password"); // SHA-512 base64 +// singleton 필요 시 +DamoManager damo2 = DamoManager.getInstance(); -boolean fake = damo.isFakeMode(); // 디버깅 / 분기용 -int rc = damo.getReturnCode(); // 0: 성공, -1: 실패 +String cipher = damo2.encrypt("hello"); // Base64 cipher text +String plain = damo2.decrypt(cipher); // -> "hello" +String h256 = damo2.hash(DamoManager.SHA256, "password"); // SHA-256 base64 +String h512 = damo2.hash(DamoManager.SHA512, "password"); // SHA-512 base64 + +boolean fake = damo2.isFakeMode(); // 디버깅 / 분기용 +int rc = damo2.getReturnCode(); // 0: 성공, -1: 실패 ``` +`new DamoManager()` 와 `DamoManager.getInstance()` 를 함께 지원하므로, +기존 호출 코드를 변경하지 않고도 singleton 접근 방식으로 점진 전환할 수 있다. + | 메서드 | 운영 동작 | Fake 동작 | |---|---|---| | `String encrypt(String plain)` | `ScpEncB64(INI_FILE, "KEY1", plain, "UTF-8")` | `Base64.encode(plain.getBytes("UTF-8"))` | @@ -146,6 +153,7 @@ int rc = damo.getReturnCode(); // 0: 성공, -1: - `Base64Encode(byte[])`, `Base64Decode(String)` - `byteToHex(byte[])`, `byteArrayToHex(byte[])` - `checkHangul(char)` +- `getInstance()` (singleton 인스턴스 접근) - `getReturnCode()`, `getRevision()` ## 검증 diff --git a/src/main/java/com/eactive/ext/djb/DamoManager.java b/src/main/java/com/eactive/ext/djb/DamoManager.java index 3a956af..b968b33 100644 --- a/src/main/java/com/eactive/ext/djb/DamoManager.java +++ b/src/main/java/com/eactive/ext/djb/DamoManager.java @@ -63,6 +63,13 @@ public class DamoManager { private int nReturn; private final RealBridge bridge; + /** + * 기존 생성자 사용은 유지하면서, 공용 singleton 인스턴스가 필요한 경우 사용. + */ + public static DamoManager getInstance() { + return SingletonHolder.INSTANCE; + } + public DamoManager() { if (REAL_MODE) { this.bridge = new RealBridge(); @@ -78,6 +85,10 @@ public class DamoManager { } } + private static final class SingletonHolder { + private static final DamoManager INSTANCE = new DamoManager(); + } + public String getRevision() { return this.szRevision; }