Ch7-17~20. 제어자
0. 목차
Chapter7. 객체지향 프로그래밍Ⅱ
Ch7 - 17. 제어자
Ch7 - 18. static : 클래스의, 공통적인
Ch7 - 19. final : 마지막의, 변경될 수 없는
Ch7 - 20. abstract : 추상의, 미완성의
Ch7 - 17. 제어자
▶ 제어자(modifier)란?
▷ 클래스와 클래스의 멤버(멤버 변수·메서드)에 부가적인 의미 부여
▷ 마치 명사를 꾸며주는 형용사 같은 역할
▷ 하나의 대상에 여러 제어자를 같이 사용 가능
▷ 접근 제어자는 하나만
▶ 접근제어자
▷ public, protected, (default), private
▷ 4개 중 하나만 붙일 수 있음
▷ (default)는 아무것도 붙이지 않는 것을 의미
▶ 그 외 제어자
▷ static, final, abstract, native, transient, synchroniaed, volatile, strictfp
public class ModifierTest {
public static final int WIDTH = 200; // 접근 제어자는 보통 제일 왼쪽에
}
Ch7 - 18. static : 클래스의, 공통적인
▶ static + 멤버변수
▷ static + iv = cv
▷ cv는 인스턴스를 생성하지 않아도 사용 가능
▷ 클래스가 메모리에 로드될 때 생성
▶ static 메서드
▷ static 메서드는 인스턴스를 생성 없이 호출 가능
▷ static 메서드 내에서는 인스턴스 멤버(iv, im) 직접 사용 불가
class StaticTest {
static int width = 200; // cv(static 변수), 대입 연산자 = 간단한·명시적 초기화
static int geight = 120; // cv(static 변수)
static { // 클래스 초기화 블럭 static { }
// cv(static 변수)의 복잡한 초기화 수행
}
static int max(int a, int b) { // 클래스 메서드(static 메서드) : iv 사용 불가
return a > b ? a : b;
}
}
Ch7 - 19. abstract : 추상의, 미완성의
▶ final + 클래스
▷ 변경 불가 클래스
▷ 확장 불가 클래스
▷ final 클래스는 다른 클래스의 조상 불가
- 대표적인 final 클래스
- String : 보안 때문
- Math : 모두 static 메서드 집합이기 때문
- String : 보안 때문
▶ final + 메서드
▷ 변경 불가 메서드
▷ final 메서드는 오버라이딩으로 재정의 불가
▶ final + 멤버·지역 변수
▷ final + 멤버·지역 변수는 값을 변경할 수 없는 상수가 됨
final class FinalTest { // 다른 클래스 조상 불가
final int MAX_SIZE = 10; // 값 변경 불가 멤버 변수(상수)
final void getMaxSize() { // 오버라이딩 불가 메서드
final int LV = MAX_SIZE; // 값 변경 불가 지역 변수(상수)
return MAX_SIZE;
}
}
Ch7 - 20. abstract : 추상의, 미완성의
▶ abstract + 클래스
▷ 미완성 클래스 : 미완성 설계도 → 제품 생성 불가 → 즉, 객체 생성 불가
AbstractTest a = new AbstractTest();
▷ 추상 클래스를 상속받아 완전한 클래스(구상 클래스)를 만들면, 객체 생성 가능
▷ 추상 메서드가 있으면 무조건 추상 클래스
▷ 클래스 내, 추상 메서드가 선언되어 있음을 의미
▶ abstract + 메서드
▷ 미완성 메서드
▷ 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림
abstract class AbstractTest { // 추상 클래스(추상 메서드를 포함한 클래스)
abstract void move(); // 추상 메서드(구현부{}가 없는 메서드)
}