싱글톀 νŒ¨ν„΄(singleton pattern)

2023. 9. 12. 17:11Β· π™Έπšƒ
λͺ©μ°¨
  1. μ‹±κΈ€ν†€μ΄λž€?
  2. μ‹±κΈ€ν†€μ˜ νŠΉμ§•
  3. μ‚¬μš©ν•˜λŠ” 이유
  4. μ‚¬μš©ν•˜λŠ” κ³³
  5. μž₯단점
  6. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 싱글톀 νŒ¨ν„΄
  7. μžλ°”μ—μ„œμ˜ 싱글톀 νŒ¨ν„΄
  8. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° λͺ¨λ“ˆ 
  9. 싱글톀 νŒ¨ν„΄μ˜ 단점
  10. μ˜μ‘΄μ„± μ£Όμž… (DI, Dependency Injection)
  11. μ˜μ‘΄μ„± μ£Όμž…μ˜ μž₯점
  12. μ˜μ‘΄μ„± μ£Όμž…μ˜ 단점
  13. μ˜μ‘΄μ„± μ£Όμž… 원칙
λ°˜μ‘ν˜•

μ‹±κΈ€ν†€μ΄λž€?

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©λ˜λŠ” λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ,

ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— 였직 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ κ°€μ§€λŠ” νŒ¨ν„΄μ΄λ‹€.

 

 

 

 

μ‹±κΈ€ν†€μ˜ νŠΉμ§•

1️⃣ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ 단 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μƒμ„±λœλ‹€.

2️⃣ μƒμ„±λœ μΈμŠ€ν„΄μŠ€λŠ” μ „μ—­ λ³€μˆ˜λ‘œ μ €μž₯λ˜μ–΄ μ–΄λ””μ„œλ“  μ ‘κ·Όν•  수 μžˆλ‹€.

3️⃣ μƒμ„±μžλŠ” private으둜 μ„€μ •λ˜μ–΄ μ™ΈλΆ€μ—μ„œ 직접 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.

4️⃣ μ™ΈλΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” public λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

 

 

 

 

μ‚¬μš©ν•˜λŠ” 이유

β‘  μžμ› 관리 : λ©”λͺ¨λ¦¬ μΈ‘λ©΄

졜초 ν•œ 번의 new μ—°μ‚°μžλ₯Ό ν†΅ν•΄μ„œ κ³ μ •λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μΆ”ν›„ ν•΄λ‹Ή 객체에 μ ‘κ·Όν•  λ•Œ λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό λ°©μ§€ν•  수 μžˆλ‹€.

 

 

β‘‘ 데이터 κ³΅μœ κ°€ 쉽닀.

싱글톀 μΈμŠ€ν„΄μŠ€κ°€ μ „μ—­μœΌλ‘œ μ‚¬μš©λ˜λŠ” μΈμŠ€ν„΄μŠ€μ΄κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ 클래슀의 μΈμŠ€ν„΄μŠ€λ“€μ΄ μ ‘κ·Όν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

 

 

μ‚¬μš©ν•˜λŠ” κ³³

μ„€μ • 정보, λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°, λ‘œκΉ…

 

 

 

 

μž₯단점

μž₯점

ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ 놓고 ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€λ₯Ό λ‹€λ₯Έ λͺ¨λ“ˆλ“€μ΄ κ³΅μœ ν•˜λ©° μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ“œλŠ” λΉ„μš©μ΄ 쀄어든닀.

 

 

단점

μ˜μ‘΄μ„±μ΄ λ†’μ•„μ§„λ‹€.

 

 

 

 

 

 

 

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 싱글톀 νŒ¨ν„΄

javascriptμ—μ„œλŠ” λ¦¬ν„°λŸ΄ {} λ˜λŠ” new Object둜 객체λ₯Ό μƒμ„±ν•˜κ²Œ 되면 이 자체만으둜 싱글톀 νŒ¨ν„΄μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.

