Day16 - static의 사용

2021. 3. 9. 21:22JAVA 공부

이번에는 static 을 알아 봅시다

 

static

프로그래밍에서 쓰이는 static 도 비슷합니다.

메모리를 따로 할당해서 고정한다. 라고 생각하시면 될 것 같네요

저번에 메모리를 잠깐 얘기했던 적이 있죠? stack 과 hip ...

여기에 static 이 추가된다고 생각 하시면 될 것 같아요 ~

 

그리고 우리는 이미  static 을 사용한 적이 있고, 계속 사용하고 있습니다.

바로 main 앞에 접근제어자 뒤에 붙어있죠?

그 외에도 예 ~~~ 에 전에 메서드를 공부할 때, 썻었어요 ~

 

이번 시간에는 이런 static 이 무슨 일을 하는지 확인을 해보도록 합시다.

※ 저는 private 로 해서 getter , setter 를 만들었습니다.

확인을 의해서 Count 클래스를 만들고, 각각 변수를 만들어 줄게요.

 

만들었으니까, 이제 main에서 확인을 해봅시다

Count 클래스의 객체 c1 을 만들어서, setter를 사용해, a와 b에 +1 씩 해주고 출력을 해줬습니다.

그랬더니 a와 b에 각각 1이라는 값이 반환되서 출력 되었죠

그리고 Count 클래스의 객체 c2를 만들어서, 위와 똑같이 a,b 에 +1 씩 해줬습니다.

그런데, a와 b를 각각 출력해 보았더니....???

a는 1인데 ... b는 2 입니다 ! ! ! ! ! ! ! 

역시나 이번에도 Count 클래스의 객체 c3을 만들어서, 위와 똑같이 a,b에 +1 씩 해줬는데...

a는 1인데, b는 3이에요 ! ! !

여기까지 보니까, 알 수 있는 사실이 있습니다.

바로. a는 값이 초기화가 되었다. b는 값이 초기화되지 않고, 누적되었다.

즉. a는 서로 다른 객체의 a 인데, b는 그냥 하나의 b인 겁니다

 

static은 클래스 외부에 1개 생성된다. 의 의미를 갖습니다.

그래서 static 변수는 객체와 상관 없기 때문에
클래스이름.변수명 으로 사용할 수 있습니다.

 

그러면 , 현재 c3.b 는 몇일까요??

바로 101 입니다 ~

Count.setB(100) 을 통해서, static int b 를 100으로 대입해주고,

c2.setB(c2.getB() + 1) 로 101을 넣어주는 겁니다.

그리고 static 변수는 공유된다고 생각을 해주는 게 괜찮을 것 같네요

그렇기 때문에, c3.getB() 를 해서 101이 나오는 겁니다

 

이렇게 변수에 static 을 쓰는 법을 알아 보았습니다.

 

이번에는 메서드에 static 을 쓰는 법을 알아 봅시다

 

static 메서드 쓰기

static이 메서드 앞에도 붙을 수 있다는거 알고 계시죠?

이미 메서드를 처음 배울때 사용 했었잔아요 ? ㅎㅎㅎㅎ

이번에는 static 변수와 같이 알아 봅시다

먼저 저희가 그동안 썻었던, 메서드는 일반 메서드가 되는 거죠

일반 메서드에서는, 일반 변수, 스테틱 변수 모두 사용이 가능합니다.

 

스테틱 메서드 에서는

일반 멤버변수 a 를 쓰려고 하니까 오류가 나오죠?

스테틱 메서드 에서는 스테틱 변수만 사용이 가능해요 ~

 

그렇지만, 새로 만들어서 사용할 수 있습니다.

main 을 생각해 보세요 ~ (main 도 static 메서드 입니다)

main 에서는 그냥 객체나, 변수나 다 만들어서 사용하잔아요?

똑같습니다 ~

 

이제 클래스를 만들었으니까 main 에 사용을 하러 가 봅시다

static 으로 만든 메서드는 클래스이름.메서드 로 사용해주면 됩니다.

스테틱 변수처럼 따로 객체를 생성하지 않고 사용할 수 있습니다.

메서드 2번에서 해주는건... static 변수 b++ 만 보면 되겠네요

c.method1() 에서 b+1

Count.b++ 에서 b+1

method2() 에서 b+1

그래서 static int b는 3이 됩니다.

 

static은 왜 중요할까요?

사실 저희는 이미 static 메서드를 쓰고 있었습니다.

객체를 생성하지 않고, 사용하는 메서드... 뭐가 있었죠?

Math.random();

Arrays.toString();

이거 다 static 메서드 입니다.

거기다가, 생성자에 private 를 붙여서, 생성을 못하게 해버렸죠?

이렇게 static 기능을 이용해서 객체를 만들지 말고 사용하게 만들 수가 있습니다.

Integer는 아직 배우지 않았지만, 이것도 static 메서드를 사용한 것이라는 걸 알 수 있겠죠?

 

이번에는 이렇게 static의 사용에 대해 알아 보았습니다.

 

고생하셨습니다

'JAVA 공부' 카테고리의 다른 글

Day16 - final  (0) 2021.03.09
Day16 - static 변수의 초기화 / 싱글톤  (0) 2021.03.09
Day15 - instanceof  (0) 2021.03.08
Day15 - 다형성이 필요한 이유 / 메서드  (0) 2021.03.08
Day15 - 다형성  (0) 2021.03.08