지역변수는 접근 제한자를 붙여도 어차피 범위가 그 블록 안에서만 사용할 수 있도록 작게 한정되어 있기 때문에 접근제한자를 붙여도 의미가 없다. (매개변수 포함)
static 키워드를 변수 앞에 붙이면 static 변수 라고 한다.
호출된 클래스의 메모리 생성, 그 안에 데이터 멤버 중 static 변수, static함수의 정보값이 들어 있음
메인함수 안에 생성되는 객체(메모리 주소를 가리킴)와 호출되는 함수들
순차적으로 생성 되었다가 사용이 끝나면 사용이 끝나는 순서로(생성된 순서와 반대 순서) 삭제됨
객체의 인스턴스 변수와 메소드 정보, static 변수를 포함하고 있는 클래스의 주소 정보
동일한 클래스의 객체이고, static 변수가 있다면 static 변수 정보는 공유
public static final double PI = 3.14159265358979323846;
값의 공유가 목적이며, 이 값은 변하지 않기 때문에 인스턴스 생성 시마다 각각 인스턴스 별로 이 값을 가지기 위한 메모리 공간을 잡을 필요가 없다. 효율적으로 메모리 공간을 활용하기 위해서는 이런 변수들은 static 선언을 해 줄 필요가 있다.
메모리 생성 시기가 다르기 때문이다
static 함수는 인스턴스 생성이 없어도 클래스가 스캔 되면서 이미 method area에 메모리 방이 만들어 질 수 있다. 인스턴스 변수는 new를 통해서 객체가 만들어져야 변수에 대한 메모리 공간 할당이 가능하다.
static함수는 stiatc 변수를 사용 해야 한다.
반면에 인스턴스 함수는 static, 인스턴스 변수 모두 사용할 수 있는데, static변수가 메모리에 먼저 올라와 있기 때문에(메모리 생성 시기가 빠름) 호출할 수 있는 것이다.
→ 따라서 이 둘 중 하나의 형태가 다른 메소드를 정의하는 것이 가능하다.
System.out.println("가나다");
System.out.println(1.23);
System.out.println(1.23f);
System.out.println(123L);
System.out.println(123);
System.out.println('a');
System.out.println(1 < 100);
이미 각각의 타입으로 오버로딩 되어서 코딩이 되어 있기 때문에 사용할 수 있는 것.
가위바위보 게임
주의 Main 에서 다 처리 하지 말고, 객체 지향적(클래스로 만들어서)으로 짜시오. =================================== 가위, 바위, 보 중 하나를 입력하세요. 가위 바위 졌습니다. 계속하시겠습니까?(Y/N) y 가위, 바위, 보 중 하나를 입력하세요. 바위 바위 비겼습니다. 계속하시겠습니까?(Y/N) n 프로그램을 종료합니다.