μ™œλƒν•˜λ©΄ μ΄λ ‡κ²Œ 객체λ₯Ό λ§Œλ“€κ²Œ 되면 λ‹€λ₯Έ μ–΄λ–€ 객체와도 κ°™μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

const obj = {
  a: 27
}

const obj2 = {
  a: 27
}

console.log(obj === obj2)
// false

objκ³Ό obj2λŠ” λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§„λ‹€.

μœ„ μ†ŒμŠ€λ„ μ–΄λŠ 정도 싱글톀 νŒ¨ν„΄μ΄λΌ λ³Ό 수 μžˆμ§€λ§Œ, 

μ‹€μ œ 싱글톀 νŒ¨ν„΄μ€ λ°‘κ³Ό 같이 κ΅¬μ„±λœλ‹€.

 

 

 

class Singleton {	// Singleton 클래슀λ₯Ό μ •μ˜
  constructor(){	// 클래슀의 μƒμ„±μž ν•¨μˆ˜λ₯Ό μ •μ˜, μƒμ„±μž ν•¨μˆ˜λŠ” 객체가 생성될 λ•Œ ν˜ΈμΆœλœλ‹€.
    if(!Singleton.instance){	// μƒμ„±μž ν•¨μˆ˜ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€κ°€ 이미 μƒμ„±λ˜μ—ˆλŠ”μ§€ 확인
      Singleton.instance = this
    }
    return Singleton.instance
  }
  getInstance(){	// ν˜„μž¬μ˜ Singleton μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€.
    return this
  }
}

const a = new Singleton()
const b = new Singleton()
console.log(a === b)
// true 

// 두 λ³€μˆ˜κ°€ λ™μΌν•œ 객체λ₯Ό 가리킨닀. 
// Singleton νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ―€λ‘œ 'a'와 'b'λŠ” λ™μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•œλ‹€.

 

constructor

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œ λ˜λŠ” ν•¨μˆ˜μ΄λ‹€.

 

 

 

 

 

 

 

μžλ°”μ—μ„œμ˜ 싱글톀 νŒ¨ν„΄

// Singleton 클래슀 : μ™ΈλΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€ν™” λ˜μ§€ μ•ŠλŠ”λ‹€.
// 였직 singleInstanceHolder(λ‚΄λΆ€μ˜ 정적 쀑첩 클래슀)λ₯Ό ν†΅ν•΄μ„œλ§Œ μƒμ„±ν•œλ‹€.

class Singleton{
    private static class singleInstanceHolder {
        private static final Singleton INSTANCE = new Singleton();
        // INSTANCE : 정적 μƒμˆ˜ ν•„λ“œ β†’ Singleton 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 보관함
    }
    public static Singleton getInstance(){
        return singleInstanceHolder.INSTANCE;
    }
    // getInstance : singleInstanceHolder 클래슀 λ‚΄μ˜ INSTANCE ν•„λ“œλ₯Ό λ°˜ν™˜ν•œλ‹€.
    // κ·Έλž˜μ„œ 이 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ 항상 λ™μΌν•œ μΈμŠ€ν„΄μŠ€κ°€ λ°˜ν™˜λœλ‹€.
}

public class HelloWorld{
     public static void main(String []args){
        Singleton a = Singleton.getInstance();
        Singleton b = Singleton.getInstance();
        System.out.println(a.hashCode());	// 2060468723
        System.out.println(b.hashCode());	// 2060468723
        if(a==b){
            System.out.println("true");		// true
        }
     }
}

쀑첩 클래슀 (nested class) : ν•˜λ‚˜μ˜ 클래슀 내에 λ‹€λ₯Έ 클래슀λ₯Ό μ •μ˜ν•˜λŠ” κ°œλ…

 

 

 

 

 

 

λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° λͺ¨λ“ˆ 

const URL = 'mongodb://localhost:27017/kundolapp'
const createConnection = url => ({"url" : url})
// μ£Όμ–΄μ§„ URL을 λ°›μ•„μ„œ 객체둜 λž˜ν•‘ν•˜λŠ” ν•¨μˆ˜, λ‚˜μ€‘μ— DB μ—°κ²° 객체λ₯Ό 생성할 λ•Œ μ‚¬μš©λ¨

