ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA 공부 6일차] static, final, abstract, 접근 제어자 알아보기
    JAVA 2022. 7. 27. 16:16
    728x90
    반응형

    1. static

    class staticTest{
    	static int width; // 클래스(static) 변수
    	static int height; // 클래스(static) 변수
    
    	static { // 클래스 초기화 블록 (복잡)
    		width = 100;
    		height = 200;
    	}
        
    	static int max (int a, int b){ // 클래스(static) 매서드
    		return a > b ? a : b;
    	}
    }

    만약 이런 클래스가 있다면 여기 있는 모든 멤버는 인스턴스를 생성하지 않고도 사용할 수 있습니다.

    static의 경우 파일이 실행될 때 메모리에 올라가며 몇 개의 인스턴스를 생성하더라도 최초 1회만 초기화됩니다.

    static은 인스턴스 멤버에만 사용할 수 있습니다.

    2. final

    final class FinalTest{
    	final int Max_size = 10;
    
    	final int Max(){
    		final int lv = Max_size;
            return lv;
    	}
    }
    • final이 클래스 앞에 있다면 이 클래스는 부모 클래스가 될 수 없습니다.
    • final이 변수 타입 앞에 있다면 이 변수는 상수가 되어 변경이 불가능합니다.
    • final이 메서드 앞에 있다면 이 매머드는 오버 라이딩이 불가능합니다.

    3. abstract

    abstract class AbstractTest{
    	abstract void func();
    }
    • abstract가 클래스 앞에 있다면 이 클래스 내부에 추상 메서드가 있다는 걸 의미합니다.
      • 추상 클래스라고 부른다.
    • abstract가 메서드 앞에 있다면 선언 부만 작성되고 구현부가 작성되지 않은 미완성 메서드를 의미합니다.
      • 추상 매서드라고 부른다.
    class main{
    	AbstractTest test = new AbstractTest(); 💥 에러!!
    }
    
    abstract class AbstractTest{
    	abstract void func();
    }

    추상 클래스는 미완성된 클래스이기 때문에 인스턴스를 생성할 수 없다.

    이렇게 미완성된 클래스를 왜 만드는지 아직은 배우지 않았지만 추상 클래스를 사용하는 방법은 다른 클래스에서 상속을 받아 완전한 클래스로 만든 후 사용할 수 있다.

    4. 접근 제어자

    public-protected-default-private
    접근 제어자가 접근할 수 있는 범위

    • private : 선언된 클래스 내에서만 사용이 가능합니다.
    • default : 선언된 패키지 내에서만 사용이 가능합니다.
    • protected : 선언된 패키지 내에서 사용이 가능하며 다른 패키지의 첫 번째 자식 클래스에만 사용이 가능합니다.
    • public : 제약 조건 없이 어디서나 사용이 가능합니다.

    접근 제어자는 이름처럼 무언가에 접근할 수 있는지 없는지를 알려줍니다.

    클래스 앞에 붙일 수 있는 접근 제어자 알아보기
    
    public class {...} // ok
    default class {...} // ok
    	- default의 경우 생략이 가능합니다.
        
    protected class {...} // 💥Error
    private class {...} // 💥Error

    클래스 외에 인스턴스 멤버에는 4가지 접근제어자 모두 사용이 가능합니다.

    728x90
    반응형
Designed by Tistory.