이상하게 프로그래밍 하면서 static을 많이 쓸 일이 많이 없었다. 내가 하수라서 쓸 타이밍을 모르는건지 자주 안쓰이는 건지는 모르겠지만 한번씩 static이 나올때마다 약간의 두려움을 없애고자 이 글을 작성한다(실무에서 바로 통하는 자바를 읽다가)

 

 

static이란?

인스턴스들은 똑같은 클래스를 바탕으로 하더라도 인스턴스마다 내부의 변숫값과 메서드의 행동이 다르지만 static을 붙이면 변수와 메서드를 클래스에서 유일한 것으로 다룰 수 있다

static 변수는 클래스에서 인스턴스를 몇 개 만들어도 메모리에는 단 하나만 생성된다. static 변수는 모든 인스턴스에서 같은 값을 공유한다.

 

아래의 그림을 보다싶이 Dog Class의 인스턴스들은 각각의 name을 가지지만 type은 포유류 단 하나다. 왜냐? static이 붙었으니깐! 내 생각엔 클래스가 인스턴스 될때 name과 같은 인스턴스 변수들은 메모리에 할당될때 새롭게 생성+할당되지만 type과 같은 static변수는 기본값으로 static 변수의 주소값 즉 포인터 변수 같은 그런 느낌이 살짝쿵 든다. 

 

실무에서 바로 통하는 자바

 

 

아래의 그림은 static 변수를 변경했을때다 모든 인스턴스 type 변수는 static 변수를 Point 함으로 한놈이 변경하면 바로 모든 인스턴스에 영향을 미친다. 느낌이 그냥 딱 포인터다

실무에서 바로 통하는 자바

 

그리고 static 메서드를 사용할떄는 인스턴스화 안해도 쓸수 있다. 사용법 : 클래스명.메서드명(인수) 이건 뭐 다 아는사실이니.

 

마지막으로 JAVA 초보지만 System.out.println의 out은 System 클래스의 static 변수이고, PrintStream 클래스의 인스턴스다. 결과적으로 System.out.println은 PrintStream 객체의 메서드인 println을 실행하는 것이다. 이 말이 무엇이냐? 지금 System 클래스에서 바로 out을 사용했다.. System은 클래슨데?? 인스턴스도 안만들었는데?? 그렇다 static이니깐! 

'컴퓨터 기본' 카테고리의 다른 글

Thread 란?  (0) 2020.05.07
컴퓨터 하드웨어 구성(CPU)  (0) 2020.02.11
클래스 관계 HAS-A 상속(합성, 통합)  (0) 2019.11.08
유니코드 vs 아스키코드  (0) 2019.06.14
운영체제 32bit vs 64bit  (0) 2019.06.14

+ Recent posts