본문 바로가기

Java

Java 문법 - 접근제한자 활용

@markdown

# Java 접근제한자

____


 - `static` : class 메소드이기 때문에 Object 생성과는 무관하다.

<pre><code class="java" style="font-size:14px">class Calculator {

static double pi = 3.141592;

static {

pi += 10;

System.out.println(pi);

}

    public Calculator() { 

    System.out.println("Calculator 생성자");

}

}

</code></pre>

 - `static` 영역이 메모리에 올라오며, `static` 영역에서는 `static`만 사용 가능하다.

 - `static` 블록이 먼저 수행되고, 생성자는 나중에 실행된다.

 - `static` 블록에서는 `static`이 아닌 변수는 사용할 수 없다.


 - `final` 필드 : 값 수정 불가(상수)

 - `final` 메소드 : 재정의(Override - 덮어쓰기) 불가

 - `final` 클래스 : 상속 불가


<pre><code class="java" style="font-size:14px">실행결과

13.141592

Calculator 생성자

</code></pre>


## Singleton 패턴

____

 - 싱글톤 : 하나의 애플리케이션 내에서 단 하나만 생성되는 객체

 - 만드는 방법 : 외부에서 `new` 생성자를 호출 할 수 없도록 막기위해 `private static`으로 생성


<pre><code class="java" style="font-size:14px">class Singleton { //싱글톤 객체

private static Singleton singleton; //메모리에 올라오지만, 외부에서 접근 불가

    static {

    singleton = new Singleton();

            //메모리 로드

    }

        private Singleton(){

    //외부에서 new 못하게 private 생성자

   }

  //외부에서 호출 할 수 있도록 public static

public static Singleton getSingleton(){

    //Singleton.getSingleton() 하면 싱글톤객체가 반환된다.

 return singleton;

    }

}

</code></pre>

<pre><code class="java" style="font-size:14px">public class SingletonTest {

public static void main(String[] args) {

Singleton s1 = Singleton.getSingleton();

Singleton s2 = Singleton.getSingleton();

System.out.println(s1 == s2);

}

}

</code></pre>

<pre><code class="java" style="font-size:14px">실행결과

s1 == s2는 하나의 싱글톤 객체에 접근하며, 같은 주소를 가지고 있으므로 true가 반환된다.

</code></pre>