class DB{
  constructor(url){
    if(!DB.instance){
      DB.instance = createConnection(url)
    }
    return DB.instance
  }
  connect(){
    return this.instance
  }
}
const a = new DB(URL)
const b = new DB(URL)
console.log(a === b)
//true

JavaScriptλ₯Ό μ‚¬μš©ν•˜μ—¬ MongoDB λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ 연결을 κ΄€λ¦¬ν•˜λŠ” λ‹¨μˆœν•œ 클래슀λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ½”λ“œμ΄λ‹€.

싱글톀 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ DB 연결을 κ΄€λ¦¬ν•˜λ©°, μ—¬λŸ¬ 객체가 같은 연결을 κ³΅μœ ν•  수 μžˆλ„λ‘ ν•œλ‹€.

 

 

 

 

 

 

 

싱글톀 νŒ¨ν„΄μ˜ 단점

싱글톀 νŒ¨ν„΄μ€ TDDλ₯Ό ν•  λ•Œ 걸림돌이 λœλ‹€. (TDDλ₯Ό λͺ¨λ₯Έλ‹€λ©΄ 밑을 λ³΄μ‹œμ˜€.)

TDDλ₯Ό ν•  λ•Œ λ‹¨μœ„ν…ŒμŠ€νŠΈλ₯Ό 주둜 ν•˜λŠ”λ°,

λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” ν…ŒμŠ€νŠΈκ°€ μ„œλ‘œ 독립적이어야 함 & ν…ŒμŠ€νŠΈλ₯Ό μ–΄λ–€ μˆœμ„œλ‘œλ“  μ‹€ν–‰ν•  수 μžˆμ–΄μ•Όν•¨

 

❗BUT❗

 

싱글톀 νŒ¨ν„΄μ€ 미리 μƒμ„±λœ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 기반으둜 κ΅¬ν˜„ν•˜λŠ” νŒ¨ν„΄μ΄λ―€λ‘œ, 각 ν…ŒμŠ€νŠΈλ§ˆλ‹€ '독립적인' μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€κΈ°κ°€ μ–΄λ ΅λ‹€.

 

 

 

 

TDDλž€? (Test Driven Development, ν…ŒμŠ€νŠΈ 주도 개발) 

https://hanamon.kr/tdd%EB%9E%80-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A3%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C/

β‘  μš”κ΅¬μ‚¬ν•­μ„ κ²€μ¦ν•˜λŠ” μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„± (Red)

β‘‘ κ·Έ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όν•˜κΈ° μœ„ν•œ μ΅œμ†Œν•œμ˜ μ½”λ“œ 생성 (Green)

β‘’ μž‘μ„±ν•œ μ½”λ“œλ₯Ό ν‘œμ€€μ— λ§žλ„λ‘ λ¦¬νŒ©ν† λ§ (Blue)

β‘  ~ β‘’ 을 λ°˜λ³΅ν•˜λŠ” 것이닀.

 

 

3λ‹¨κ³„μ˜ 개발주기λ₯Ό κ°–λŠ”λ‹€. 

1️⃣ Red 단계 : μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±

2️⃣ Green 단계 : μ„±κ³΅ν•˜κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό μˆ˜μ • 

3️⃣ Blue 단계 : 쀑볡 μ½”λ“œλ₯Ό μ œκ±°ν•˜λŠ” λ“±μ˜ λ¦¬νŒ©ν† λ§ μˆ˜ν–‰

 

 

 

 

 

 

 

μ˜μ‘΄μ„± μ£Όμž… (DI, Dependency Injection)

 

 

https://velog.io/@tiger/CS-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85

 

λ˜ν•œ, 싱글톀 νŒ¨ν„΄μ€ λͺ¨λ“ˆ κ°„μ˜ 결합을 κ°•ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€λŠ” 단점이 μžˆλ‹€.

