본문 바로가기

language/자바

[java]static의 사용이유

static은 자바 main 문이 있는곳이라면 아주 쉽게 봤다

처음배울때는 그냥 기계적으로 계속썼다

public class Main

public static void main ...

 

static을 왜쓸까?

두가지 이유가있다.

자주쓰기위해, 어쩔수없이

 

1. 자주쓰는것, 공용으로 쓰는것을 여러곳에서 사용하기위해 (  전역변수느낌?)

static 붙이면 new(생성자) 없이 사용이 가능하다.

이말이 무슨소린지 몰라도 아래 코드를 보면 이해가간다.

(int)(math.random()*10);

Integer.parseInt(asd);

우리가 자주쓰는 모습이다.

 

Math asd = new Math() 이런식으로 math에 대한 객체를 생성하지 않고 가져다 쓴다.

 

 

만약 한다면

Math asd = new Math() 

asd.random()

이런식으로 할수있다는 것이다.

 

 

실상 이렇게 코딩도안된다

privat으로 생성자가 막혀있어서

 

 

 

 

아무튼  직접 찾아보면

 

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

 

 static임을 확인 할 수 있다

 

static이기 때문에 우리는 new 없이 바로 가져다 쓸 수 있고,

자주쓰는 것을 일일이 생성하기 싫다 이 소리다.

 

 

 

Q1 : 그러면 사용자 정의로 만드는 class 들도 static 붙이는게 좋겠네?

A : 아니!

static은 heap영역이 아닌  static 영역에 메모리를 할당하기 때문에

프로그램이 종료될때 까지 메모리를 차지한다

-- >  garbage collector 대상에서 제외 

-- >  많이 사용할수록 프로그램이 무거워진다

 

* stack 영역이 아니라 static 영역이요?

-> https://nsmchan.tistory.com/70

 

 

 

Q2 : new 생성자 쓰는거 많이 볼 수 있는데... 그럼 static이 붙어있는 것들은 new 생성자 안써도 되겠지?!

A : 무조건은 아니다. 객체지향프로그래밍 언어에서 new로 객체를 생성하지 않는다는 것은 어불성설

 

 

2. 어쩔수없이 쓴다

main을 보면 static이 거의 항상 따라온다.

 

만약 static 없이 main 문을 쓰려고한다면....

A 라는 클래스안에 a라는 메소드에서 main 객체가 생성 되어있어야 한다. new main..

그러면!  또 a 라는 메소드 B라는 클래스안에 b 라는 메소드에서 객체가 생성 되어있어야한다....
무한루프....


어쩔수없이 

프로그램의 시작인 main 은 객체를 생성하지 않은 채로 진행할수 있도록 한다.

'language > 자바' 카테고리의 다른 글

[java] abstract 추상화  (0) 2022.07.14
[java] 상속에서 조심해야 하는 점  (0) 2022.07.13
getter와 setter  (0) 2022.05.31
자바 HttpServletRequest  (0) 2022.01.27
자바 Integer.parseInt() 진수 표현  (0) 2022.01.19