일단 자바의 메모리 구조에 대해서
https://huelet.tistory.com/entry/JVM-%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0
이 글을 참고하자.
갓생을 사는 개발자 친구들과 대화하다가 static 얘기가 나왔는데
나는 아직 static에 대해 정리가 잘 안돼서 대충 써두려고 한다.
사실 내가 정리하는 거 아니고 친구가 정리해서 보내준 거 옮기는 거임.
static : 객체마다 가질 필요가 없는 공용으로 사용하는 필드
혹은 인스턴스 필드를 포함하지 않은 메소드.
정적필드와 정적메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이기에 클래스 로더가 클래스를 로딩해서
메소드 메모리 영역에 적재할때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다.
출처: https://dev-coco.tistory.com/23 [슬기로운 개발생활:티스토리]
static메소드는 객체의 생성 없이 호출이 가능하고, 객체에서는 호출이 불가능하다.또한 static메소드 안에서는 인스턴스 변수 접근이 불가능 하다.
출처: https://dev-coco.tistory.com/23 [슬기로운 개발생활:티스토리]
--> 당연함. static 메소드 입장에서는 인스턴스 변수가 아직 세상에 태어난 놈이 아님.
final : 한 번 값이 정해지고 나면 값을 바꿀 수 없는 필드.
static final : 모든 영역에서 고정된 값으로 사용하는 상수(파이 같은 것)
대충 이렇게 정리되겠다.
나는 실무에서 inner class 를 한 번도 쓴 일이 없다.
친구 말로는 테스트 코드를 작성할 때 많이 사용된다고 한다.
말 그대로 이런 형태다.
class Outer { // 외부 클래스
...
class Inner { // 내부 클래스
...
}
...
}
주로 외부클래스에서'만' 사용되기 위해 쓰이는 클래스라 할 수 있겠다.
내부클래스 종류
특징
인스턴스 클래스( instance class )
외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의 인스턴스처럼 다뤄진다.주로 외부클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.
스태틱 클래스( static class )
외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의 static멤버처럼 다루어진다. 주로 외부클래스의 static멤버, 특히 static 메소드에서 사용될 목적으로 선언된다.
지역 클래스( local class )
외부클래스의 메소드에 선언하며, 선언된 영역 내부에서만 사용될 수 있다
익명 클래스( anonymous class )
클래스의 선언과 객체의 생성을 동시에 하는 이름 없는 클래스로 일회용이다.
참고 내용 출처 http://www.tcpschool.com/java/java_usingClass_innerClass
https://tadaktadak-it.tistory.com/19 [타닥타닥 IT:티스토리]
사실 아직 내부클래스를 언제 어떻게 써야 하는지 감이 오지 않는다.