μ΄λ•Œ μ˜μ‘΄μ„± μ£Όμž…μ„ 톡해 λͺ¨λ“ˆκ°„μ˜ 결합을 쑰금 더 λŠμŠ¨ν•˜κ²Œ λ§Œλ“€μ–΄ ν•΄κ²°ν•  수 μžˆλ‹€.

 

 

μœ„ 그림처럼 메인 λͺ¨λ“ˆμ΄ '직접' λ‹€λ₯Έ ν•˜μœ„ λͺ¨λ“ˆμ— λŒ€ν•œ μ˜μ‘΄μ„±μ„ μ£ΌκΈ°λ³΄λ‹€λŠ” 쀑간에 μ˜μ‘΄μ„± μ£Όμž…μžκ°€ 이 뢀뢄을 κ°€λ‘œμ±„ 메인 λͺ¨λ“ˆμ΄ 'κ°„μ ‘'적으둜 μ˜μ‘΄μ„±μ„ μ£Όμž…ν•˜λŠ” 방식이닀.

μ΄λ ‡κ²Œ ν•˜λ©΄ 메인λͺ¨λ“ˆμ€ ν•˜μœ„ λͺ¨λ“ˆμ— λŒ€ν•œ μ˜μ‘΄μ„±μ΄ λ–¨μ–΄μ§€κ²Œ λœλ‹€.

 

이λ₯Ό λ””μ»€ν”Œλ§μ΄ λœλ‹€κ³  ν•œλ‹€.

 

 

 

 

 

μ˜μ‘΄μ„± μ£Όμž…μ˜ μž₯점

1οΈβƒ£ν…ŒμŠ€νŒ…ν•˜κΈ° 쉽고 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κΈ°λ„ μˆ˜μ›”ν•¨

μ™œλƒλ©΄ λͺ¨λ“ˆλ“€μ„ μ‰½κ²Œ ꡐ체할 수 μžˆλŠ” ꡬ쑰가 λ˜μ—ˆκΈ° λ•Œλ¬Έμ—

 

(λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ : μ–΄λ–€ μ‹œμŠ€ν…œ, 데이터, μ†Œν”„νŠΈμ›¨μ–΄, μ„œλΉ„μŠ€ 등을 λ‹€λ₯Έ μ‹œμŠ€ν…œμœΌλ‘œ μ΄μ „ν•˜κ±°λ‚˜ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” ν”„λ‘œμ„ΈμŠ€)

 

2οΈβƒ£μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ˜μ‘΄μ„± λ°©ν–₯이 μΌκ΄€λœλ‹€.

3οΈβƒ£μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‰½κ²Œ μΆ”λ‘ ν•  수 μžˆλ‹€.

4️⃣λͺ¨λ“ˆκ°„μ˜ 관계듀이 쑰금 더 λͺ…확해짐

μ™œλƒλ©΄ κ΅¬ν˜„ν•  λ•Œ 좔상화 λ ˆμ΄μ–΄λ₯Ό λ„£κ³  이λ₯Ό 기반으둜 κ΅¬ν˜„μ²΄λ₯Ό λ„£μ–΄μ£ΌκΈ° λ•Œλ¬Έμ—

 

 

 

 

μ˜μ‘΄μ„± μ£Όμž…μ˜ 단점

λͺ¨λ“ˆμ΄ λΆ„λ¦¬λ˜λ―€λ‘œ 클래슀 μˆ˜κ°€ λŠ˜μ–΄λ‚˜ λ³΅μž‘μ„± 증가 & μ•½κ°„μ˜ λŸ°νƒ€μž„ νŒ¨λ„ν‹°

 

 

 

 

μ˜μ‘΄μ„± μ£Όμž… 원칙

μƒμœ„ λͺ¨λ“ˆμ€ ν•˜μœ„ λͺ¨λ“ˆμ—μ„œ μ–΄λ– ν•œ 것도 κ°€μ Έμ˜€μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

