오늘은 클래스 메소드(static 메소드)와 인스턴스 메소드에 대해 공부했다.
static 변수와 메소드는 인스턴스 변수, 인스턴스 메소드를 사용하지 못하는것은 알고있었는데,
왜 그런지 생각해본적이 없었다.
그래서 이번 챕터를 읽어보게 되었다.
아래 내용은 자바의 정석을 읽고 요약한 내용이다.
클래스 메소드(static 메소드)와 인스턴스 메소드
클래스변수와 인스턴스변수
멤버변수에서
* static이 붙은 변수를 클래스 변수(static 변수)라고 한다.
* static이 붙지 않은 변수를 인스턴스 변수라고 한다.
* 클래스변수는 클래스가 메모리에 올라갈때 생성된다.
* 인스턴스변수는 인스턴스를 생성할때 생성된다.
* 클래스변수는 생성하지 않고 사용할 수 있다.
* 인스턴스변수는 인스턴스를 생성해야 사용할 수 있다.
* 클래스변수는 모든 인스턴스가 하나의 자원을 공유한다. (따라서 모든 인스턴스에 공통적으로 사용하는 값에 주로 static을 붙임)
* 인스턴스는 생성될떄마다 생성되므로 각 인스턴스가 서로 다른 값을 갖는다.
클래스 메소드와 인스턴스 메소드
* 클래스 변수,메소드는 인스턴스 변수, 메소드를 사용할 수 없다. (클래스 변수, 메소드 호출 시점에 인스턴스 변수,메소드가 생성되지 않았을 수도 있기 때문)
* 인스턴스 변수,메소드는 클래스 변수,메소드를 사용할 수 있다. (인스턴스 변수,메소드가 존재하면 클래스 변수,메소드는 이미 메모리에 존재하기 때문)
**
* 모든 인스턴스에 공통된 값이 유지되어야한다면 static을 사용하는것을 고려하자.
* 메소드 내에 인스턴스 변수를 사용하지 않는다면, static 메소드로 만드는것을 고려하자.
메소드 호출시간이 짧아져서 성능이 향상된다. (인스턴스 메소드랑 달리 실행 시 호출되어야 할 메소드를 찾는 과정이 생략되기 때문)
클래스 멤버와 인스턴스 멤버간의 참조와 호출
같은 클래스 내의 멤버간에는 인스턴스를 생성하지 않고 서로 참조, 호출이 가능하다.
단, 클래스멤버가 인스턴스멤버를 참조, 호출하는 시점에는 인스턴스를 생성해야한다.
(인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재한다. / 클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재할 수도, 아닐 수도 있다.)
인스턴스 변수
* 인스턴스 변수 사용 가능
* 클래스 변수 사용 가능
*클래스 변수
* 인스턴스변수 사용 불가 (인스턴스를 생성하고, 변수에 접근하여 사용하는건 가능)
* 클래스변수 사용 가능
인스턴스 메소드
* 인스턴스 변수, 메소드 사용 가능
* 클래스 변수, 메소드 사용 가능
*클래스 메소드
* 인스턴스 변수, 메소드 사용 불가 (인스턴스를 생성하고, 변수, 메소드에 접근하여 사용하는건 가능)
* 클래스변수, 메소드 사용 가능
* 클래스 멤버에서 인스턴스 멤버를 참조, 호출하기 위해서는 반드시 객체를 생성한 후에만 사용이 가능하다.
[출처] - 자바의 정석
'JAVA' 카테고리의 다른 글
[자바의 정석]Exception (0) | 2018.09.12 |
---|---|
[자바의 정석]클래스와 객체 (0) | 2018.09.12 |
[자바의 정석]직렬화 (0) | 2018.09.11 |