오늘의하루

[JAVA 공부 6일차] static, final, abstract, 접근 제어자 알아보기 본문

JAVA

[JAVA 공부 6일차] static, final, abstract, 접근 제어자 알아보기

오늘의하루_master 2022. 7. 27. 16:16

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가지 접근제어자 모두 사용이 가능합니다.

Comments