2021. 3. 9. 21:22ㆍJAVA 공부
이번에는 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 |