본 글은 우아한 테크코스 프리코스 1주차 미션 중 공부한 내용을 기록한 것이다.
-> 우아한 테크코스 프리코스 1주차 미션 java-onboarding
-> 필자가 제출한 코드
-> 1주차 미션 회고
static, final, static final
< static >
-
static 키워드는 ''정적' 이라는 의미이며, 변수와 상수, 메소드에 적용된다.
-
클래스 내에서 static 변수, 상수, 메소드를 선언할 경우, 클래스가 로드되는 시점에 Static 메모리에 공간이 할당된다.
-
즉, 객체를 생성하기 전에 할당된다.
-
이에 따라 '클래스 변수' 라고도 불린다.
- 따라서 static 으로 선언된 변수, 상수, 메소드는 객체가 아닌 클래스를 통해 접근하는게 좋다.
WordConverter wordConverter = new WordConverter();
wordConverter.ASCII_LOWER_A;
WordConverter.ASCII_LOWER_A;
(1) static 변수, 상수
- Static 메모리의 공간을 활용하는 static 멤버 변수, 상수는 객체들이 공용으로 쓴다는 특징이 있다.
- non-static 멤버 변수, 상수는 객체들이 각자의 값을 갖지만, static으로 선언되면 경우는 모든 객체가 공용으로 사용한다.
- A 객체에서 static 변수 값을 변경하면, B 객체에서 이를 가져와도 변경된 값으로 가져와진다.
(2) static 메소드
- 클래스가 로드되는 시점부터 활용할 수 있다. : 객체를 생성하지 않아도 호출할 수 있다.
- 객체를 생성하지 않아도 호출될 수 있으므로, 메소드 내부에서 super, this 또는 non-static 멤버변수에 접근할 수 없다.
- non-static은 객체가 생성되어야 공간이 할당되는데, static 메소드는 그렇지 않으므로 객체가 생성되었는지 안되었는지 알 수 없기 때문에
- 따라서 static 메소드에서는 static 변수, 상수, 메소드에만 접근할 수 있다.
- Math.sqrt(), Math.max() 등과 같은 Utils, Helper 클래스에 활용된다.
- 특정 분류와 관련된 메소드들을 하나의 클래스 안에 모아둘 수 있는 효과가 있다.
< final >
- final은 상수 정의, 메소드, 클래스에 사용될 수 있다.
- 각각의 특징은 다음과 같다.
(1) 상수 정의
- final 키워드를 통해 상수를 선언할 수 있다. (첫번째 정의 이후 수정할 수 없다.)
- static 없이 final만 활용할 경우, 생성자에서 초기화를 해줌으로써 객체마다 서로 다른 상수 값을 가지게 할 수 있다.
(2) final 메소드
- final로 선언된 메소드는 오버라이딩(재정의)을 못한다.
(상수처럼 첫번째 정의 이후 수정이 불가하므로)
public final void testMethod() {}
(3) final 클래스
- final로 선언된 클래스는 상속 받을 수 없다.
public final class TestClass() {}
< static final >