정적(Static) : 고정된 이란 뜻인 static은 클래스에 고정된 멤버로
객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
정적 멤버는 객체에 속한 멤버가 아니라 클래스에 소속된 멤버이기 때문에
클래스 맴버라고도 한다.
1. 정적 멤버 선언
정적 필드, 정적 메소드를 선언하는 방법은 필드와 메소드 선언 시 static 키워드를 추가적으로 붙이면 된다,
public class 클래스 {
//정적 필드
static 타입 필드 [= 초기값]
//정적 메소드
static 리턴타입 메소드( 매개변수선언1, . . . ) { . . . }
정적 필드와 정적 메소드는 클래스에 고정된 멤버이기 때문에. 클래스 로더가 클래스를 로딩해서
메소드 메모리 영역에 적재할 때, 클래스별로 관리된다.
따라서 클래스의 로딩이 끝나면 바로 사용할 수 있다.
2. 정적 멤버 사용
클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있다.
클래스 이름과 함께 . 연산자로 접근할 수 있다.
ex) 사용예시
Calculator
public class Calculator {
static double pi = 3.14159;
static int plus(int x, int y) {
return x + y;
}
static int minus(int x, int y) {
return x - y;
}
}
CalculatorTest
public class CalculatorExample {
public static void main(String[] args) {
double result1 = 10 * 10 * Calculator.pi;
int result2 = Calculator.plus(10, 5);
int result3 = Calculator.minus(10, 5);
System.out.println("result1 : "+ result1);
System.out.println("result2 : "+ result2);
System.out.println("result3 : "+ result3);
}
}
싱글톤 패턴
디자인 패턴 중 가장 많이 사용하는 패턴의 종류로 여러 클래스가 하나의 공통 변수를 중재할 때 많이 사용된다. 싱글턴의 가장 큰 특징은 메모리상에 하나의 인스턴스 만을 갖는 것이다.
즉, 싱들톤 패턴은 '하나'의 인스턴스만 생성하여 사용하고 공유하는 디자인 패턴이다.
Singleton Pattern
A class 의 값을 B class 가 필요로 한다면, Main class 에서 A class 의 값을 get 하고 B class 에 set 해야한다. 이때, 반드시 Main을 거치지 않고 (Main 몰래) 값을 전달하고 받는 패턴이 Singletone Pattern
이다.
Main class 가 아닌 Singletone class를 만들어서 값을 주고 받는다. Singletone class 의 멤버는 다른 클래스들에 의해 공유되어야 하기 때문에, 여러개의 객체가 생성되면 안된다. 그렇기 때문에 Singletone class 객체는 여러개가 생성되지 않고 딱 하나의 인스턴스만 생성되어 heap 메모리에 생성되고 나머지 클래스들이 이를 공유한다. Singletone이 중재자가 되어, 하나의 인스턴스를 사용해 값을 주고 받는다.
참고블로그 : https://qkrrudtjr954.github.io/design%20pattern/2017/11/24/singletone-pattern.html
Singleton.java
class Singleton{
private static Singleton instance = null;
private Singleton{
// default constructor
}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
위는 싱글톤의 기본 클래스이다. instance
(객체) 는 static
으로 선언되어 객체화 없이 접근이 가능하다. 하지만 private
이기 때문에 외부에서 new
로 선언할 수 없다.
Sington 객체 접근
Singletone 객체는 Singletone class 내부에 선언된 getInstance()
메소드로만 접근할 수 있다. 메소드 getInstance()
를 사용해서 생성된 인스턴스가 없다면 인스턴스를 생성해서 리턴하고, 이미 생성된 인스턴스가 있다면 멤버 인스턴스를 리턴한다.
위와 같은 방법을 통해 메모리에는 단 하나의 Singletone 객체만 생성되고 사용되며, 객체 내부의 멤버들이 여러 클래스에 의해 공유될 수 있다.
'Java' 카테고리의 다른 글
[자바] 배열(array) (0) | 2022.09.26 |
---|---|
[자바] hasNext() 와 next() 메서드의 차이는??? (1) | 2022.09.26 |
[Java] GET,SET을 사용하는 이유 (0) | 2022.09.25 |
[자바] 생성자(constructor) (0) | 2022.09.25 |
[자바] 인스턴스(Instance)란? (0) | 2022.09.25 |