์ถ์ฒ
ChatGPT
1. ์ฑ๊ธํค ํจํด Singleton Pattern
์ฑ๊ธํต ํจํด์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ๋๋ง ์์ฑํ๊ณ , ๊ทธ ์ธ์คํด์ค๋ฅผ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๋์์ธ ํจํด์ด๋ค. ์ฑ๊ธํค ๊ฐ์ฒด์ ๋ฉ์๋๋ ํด๋์ค ์ด๋ฆ์ ํตํด ์ฝ๊ฒ ํธ์ถํ ์ ์๋ค.
์์ ์ฝ๋
public class Singleton {
// ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ ์ ๋ณ์๋ก ์ ์ฅ
private static Singleton instance;
// private ์์ฑ์๋ฅผ ํตํด ์ธ๋ถ์์ ์ธ์คํด์ค ์์ฑ ๋ถ๊ฐ
private Singleton() {
// ์ด๊ธฐํ ์์
์ํ
}
// ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ์ ์ ๋ฉ์๋
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// ์ธ์คํด์ค ๋ฉ์๋
public void showMessage() {
System.out.println("Hello from Singleton instance!");
}
}
public class Main {
public static void main(String[] args) {
// ์ฑ๊ธํค ์ธ์คํด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ
Singleton.getInstance().showMessage();
}
}
์ค๋ช
Singleton ํด๋์ค
- instance๋ผ๋ ์ ์ ๋ณ์๋ฅผ ํตํด ์ฑ๊ธํค ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ค.
- getInstance() ๋ฉ์๋๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
- showMessage()๋ ์ธ์คํด์ค ๋ฉ์๋๋ก, ์ฑ๊ธํค ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
Main ํด๋์ค
- Singleton.getInstance().showMessage();๋ฅผ ํตํด ์ฑ๊ธํค ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ด๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ , ์ ์ ๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผํ๋ ๋ฐฉ์์ด๋ค.
2. ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ Static Factory Method
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ ์ ์ผ๋ก ์ ๊ณตํด ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ์บก์ํํ๋ค.
์์ ์ฝ๋
public class MyClass {
// ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋
public static MyClass createInstance() {
return new MyClass();
}
// ์ธ์คํด์ค ๋ฉ์๋
public void displayMessage() {
System.out.println("Instance method called!");
}
}
public class Main {
public static void main(String[] args) {
// ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑ
MyClass myObject = MyClass.createInstance();
// ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
myObject.displayMessage();
}
}
์ค๋ช
- MyClass ํด๋์ค:
- createInstance()๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก, MyClass์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค.
- displayMessage()๋ ์ธ์คํด์ค ๋ฉ์๋๋ก, ์์ฑ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- Main ํด๋์ค:
- MyClass.createInstance()๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , displayMessage() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
3. ์ธํฐํ์ด์ค์ ์ต๋ช ํด๋์ค ํ์ฉ
์๋ฐ์์ ์ธํฐํ์ด์ค์ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํด ์คํํฑ ๋ฉ์๋ ์์์ ํน์ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
์์ ์ฝ๋
interface Action {
void execute();
}
public class Main {
public static void main(String[] args) {
// ์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ฅผ ์ต๋ช
ํด๋์ค ํํ๋ก ์์ฑ
Action action = new Action() {
@Override
public void execute() {
System.out.println("Executing action!");
}
};
// ์คํํฑ ๋ฉ์๋์์ ์ต๋ช
ํด๋์ค์ ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
performAction(action);
}
// ์คํํฑ ๋ฉ์๋
public static void performAction(Action action) {
action.execute(); // ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
}
}
์ค๋ช
Action ์ธํฐํ์ด์ค:
- execute() ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ ์ก์ ์ ์ํํ๋๋ก ํ๋ค.
Main ํด๋์ค:
- performAction()์ ์คํํฑ ๋ฉ์๋๋ก, ์ธํฐํ์ด์ค ํ์ ์ ์ธ์๋ก ๋ฐ์ ํด๋น ์ธ์คํด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- new Action() { ... }๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ช ํด๋์ค ํํ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
4. ์๋ฐ 8 ์ดํ์ ๋๋ค ํํ์
์๋ฐ 8์์๋ ๋๋ค ํํ์์ ํตํด ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ๊ฐ๋จํ๊ฒ ํธ์ถํ ์ ์๋ค.
์์ ์ฝ๋
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
// ๋๋ค ํํ์์ ์ฌ์ฉํ์ฌ Consumer ์ธํฐํ์ด์ค ๊ตฌํ
Consumer<String> consumer = message -> System.out.println(message);
// ์คํํฑ ๋ฉ์๋์์ ๋๋ค ํํ์์ ํตํ ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
executeConsumer(consumer, "Hello with Lambda!");
}
// ์คํํฑ ๋ฉ์๋
public static void executeConsumer(Consumer<String> consumer, String message) {
consumer.accept(message); // ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ
}
}
์ค๋ช
Consumer ์ธํฐํ์ด์ค:
- accept(T t) ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ์ฃผ์ด์ง ์ ๋ ฅ์ ์๋นํ๋ ํจ์ํ ์ธํฐํ์ด์ค์ด๋ค.
Main ํด๋์ค:
- ๋๋ค ํํ์ message -> System.out.println(message)๋ฅผ ํตํด Consumer<String> ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
- executeConsumer() ๋ฉ์๋๋ฅผ ํตํด ๋๋ค ํํ์์ ์คํํ์ฌ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
5. ๋ฏธ๋ฆฌ ์ ์๋ ์ธ์คํด์ค ์ฌ์ฉ
ํด๋์ค ๋ด๋ถ์ ๋ฏธ๋ฆฌ ์ ์๋ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
์์ ์ฝ๋
public class Printer {
private static final Printer instance = new Printer();
private Printer() {
// ์์ฑ์ ์จ๊น
}
public static Printer getInstance() {
return instance;
}
public void print(String message) {
System.out.println(message);
}
}
public class Main {
public static void main(String[] args) {
// ๋ฏธ๋ฆฌ ์ ์๋ ์ธ์คํด์ค๋ฅผ ํตํด ๋ฉ์๋ ํธ์ถ
Printer.getInstance().print("Printing using pre-defined instance!");
}
}
์ค๋ช
Printer ํด๋์ค:
- instance๋ผ๋ ์ ์ ๋ณ์๋ฅผ ํตํด ํด๋์ค์ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ ์ฅํฉ๋๋ค.
- getInstance() ๋ฉ์๋๋ฅผ ํตํด ๋ฏธ๋ฆฌ ์ ์๋ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๊ณ , print() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
Main ํด๋์ค:
- Printer.getInstance().print(...);๋ฅผ ํตํด ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OOP] ํด๋์ค์ ๊ฐ์ฒด์ ๊ด๊ณ (0) | 2024.08.01 |
---|---|
[Java] Static ํค์๋ ์ฌ์ฉ ์ ์ฃผ์ํด์ผ ํ ์ (0) | 2024.08.01 |
[Java] ์ ์คํ ํฑ ๋ฉ์๋์์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ๊น (0) | 2024.08.01 |
[Java] ์ ๋ค๋ฆญ๊ณผ ์์ผ๋์นด๋ (0) | 2024.08.01 |
[JVM] HotSpot compilation (0) | 2024.07.31 |