이상하게 프로그래밍 하면서 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 |