1. 정적 변수
static = (변화 움직임이 없이) 고정된이란 뜻을 가지고 있는 단어이다.
static은 보통 변수나, 메소드 앞에 static키워드를 붙여서 사용하게 된다.
예시로 한번 정리해보겠다
public class Example {
String exam = "국어";
public static void main(String[] args) {
Example ex1 = new Example();
Example ex2 = new Example();
}
}
다음과 같은 코드가 있다. Example 클래스의 객체를 생성을 위와 같이 하게 된다면 객체 변수 exam을 저장하기 위해 객체마다 메모리를 별도로 할당하게 된다.
우리가 "국어"라는 값만 필요하고 추가적인 객체를 생성할 때도 항상 값이 변하지 않는다면 우리는 static키워드를 사용해 메모리에 이점을 얻을 수 있다.
public class Example {
static String exam = "국어";
public static void main(String[] args) {
Example ex1 = new Example();
Example ex2 = new Example();
}
}
변경된 코드이다 static을 붙임으로써 String exam이라는 객체는 메모리 할당을 한 번만 하게 되어 객체를 생성할 때마다 같은 주소를 참조하게 된다.
또 static을 사용하는 이유로 공유의 개념도 있다.
왜냐하면 static을 사용하게 되면 같은 곳의 메모리 주소를 바라보기 때문에 static변수의 값을 공유하게 되는 것이다.
보면 static count라는 정적 변수의 초기값은 0이다.
생성자에서 생성될 때마다 count값을 1씩 증가시키도록 했다.
각 객체의 count는 같은 주소 값을 가지고 있기 때문에 공유가 가능해서 값이 증가된다.
만약 static을 뺀다면?
각 객체마다 count변수가 각자 다른 주소로 할당돼서 값이 증가되지 않는다.
객체 변수는 항상 독립적인 값을 갖기 때문이다.
static 멤버 변수는 객체 내부가 아닌 별도의 공간에 생성되며 클래스 멤버라고 부릅니다.
Example 객체가 생성되기 전에 미리 생성되기 때문에 객체를 생성하지 않고도 사용할 수가 있습니다.
2. 정적 메서드
static method는 method에 static의 키워드만 붙이고 사용하는 것이 모형이다.
전 예제에 static method를 추가했다 count값을 리턴해주는 메서드이다.
클래스 안에 main메서드 안에서는 객체. 메서드명 , 클래스명. 메서드명을 통해 호출할 수 있게 됐다.
대신 제약이 있는데 static 메서드는 오직 static 멤버만 접근할 수 있습니다.
static 메서드는 객체가 생성되지 않은 상황에서도 사용이 가능하므로 객체에 속한 인스턴스 메서드 , 인스턴스 변수 등을 사용할 수 없습니다.
하지만 인스턴스 메서드는 static 멤버들을 모두 사용할 수 있습니다.
static 메서드는 this키워드를 사용할 수 없습니다.
왜냐하면 this는 호출하는 객체를 가리키는 레퍼런스인데. static메서드는 객체가 생성되지 않는 상황에서도 클래스 이름으로 호출이 가능하기 때문에 this를 사용할 수없습니다.
보통 static을 활용할 때는 전역 변수와 전역 함수를 만들 때 활용합니다.
프로그램을 만들 때 모든 클래스에서 공유하는 전역 변수나 모든 클래스에서 언제든지 호출할 수 있는 전역 함수를 만들어 사용할 필요가 있기 때문입니다.
3. 싱글톤 패턴 (singleton patton)
디자인 패턴 중 하나인 싱글톤 패턴은 static에 대한 개념이 있다면 쉽게 이해할 수 있습니다.
싱글톤은 단 하나만의 객체 생성을 강제하는 패턴인데 각 클래스에 대해 생성할 수 있는 객체를 하나로 강제하는 것입니다.
예시에서 Example 클래스의 생성자를 private으로 설정함으로써 외부 클래스에서 객체 생성을 함부로 할 수 없게 제어한 뒤 static메서드인 getInstance에서 만약 전역 변수 ex에 조건식을 사용해서 ex가 참조하는 값이 null이면 자신의 객체를 참조하게 해 주고 그 이후의 생성된 객체에 대해 선 처음 들어간 객체를 반환하는 식을 생성시켜준다.
외부 클래스에서 두 개의 객체를 만들었는데 그 값은 true이다
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 21일차 -37 (0) | 2020.03.24 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 20일차 -36 (0) | 2020.03.24 |
자바기반의 웹&앱 응용 SW개발자 양성과정 18일차 -34 (0) | 2020.03.19 |
자바기반의 웹&앱 응용 SW개발자 양성과정 18일차 -33 (0) | 2020.03.19 |
자바기반의 웹&앱 응용 SW개발자 양성과정 17일차 -32 (0) | 2020.03.18 |
댓글