λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

STUDY/JAVA

JAVA - 정적멀버와 static & 싱글톀(singleton)

λ°˜μ‘ν˜•
정적멀버 ?
    ν΄λž˜μŠ€μ— κ³ μ •λœ 멀버
    객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλŠ” ν•„λ“œμ™€ λ©”μ†Œλ“œ

 

1. 정적멀버 μ„ μ–Έ

  μ •μ ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•˜λŠ” 방법은 ν•„λ“œμ™€ λ©”μ†Œλ“œ μ„ μ–Έ μ‹œ static ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ£Όλ©΄ λœλ‹€.

public class 클래슀{
 static νƒ€μž… ν•„λ“œ [= μ΄ˆκΈ°κ°’];
 
 static 리턴 νƒ€μž… λ©”μ†Œλ“œ ( λ§€κ°œλ³€μˆ˜ μ„ μ–Έ, ...){...}

정적 ν•„λ“œμ™€ λ©”μ†Œλ“œλŠ” ν΄λž˜μŠ€μ— κ³ μ • -> 클래슀 λ³„λ‘œ 관리 됨

ⓐ ν•„λ“œλ₯Ό μ„ μ–Έ ν•  λ•Œ νŒλ‹¨κΈ°μ€€

    κ°μ²΄λ§ˆλ‹€ 가지고 μžˆμ–΄μ•Ό ν•  데이터 = μΈμŠ€ν„΄μŠ€ ν•„λ“œ ex) static double pi = 3.141592;

    곡용적인 데이터 = 정적 ν•„λ“œ ex) String color;

β“‘ λ©”μ†Œλ“œλ₯Ό μ„ μ–Έ ν•  λ•Œ νŒλ‹¨κΈ°μ€€

    μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ΄μš©ν•΄μ„œ μ‹€ν–‰ ν•΄μ•Ό ν•˜λ©΄ = μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ

    μΈμŠ€ν„΄μŠ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 정적 λ©”μ†Œλ“œ

 

2. 정적멀버 μ‚¬μš©

ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬λ‘œ λ‘œλ”©λ˜λ©΄ 정적 멀버λ₯Ό λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλŠ”λ°, 클래슀 이름과 ν•¨κ»˜ .(λ„νŠΈ μ—°μ‚°μž)둜 μ ‘κ·Ό

class.field;
class.method(values, ...);

μ •μ ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œλŠ” μ›μΉ™μ μœΌλ‘œλŠ” 클래슀 μ΄λ¦„μœΌλ‘œ μ ‘κ·Ό but, 객체 μ°Έμ‘° λ³€μˆ˜λ‘œλ„ μ ‘κ·Ό κ°€λŠ₯(κ²½κ³  ν‘œμ‹œ 뜸)

 

3. 정적 μ΄ˆκΈ°ν™” 블둝 

정적 ν•„λ“œλŠ” ν•„λ“œ μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°κ°’μ„ μ£ΌλŠ” 것이 보톡

  β€» 계산이 ν•„μš”ν•œ μ΄ˆκΈ°ν™” μž‘μ—…μΌ 경우 정적블둝(static block)을 μ‚¬μš©

static{
...
}

  * 정적블둝은 ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬λ‘œ λ‘œλ”©λ  λ•Œ μžλ™μ μœΌλ‘œ μ‹€ν–‰(ν•œ 클래슀 내에 μ—¬λŸ¬κ°œκ°€ μ„ μ–Έλ˜μ–΄λ„ 상관x)

infoλŠ” μ΄ˆκΈ°ν™” x static블둝을 μ΄μš©ν•΄μ„œ μ΄ˆκΈ°κ°’ μ„€μ •

 

4. 정적 λ©”μ†Œλ“œμ™€ 블둝 μ„ μ–Έ μ‹œ μ£Όμ˜ν•  점

객체가 없어도 μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—

    ⓐ 내뢀에 μΈμŠ€ν„΄μŠ€ ν•„λ“œλ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 x

    β“‘ this μ‚¬μš© x

 μΈμŠ€ν„΄μŠ€ 멀버λ₯Ό μ‚¬μš©ν•˜κ³  μ‹ΆμœΌλ©΄ 객체λ₯Ό λ¨Όμ € 생성 ν•œ λ’€ μ°Έμ‘° λ³€μˆ˜λ‘œ μ ‘κ·Όν•΄μ•Ό 함.

 

5.  싱글톀(singleton)

singleton ?
    단 ν•˜λ‚˜μ˜ 객체만 생성

 β“ 싱글톀을 λ§Œλ“œλ €λ©΄ μ™ΈλΆ€μ—μ„œ new μ—°μ‚°μžλ‘œ 호좜(=객체 생성) ν•˜λŠ”κ±Έ λ§‰μ•„μ€˜μ•Ό 함 => private μ ‘κ·Ό μ œν•œμž

 β“‘ μžμ‹ μ˜ νƒ€μž…μΈ 정적 ν•„λ“œλ₯Ό ν•˜λ‚˜ μ„ μ–Έν•˜κ³  μžμ‹ μ˜ 객체λ₯Ό 생성해 μ΄ˆκΈ°ν™” 함

 β“’ 정적 ν•„λ“œλ„ private μ ‘κ·Όμ œν•œμžλ₯Ό λΆ™μ—¬ μ™ΈλΆ€μ—μ„œ ν•„λ“œκ°’μ„ λ³€κ²½ν•˜μ§€ λͺ»ν•˜λ„둝 함

 public class 클래슀 {
  //μ •μ ν•„λ“œ
private static 클래슀 singleton = new 클래슀();

  //μƒμ„±μž
private 클래슀() {}

  //정적 λ©”μ†Œλ“œ
static 클래슀 getInstance() {
return singleton;
   }
}

 * μ™ΈλΆ€μ—μ„œ 객체λ₯Ό μ–»λŠ” μœ μΌν•œ 방법 = getInstance() λ©”μ†Œλ“œ 호좜

 

6. final ν•„λ“œμ™€ μƒμˆ˜ 

final ?
   final ν•„λ“œλŠ” μ΄ˆκΈ°κ°’μ΄ μ§€μ •λ˜λ©΄ μ΅œμ’…μ μΈ 값이 λ˜μ–΄μ„œ 더이상 λ³€κ²½ν•  수 x

final ν•„λ“œμ˜ μ΄ˆκΈ°κ°’ μ„€μ • 방법

  ⓐ ν•„λ“œ μ„ μ–Έ μ‹œ μ„€μ •

  β“‘ μƒμ„±μžμ—μ„œ μ£ΌλŠ” 방법

 

μƒμˆ˜(static final) ? 
    λΆˆλ³€μ˜ κ°’ ( π, μ§€κ΅¬μ˜ 무게 λ“±)

 μƒμˆ˜λŠ” static 이자 final 이여야 함

 μƒμˆ˜ 이름은 λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 κ΄€λ‘€

λ°˜μ‘ν˜•