태그

#JAVA

JAVA - fina, static

2021년 6월 9일 02:15

47-thumbnail-image

final

  • 최종적인, 최후의
  • 이것이 마지막이다
  • 재설정 금지

final의 사용

  • 변수 : 한 번 값을 설정하면 그 값이 최종적인 값이 된다 (데이터 변경이 불가)
  • 메소드 : 오버라이드 금지, 메소드 재정의 금지(같은 이름의 메소드)
  • 클래스 : 상속금지, 불가능
public final class Test01 {

	int b;
	
	//final을 붙여 선언한 변수는 생성자 안에서 초기화를 진행해주어야한다
	final int a = 0;
	public Test01(int a) {
		//this.a = a; //초기화가 되지 않아서 error
	}
	
//	public  final void setData(int b) {
//		this.b = b;
//	} // 자식이 부모의 메소드를 덮어씌우기가 불가능
	
	public static void main(String[] args) {
		
		final int a;
		//System.out.println("a = "+a);
		
		a = 20;
		//a = 30; 값을 한 번 설정했기 때문에 error
		System.out.println("a = "+a);

	}

}

static

  • 객체의 생성과 상관 없이 사용되는 멤버
  • 클래스를 통하여 접근한다
  • static 멤버는 접근 지정자 영향을 받는다

static 사용

  • 변수
    • 모든 객체가 서로 공유하여 일괄적으로 처리되어야 할 데이터를 저장하는 변수 공간
    • 정적 메모리 영역에 공간이 따로 형성되고 모든 객체가 그 공간을 참조하게 된다
    • 프로그램이 실행 할 때 공간이 생성되고 프로그램이 끝날 때 공간이 소멸된다
    • 모든 객체를 통틀어서 단 하나의 공간만 만들어진다
    • 아무리 클래스 내부더라도 static 멤버는 클래스를 통하여 접근하여야 한다
  • 메소드
    • 객체의 생성과 상관이 없지만 클래스의 기능과 연관이 있는 메소드들을 사용할 때 static 메소드를 만들어준다
    • static 메소드는 static 멤버만 사용이 가능하다
    • this.가 존재하지 않는다
public class Test {

	private int no; // 객체 번호(변수만 공간을 같이 쓴다)
	private static int su;
	
    // static 변수
	public Test(int no, int su) {
		this.no = no;
		//this.su = su;
		Test.su = su;
	}
	
	public void disp() {
		System.out.println("no = "+no+"\tsu = "+su);
	}

    // static 메소드
	public static void setSu(int su) {
		Test.su = su;
		//no = 20; static멤버가 아니기 때문에 error
		getSu();
		System.currentTimeMillis(); //static
		System.out.println(); //static
	}
	
	public static int getSu() {
		return su;
	}
}

static final (상수화 변수)

  • 변수 선언시 사용
  • 공간의 이름이 있기 때문에 다시 불러올 수 있지만 데이터를 변경할 수 없는 공간
  • 프로그램상에서 의미를 가지고 있고 그 의미가 변경되지 않는 데이터를 보다 쉽게 구분하여 사용하기 위해서 사용
public class Main {

	public static void main(String[] args) {

		System.out.println(Integer.MAX_VALUE); // int -> Integer
		System.out.println(Math.PI);
		System.out.println(Color.BLACK);
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("키 입력 : ");
		char key = sc.next().charAt(0);
		//Character.toLowerCase(key)
		switch(Character.toLowerCase(key)) {
		
		case Key.SKILL1:
			System.out.println("SKIILL 1");
			break;
		
		case Key.SKILL2:
			System.out.println("SKILL 2");
			break;
			
		case Key.SKILL3:
			System.out.println("SKILL 3");
			break;
			
		case Key.SKILL4:
			System.out.println("SKILL 4");
			break;
			
		default:
			System.out.println("잘못된 키 입력!");
			
		}
		//https://docs.oracle.com/javase/8/docs/api/overview-summary.html

	}

}