minOS

자바의 정석ch7-17~20 제어자, static, final, abstract 본문

TIL/남궁성의 자바의 정석

자바의 정석ch7-17~20 제어자, static, final, abstract

minOE 2023. 12. 10. 23:03
728x90

ch7-17 제어자(modifier)

- 클래스와 클래스의 멤버(멤버변수,메서드)에 부가적인 의미 부여
접근제어자 : public,protected,(default),private
그 외 : static,final,abstract ...

- 하나의 대상에 여러 제어자를 같이 사용 가능 단, 접근 제어자는 하나만 사용 가능
예시
public class ModifierTest {
    public static final int WIDTH = 200; // 제어자 순서는 상관없으나  접근제어자는 보통 가장 왼쪽에 쓴다.

    public static void main(String[] args) {
        System.out.println("WIDTH = " + WIDTH);

    }
}

 

ch7-18 static - 클래스의,공통적인 

 

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

 

예시

class StaticTest {
    //클래스 변수
    static int width =200;
    static int height =120;

    static { //클래스 초기화 블럭
        //static 변수의 복잡한 초기화 수행
    }
    static int max(int a, int b){  //클래스(static) 메서드
        return a > b ? a:b;
    }  //객체를 필요로 하는 instance 변수나 메소드에서는 사용 불가능


}
public class Main {
    public static void main(String[] args) {
        System.out.println(StaticTest.max(StaticTest.width, StaticTest.height)); //가능
        
        StaticTest staticTest = new StaticTest();
        //staticTest.max(200,300) static max 메서드 사용 불가능

    }
}
//출력 200

 

 

ch7-19 final - 마지막의 , 변경될 수 없는

 제어자 대상 의미
final 클래스 - 변경될 수 없는 클래스, 확장될 수 없는 클래스
  그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다 (상    속 계층에서 가장 마지막 child 클래스)
fianl 메서드 - 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩으로 재       정의 불가능
final
지역변수,멤버변수 -변수 앞에 final이 붙으면 상수가 된다.

 

 

예시

final class FinalTest{ // 조상의 될 수 없는 클래스
    final int MAX_SIZE = 20; //값을 변경할 수 없는 상수

    final  int getMaxSize(){  //오버라이딩 할 수 없는 메서드(변경불가)
        final int LV = MAX_SIZE; // 상수
        return MAX_SIZE;
    }
}
public class Main {
    public static void main(String[] args) {
        System.out.println(new FinalTest().MAX_SIZE); 
        System.out.println(new FinalTest().getMaxSize());
    }
}
/*출력 20
      20 */

 

ch7-20 abstract - 추상의, 미완성의

제어자 대상 의미
abstract 클래스 클래스 내에 추상 메서드가 선언되어 있음을 의미한다.
abstract 메서드 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다. 
abstract class AbstractTest{ //추상 클래스(추상 메서드를 포함한 클래스)
    abstract void move(); //추상 메서드(구현부가 없는 메서드)
}
추상 클래스는 미완성 설계도이므로 인스턴스를 생성할 수 없다. 만약 추상 클래스의 인스턴스를 생성하려면 해당 추상 클래스를 상속하는 구체적인 클래스를 정의하고, 해당 클래스의 객체를 생성해야한다. 이 클래스는 추상 클래스의 추상 메서드를 구현해야 한다.
abstract class AbstractTest{ //추상 클래스(추상 메서드를 포함한 클래스)
    abstract void move(); //추상 메서드(구현부가 없는 메서드)
}

class Car extends AbstractTest {
    void move(){
        System.out.println("go to home");
    }
}


public class Main {
    public static void main(String[] args) {
        AbstractTest abstractTest = new Car();
        abstractTest.move();
    }
}​


출력

 

728x90