/ JAVAJUNGSUK

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 메서드 집합이기 때문


▶ 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(); // 추상 메서드(구현부{}가 없는 메서드)
}