λ˜ν•œ λ‘˜ λ‹€ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•˜κ³ , μ΄λ•Œ μΆ”μƒν™”λŠ” μ„ΈλΆ€ 사항에 μ˜μ‘΄ν•˜μ§€ 말아야 ν•œλ‹€.

 

 

 

 

 

 

 

 

μ°Έκ³ 

https://product.kyobobook.co.kr/detail/S000001834833

 

면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ | 주홍철 - ꡐ보문고

면접을 μœ„ν•œ CS 전곡지식 λ…ΈνŠΈ |

product.kyobobook.co.kr

 

https://velog.io/@wngud4950/TDD%EB%9E%80

 

TDD, ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ΄λž€?

TDDλž€? TDDλž€ Test Driven Develpment의 μ•½μžλ‘œ 'ν…ŒμŠ€νŠΈ 주도 개발' 이라고 ν•œλ‹€. 반볡 ν…ŒμŠ€νŠΈλ₯Ό μ΄μš©ν•œ μ†Œν”„νŠΈμ›¨μ–΄ λ°©λ²•λ‘ μœΌλ‘œ, μž‘μ€ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜κ³  이λ₯Ό ν†΅κ³Όν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λŠ”

velog.io

 

λ°˜μ‘ν˜•

'π™Έπšƒ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[WINDOWS] CPU μ½”μ–΄ μ“°λ ˆλ“œ 수 ν™•μΈν•˜κΈ°  (0) 2023.10.13
TCP와 UDP의 차이  (0) 2023.10.06
ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… / Iaas / Paas / Saas  (0) 2023.08.24
Oracleκ³Ό MySQL의 차이 및 κ°œλ…  (0) 2023.08.24
REST API / RESTλž€ / RESTful  (0) 2023.08.21
  1. μ‹±κΈ€ν†€μ΄λž€?
  2. μ‹±κΈ€ν†€μ˜ νŠΉμ§•
  3. μ‚¬μš©ν•˜λŠ” 이유
  4. μ‚¬μš©ν•˜λŠ” κ³³
  5. μž₯단점
  6. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 싱글톀 νŒ¨ν„΄
  7. μžλ°”μ—μ„œμ˜ 싱글톀 νŒ¨ν„΄
  8. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° λͺ¨λ“ˆ 
  9. 싱글톀 νŒ¨ν„΄μ˜ 단점
  10. μ˜μ‘΄μ„± μ£Όμž… (DI, Dependency Injection)
  11. μ˜μ‘΄μ„± μ£Όμž…μ˜ μž₯점
  12. μ˜μ‘΄μ„± μ£Όμž…μ˜ 단점
  13. μ˜μ‘΄μ„± μ£Όμž… 원칙
'π™Έπšƒ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [WINDOWS] CPU μ½”μ–΄ μ“°λ ˆλ“œ 수 ν™•μΈν•˜κΈ°
  • TCP와 UDP의 차이
  • ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… / Iaas / Paas / Saas
  • Oracleκ³Ό MySQL의 차이 및 κ°œλ…
