Cohe
09 Usage Modifier 본문
728x90
반응형
- Garbage Collecting
- 객체 생성에 사용하는 new 키워드는 존재하지만 생성된 메모리에서 해제하는 키워드는 존재하지 않습니다
- 없는 이유는 자바에서 JVM이 알아서 메모리를 관리하기 때문이다.
- 객체가 더 이상 프로그램에서 사용되지 않으면 가비지 컬렉터가 스스로 판단하여 메모리를 해제하여 수거
- Usage Modifier
- Usage Modifier는 Access Modifier를 제외한 모든 Modifier를 의미함.
- 여기 Usage Modifier(사용 제한자) 중 static, final, abstract를 볼 예정
- 이외에 transient, synchronized, volatile, native 등이 있음.
static의 의미...
- 일반적으로 각 인스턴스들은 서로 독립적으로 객체 내에서 변수값을 서로 각각 다룸.
- Person p1, Person p2 가 있는 경우에 각각의 p1.getName(), p2.getName()는 다른 값을 가질 수 있음.
- static이 변수 앞에 붙으면 모든 인스턴스에 대해서 공유가 됩니다. 이때 변수는 인스턴스 변수가 아닌 클래스 단위로 바뀌게 되고, 이 때문에 static이 붙은 멤버 변수를 클래스 변수라고 합니다.'
- 그리고, static 붙지 않는 변수를 인스턴스 변수라고 하며 구분합니다.
- 메서드 static이 붙는다면 해당 메서드는 인스턴스와 무관하기 때문에 인스턴스를 생성하지 않아도 호출이 가능하게 된다.
static 관련 된 자바 문법
- static 메서드 안에서는 non-static 멤버를 객체 생성 없이 직접 참조할 수 없음. 반대로 static 붙지 않은 메서드에서는 static 멤버를 사용할 수 있음.
- 주로 모든 인스턴스가 공통된 변수값을 가져야 하는 경우에 static 변수를 사용한다.
- static 변수와 관련된 작업을 하거나 어떤 인스턴스 변수도 사용하지 않고 매개 변수로만 작업을 처리하는 메서드는 static 메서드로 정의해준다.
- ex) math 클래스의 메서드
- 이클립스 : 초록 동글뱅이는 public
- s면 : static
- Instance Initializer
- 생성자가 호출되기전에 호출됨, 인스턴스 변수 초기화에 사용
- 생성자를 이용하여 인스턴스 변수 초기화가 가능하기 때문에 사용할 기회는 많지 않음
- final은 초기값이 굉장히 중요한데(후에 값 변경이 안되기 때문), 없으면 문제가 있다.
- Static
- 변수 메서드 static{}, 클래스에서 사용
- static 제한자는 지정된 변수와 메서드를 인스턴스와 무관하게 만들어주기 때문에 this를 가질 수 없음
- static 메서드는 non-static 메서드로 재정의 될 수 없다.
Uage Modifier - Final
- 의미
- 일반적으로 final은 그 값이 변하지 않음을 의미
- 변수에 final이 붙으면 그 값은 변경 할 수 없다. 때문에 static하고 같이 사용시 상수로 사용
- 메서드에 final이 붙으면 그 메소드는 재정의할 수 없다.
- 재정의 필요가 없는 메서드일 때 사용
- 개발자가 재정의를 허용하지 않기 위해서 사용한다.
- 클래스에 final이 붙으면 그 클래스는 자식클래스를 가질 수 없다.
- final
- 선언과 동시에 초기화
- 인스턴스 초기화 이용
- 생성자를 이용
- 다형성
- 여러가지 형태를 가지는 성질을 의미
- 다형성은 상속을 전제조건으로 함
- 동일한 메시지라도 어떤 객체에 전달되느냐에 따라서 다양한 동작을 발생하게 된다.
- 다형성은 존재하지 않았던 클래스를 기존 시스템에 수정 없이 시스템에 추가되도록 합니다, 다형성 인자 예제 참
- 다형성을 적용하는 방법은 부모 클래스의 객체를 선언하고 자식 클래스의 객체를 할당하는 것, 반대는 불가능함
- 다형적 객체의 경우 부모 클래스에 있는 메서드만 사용이 가능
- 자식 클래스에 재정의 되어 있다면 실행은 자식 클래스에 있는 메서드로 실행
- 자식클래의 메서드가 실행된다고해서 부모 클래스에 있는 해당 메서드를 지우면 안됩니다 이유는 컴파일 시에는 부모의 메서드를, 실행시에는 자식의 메서드를 사용하기 때문!
- 선언시 자료형은 반드시 구현된 클래스일 필요는 없다. 추상클래스나 인터페이스도 가능하고, 이런 특성을 이용하여 개발자는 인터페이스를 통해서 명세를 제공할 수 있습니다.
- instanceof : 좌항의 객체와 우항의 클래스를 비교
Usage Modifier - abstract
- 의미
- abstract 제한자는 아직 구현되지 않았다는 의미를 가짐
- abstract 제한자는 클래스 메서드에 사용합니다 변수에는 사용하지 않아요
- 변수는 늘 변경이 되기 때문에 명세의 의미인 abstract를 사용하지 못한다.
- 클래스에 사용하는 경우
- 객체를 생성할 수 없습니다.
- 다형성을 통해서 추상클래스의 자료형으로 가지는 객체를 생성할 수 있습니다.
- 자식을 가질 수 있다.
- 추상 클래스 자체로는 new 연산자를 쓸 수 없다! → 그래서 구체화 할 수 있다.
- 추상 클래스가 됩니다.
- 반드시 상속을 받아서 사용해야 합니다.
- 인터페이스가 나오기 전에 이 친구들을 썼다.
- 메서드에 사용하는 경우
- 추상 메서드가 됩니다. 메서드의 구현 부분이 없음
- 추상 메서드를 하나라도 포함하는 클래스는 추상 클래스가 되어야 합니다. 그러나 추상 클래스가 꼭 추상 메서드를 가져야 할 필요는 없습니다.
728x90
반응형
'개발 언어 > JAVA' 카테고리의 다른 글
11 Exception (0) | 2024.03.19 |
---|---|
10 Interface 인터페이스 (1) | 2024.03.18 |
08 상속, modify (0) | 2024.03.14 |
07 Class, Method, Package (0) | 2024.03.13 |
회원관리 시스템 작성 (0) | 2024.03.12 |