개발 무지렁이

[Java] 기타제한자 static / final / abstract 본문

Backend/자바

[Java] 기타제한자 static / final / abstract

Gaejirang-e 2023. 4. 8. 19:18

정적(static) 멤버


객체 생성없이 접근가능한 멤버이며, 메모리에 무조건 올라간다.
(하나를 만들어서 공유하고 싶을 때 => 지역변수에는 사용불가)

vs 인스턴스(instance) 멤버
객체에 소속된 멤버이며, 객체를 생성해야만 사용할 수 있는 멤버이다.
클래스 안의 메서드각 객체마다 존재하지 않고, 메서드 영역에 저장되어 공유된다.
(객체마다 메서드[코드의 덩어리]를 저장한다면 '중복저장'으로 인해 메모리 효율이 떨어진다.)

final


변수에 사용: 한 번 초기화하면 값변경이 불가능하다, 상수역할 (자동 초기화x)
메서드에 사용: 오버라이딩 x, 상속 x => 부모가 될 수 없음, (단, 객체생성은 가능)

📌. '진정한 상수'란?
static final int CONSTANT = 100;

staticfinal이 같이 붙은 변수가 '진정한 상수'라고 할 수 있다.
상수란 누가 써도 같아야 '진정한 상수'이다.
static이 안붙었을 때는 사용자마다 다른 값으로 초기화해서 그 값이 다를 수 있다.
즉, static을 붙여 하나만 만들어(변수를 만들고 초기화) 공유한다.
이게 진정한 상수다.

abstract


'규격'의 역할을 한다.
추상화만 시켜놓고, 누군가 가져다가 '구체화'시켜 원하는 기능을 만들어라
=> 재정의를 위해 만든다.

※ 변수 앞에 올 수 없다.
메서드 앞에 오지만, 단, 바디가 없다 => 규격만 제공(추상화)

⚠️ abstract method를 가지고 있는 class는 반드시 abstract class로 선언되어야 한다.

abstract class는 규격의 역할을 하는 부모가 되기위해 존재한다.
자식클래스는 무조건 부모클래스에 선언된 abstract method를 재정의해야한다.
-> 상속 -> 다형성 및 유지보수
Comments