ν•΄λ²„λ‹ˆ
ν•΄λ²„λ‹ˆ
κ°œλ°œν•˜λ©΄μ„œ 배운 것듀을 κΈ°λ‘ν•©λ‹ˆλ‹€.
ν•΄λ²„λ‹ˆ
DevNight
ν•΄λ²„λ‹ˆ
전체
였늘
μ–΄μ œ
  • 전체보기 (194)
    • πšπšŽπšπš›πš˜πšœπš™πšŽπšŒπšπš’πšŸπšŽπšœ (5)
      • πšƒπš’πš™πšœ (2)
      • 회고 (3)
      • μ‹€μˆ˜ λͺ¨μŒμ§‘ (0)
    • π™Ώπš›πš˜πš“πšŽπšŒπš (3)
      • π™Ίπ™Ύπš‚πšƒπ™° πš†πšŽπš‹ π™Ώπš›πš˜πš“πšŽπšŒπš (2)
    • π™Ώπš›πš˜πšπš›πšŠπš–πš–πš’πš—πš π™»πšŠπš—πšπšžπšŠπšπšŽ (16)
      • π™·πšƒπ™Όπ™» (6)
      • π™²πš‚πš‚ (1)
      • π™Ήπ™°πš…π™° (1)
      • π™ΉπšŠπšŸπšŠπš‚πšŒπš›πš’πš™πš (7)
      • πšƒπš’πš™πšŽπš‚πšŒπš›πš’πš™πš (1)
    • π™±πšŠπšŒπš”πšŽπš—πš (4)
      • πš‚πš™πš›πš’πš—πš π™±πš˜πš˜πš (0)
      • Spring (2)
      • 파일 처리 (1)
      • π™Ήπš‚π™Ώ (1)
    • π™΅πš›πš˜πš—πšπšŽπš—πš (5)
      • 𝚁𝚎𝚊𝚌𝚝 (3)
      • πš…πšžπšŽ.πš“πšœ (2)
    • π™°πš•πšπš˜πš›πš’πšπš‘πš– (32)
      • π™Ώπš›πš˜πšπš›πšŠπš–πš–πšŽπš›πšœ (6)
      • π™±πšŠπšŽπš”πš“πš˜πš˜πš— (24)
    • π™³π™°πšƒπ™°π™±π™°πš‚π™΄ (16)
      • πš‚πš€π™» (1)
      • π™Ώπš˜πšœπšπšπš›πšŽπš‚πš€π™» (1)
      • π™Όπš’πš‚πš€π™» (3)
      • π™Ύπš›πšŠπšŒπš•πšŽ (0)
      • π™Ώπš›πš˜πšπš›πšŠπš–πš–πšŽπš›πšœ (1)
    • π™³πšŽπšŸπšŽπš•πš˜πš™πš–πšŽπš—πš πšƒπš˜πš˜πš•πšœ (4)
      • π™Έπš—πšπšŽπš•πš•πš’π™Ή (0)
      • π™΄πšŒπš•πš’πš™πšœπšŽ (1)
      • πš…πš‚π™²πš˜πšπšŽ (0)
      • π™±πšžπš’πš•πš πš‚πšŒπš›πš’πš™πšπšœ (1)
    • πš…πšŽπš›πšœπš’πš˜πš— π™²πš˜πš—πšπš›πš˜πš• (0)
      • π™Άπš’πš (0)
      • π™Άπš’πšπ™·πšžπš‹ (0)
      • πš‚πš…π™½ (0)
    • 배포 및 인프라 (2)
      • π™°πš†πš‚ (2)
    • π™Έπšƒ (15)
      • πš‚πš…π™½ (3)
    • π™ΉπšŠπšŸπšœπš‚πšŒπš›πš’πš™πš (4)
      • πš…πšžπšŽ.πš“πšœ (0)
    • πš†πšŽπš‹ (9)
      • 𝚊𝚠𝚜 (0)
      • π™·πšƒπ™Όπ™» (0)
      • π™²πš‚πš‚ (2)
    • π™ΉπšŠπšŸπšŠ (56)
      • πš‚πš™πš›πš’πš—πš π™±πš˜πš˜πš (3)
    • π™Άπš’πšπ™·πšžπš‹ (10)
    • ν™˜κ²½μ„€μ • (10)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

νƒœκ·Έ

  • μžλ°”μ˜μ •μ„
  • php
  • React
  • μžλ°”μŠ€ν¬λ¦½νŠΈ
  • web
  • ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
  • μ˜€λΈ”μ™„
  • λ°±μ€€
  • html
  • 이클립슀
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • JavaScript
  • Java
  • μ½”λ”©ν…ŒμŠ€νŠΈ
  • μ•Œκ³ λ¦¬μ¦˜
  • database
  • spring
  • PostgreSQL
  • μžλ°”
  • λ°°μ—΄

졜근 λŒ“κΈ€

졜근 κΈ€

hELLO Β· Designed By μ •μƒμš°.v4.3.0
ν•΄λ²„λ‹ˆ
싱글톀 νŒ¨ν„΄(singleton pattern)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.