staic ๋ณ์
class Person {
String name = "์ด";
}
public class Main {
public static void main(String[] args){
Person person1 = new Person();
Person person2 = new Person();
}
}
Person ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ฒด๋ง๋ค ๊ฐ์ฒด ๋ณ์ name์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ณ๋๋ก ํ ๋น๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ name ๊ฐ์ ์ด๋ค ๊ฐ์ฒด๋ ๊ฐ์ ๋์ผํ ๊ฐ์ด๋ค. ์ด๋ฅผ ํญ์ ๊ฐ์ด ๋ณํ์ง ์๋ static
์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ผ ์ ์๋ค.
class Person {
static String name = "์ด";
}
public class Main {
public static void main(String[] args){
Person person1 = new Person();
Person person2 = new Person();
}
}
name ๋ณ์ ์์ static
์ ๋ถ์ด๋ฉด ์๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฑ ํ ๋ฒ๋ง ํ๊ฒ ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ง์ฝ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๊ธฐ๋ฅผ ์ํ๋ค๋ฉด
final
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋จfinal
ํค์๋๋ ํ ๋ฒ ์ค์ ๋๋ฉด ๊ทธ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ณ๊ฒฝ ์ ์ค๋ฅ ๋ฐ์ํจ
static
์ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ด์ ๋ ๊ฐ์ ๊ณต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. static
์ผ๋ก ์ค์ ํ๋ฉด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ง์ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ณต์ ํ๊ฒ ๋๋ค.
class Counter {
int count = 0;
Counter(){
this.count++;
System.out.println(this.count);
}
}
public class Main {
public static void main(String[] args){
Counter counter1 = new Counter();
Counter counter2 = new Counter();
}
}
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด,
1
1
์ด ๋์จ๋ค.
๊ฐ์ฒด count1, count2๋ฅผ ์์ฑํ ๋ ์์ฑ์์์ ๊ฐ์ฒด ๋ณ์์ธ count์ ๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํค๋๋ผ๋ count1, count2์ count๋ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค. ๊ฐ์ฒด ๋ณ์๋ ํญ์ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ ๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
class Counter {
static int count = 0;
Counter(){
count++;
System.out.println(count);
}
}
public class Main {
public static void main(String[] args){
Counter counter1 = new Counter();
Counter counter2 = new Counter();
}
}
์ด ์ฝ๋์ฒ๋ผ static์ ๋ถ์ฌ์ฃผ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
1
2
๋ณดํต ๋ณ์์ ์ฐ๋ static
ํค์๋๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ๋์ด๊ธฐ ์ํ ๋ชฉ์ ๋ณด๋ค๋ ๊ณต์ ์ ๋ชฉ์ ์ผ๋ก ํจ์ฌ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
static ๋ฉ์๋
static
ํค์๋๊ฐ ๋ฉ์๋ ์์ ๋ถ์ผ๋ฉด ์ด ๋ฉ์๋๋ static method
๊ฐ ๋๋ค.
class Counter {
static int count = 0;
Counter(){
count++;
System.out.println(count);
}
public static int getCount(){
return count;
}
}
public class Main {
public static void main(String[] args){
Counter counter1 = new Counter();
Counter counter2 = new Counter();
System.out.println(Counter.getCount());
}
}
1
2
2
Counter ํด๋์ค์ getCount() static ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค. static ๋ฉ์๋๋ Counter.getCount()
์ ๊ฐ์ด ๊ฐ์ฒด ์์ฑ์์ด๋ ํด๋์ค๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํ ์ ์๋ค.
static method ์์์๋ ๊ฐ์ฒด ๋ณ์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ !
์์ ์ฝ๋์์๋ count ๋ณ์๊ฐ static์ด๊ธฐ ๋๋ฌธ์ ์ ๊ทผ ๊ฐ๋ฅ
ํนํ static method๋ ์ ํธ๋ฆฌํฐ์ฑ ๋ฉ์๋(ex. ์ค๋์ ๋ ์ง ๊ตฌํ๊ธฐ, ์ซ์์ ์ฝค๋ง ์ถ๊ฐํ๊ธฐ ๋ฑ)๋ฅผ ์์ฑํ ๋ ์ ๋ฆฌํ๋ค.
์ ํธ๋ฆฌํฐ์ฑ ๋ฉ์๋๋ ํน์ ํด๋์ค๋ ์ธ์คํด์ค์ ์ข ์๋์ง ์๊ณ , ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ ๋ฒ์ฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ static method๋ฅผ ๋งํ๋ค. ์ด ๋ฉ์๋๋ค์ ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ ๊ฐ๋ ์ฑ์ ํฅ์์ํจ๋ค.
class Util {
public static String getCurrentDate(String fmt) {
SimpleDateFormat sdf = new SimpleDateFormat(fmt);
return sdf.format(new Date());
}
}
public class Main {
public static void main(String[] args) {
System.out.println(Util.getCurrentDate("yyyyMMdd")); // ์ค๋ ๋ ์ง ์ถ๋ ฅ
}
}
์ฑ๊ธํค ํจํด
์๋ฐ์ ๋์์ธ ํจํด ์ค ํ๋์ด๋ค. ์ฑ๊ธํค์ ๋จ ํ๋์ ๊ฐ์ฒด๋ง์ ์์ฑํ๊ฒ ๊ฐ์ ํ๋ ๋์์ธ ํจํด์ด๋ค. ๋ค์ ๋งํด, ํด๋์ค๋ฅผ ํตํด ์์ฑํ ์ ์๋ ๊ฐ์ฒด๊ฐ ํ ๊ฐ๋ง ๋๋๋ก ๋ง๋๋ ๊ฒ์ด ์ฑ๊ธํค์ด๋ค.
๋์์ธ ํจํด์ ์ํํธ์จ์ด ์ค๊ณ์์ ๋ฐ๋ณต์ ์ผ๋ก ๋ํ๋๋ ๋ฌธ์ ๋ค์ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฒ์ฆ๋ ์ค๊ณ ๋ฐฉ๋ฒ์ด๋ค.
class Singleton {
private Singleton() {
}
}
public class Main {
public static void main(String[] args) {
Singleton singleton = new Singleton();
}
}
์์ ๊ฐ์ ์ฝ๋๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์๋ํ๋ฉด Singleton ํด๋์ค์ ์์ฑ์์ private ์ ๊ทผ ์ ์ด์๋ฅผ ์ค์ ํ์ฌ ๋ค๋ฅธ ํด๋์ค์์ Singleton ํด๋์ค์ ์์ฑ์๋ก์ ์ ๊ทผ์ ๋ง์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฒ ์์ฑ์๋ฅผ private์ผ๋ก ๋ง๋ค์ด ๋ฒ๋ฆฌ๋ฉด Singleton ํด๋์ค๋ฅผ ๋ค๋ฅธ ํด๋์ค์์ new๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ์ ์๊ฒ ๋๋ค.new
๋ฅผ ์ด์ฉํ์ฌ ๋ฌด์ํ ๋ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด ์ฑ๊ธํค์ ์ ์์ ์ด๊ธ๋๋ค. ๊ทธ๋์ ์ผ๋จ new๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋๋ก ๋ง์ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๊น?????
class Singleton {
private Singleton() {
}
public static Singleton getInstance(){
return new Singleton();
}
}
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
}
}
์ ์ฝ๋์ฒ๋ผ getInstance
๋ผ๋ static method๋ฅผ ์ด์ฉํ์ฌ Singleton ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค. ํ์ง๋ง getInstance๋ฅผ ํธ์ถํ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ด ์ญ์ ์ฑ๊ธํค์ด ์๋๋ค.
class Singleton {
private static Singleton one;
private Singleton() {
}
public static Singleton getInstance() {
if(one==null) {
one = new Singleton();
}
return one;
}
}
public class Main {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2); // true ์ถ๋ ฅ
}
}
Singleton ํด๋์ค์ one์ด๋ผ๋ static ๋ณ์๋ฅผ ์์ฑํ๊ณ , getInstance ๋ฉ์๋์์ one ๊ฐ์ด null ์ธ ๊ฒฝ์ฐ์๋ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ก ํ์ฌ one ๊ฐ์ฒด๊ฐ ๋ฑ ํ ๋ฒ๋ง ๋ง๋ค์ด์ง๋๋ก ํ๋ค.
'๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring ์ ๋ฌธ 1์ฃผ์ฐจ - ํ์ต ์ค๋นํ๊ธฐ (1) | 2023.11.02 |
---|---|
Spring ์ ๋ฌธ 1์ฃผ์ฐจ: ์น ๋์๋ฐฉ์ ์ดํดํ๊ธฐ (1) | 2023.10.31 |
JAVA 5์ฃผ์ฐจ: ์ฐ๋ ๋ (2) | 2023.10.23 |
JAVA 4์ฃผ์ฐจ: ์ ๋ค๋ฆญ (0) | 2023.10.23 |
JAVA 4์ฃผ์ฐจ: ์์ธ์ฒ๋ฆฌ (1) | 2023.10.19 |