Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

제어자(modifier) 본문

Java/객체지향

제어자(modifier)

빌드이너프 2023. 6. 8. 16:28

제어자(modifier)

클래스와 클래스의 멤버(멤버변수, 메서드)앞에 붙어 부가적인 의미 부여

접근 제어자: public, protected, (default), private

    4개 중 1개만 붙일 수 있다

    (default)는 따로 코드에 추가하는 것이 아닌 아무것도 안붙이는 경우를 의미한다

그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp

 

 

하나의 대상에 여러 제어자를 같이 사용가능(*접근 제어자는 하나만 가능)

순서는 상관없지만 보통 접근 제어자를 왼쪽 부분에 쓴다

static public final, final static public, public static final

 

static

객체 생성없이 사용가능

하지만, 객체가 필요한 인스턴스 멤버를 사용할 수 없다

제어자 대상 의미
static 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다
- 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다
- 클래스가 메모리에 로드될 때 생성된다
메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다
- static 메서드 내에서는 인스턴스 멤버(iv, im)들을 직접 사용할 수 없다
   (인스턴스 멤버들은 객체를 생성 후에 사용할 수 있기 때문에 사용 불가능하다)

간단 초기화, 복잡 초기화 링크

class StaticTest {
    static int width = 200; // class variable(static variable), 간단 초기화
    static int height = 120; // class variable(static variable), 간단 초기화
    
    static { // 클래스 초기화 블럭
        // static 변수의 복잡한 초기화 수행
    }
    
    static int max(int a, int b) { // class method(static method)
        return a > b ? a : b;
        // instance variable, instance method 사용 불가
    }
}

 

 

final

제어자 대상 의미
final 클래스 변경될 수 없는 클래스, 확장될 수 없는 클래스가된다
final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다
ex. String, Math, ...
메서드 변경될 수 없는 메서드
final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다
멤버변수 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다
지역변수
final class FinalTest { // 조상이 될 수 없는 클래스
    final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수(상수)
    
    final void getMaxSize() { // 오버라이딩할 수 없는 메서드(변경불가)
        final int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수)
        return MAX_SIZE;
    }
}

 

 

abstract

제어자 대상 의미
abstract 클래스 클래스 내에 추상 메서드가 선언되어 있음을 의미한다
메서드 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다
메서드에 몸통{}이 없다

선언부 void move()만 있고 구현부{}가 없다, 미완성 메서드이다

abstract class AbstractTest { // 추상 클래스(추상 메서드를 포함한 클래스)
    abstract void move(); // 추상 메서드(구현부가 없는 메서드), 몸통{}이 없다
}

 

AbstractTest 클래스 또한 미완성 클래스이다

AbstractTest 클래스의 객체를 생성할 수 없다

AbstractTest a = new AbstractTest(); // 에러, 추상 클래스의 인스턴스 생성불가

 

그렇다면 언제 객체를 만들 수 있을까

바로, 추상클래스를 상속 받은 후 완전한 클래스(완성된 설계도 = 구상 클래스)로 만들어주면 된다

'Java > 객체지향' 카테고리의 다른 글

캡슐화  (0) 2023.06.09
접근 제어자(access modifier)  (0) 2023.06.09
import 문, static import문  (0) 2023.06.08
패키지(package)  (0) 2023.06.08
생성자 super()  (0) 2023.06.07