Final 키워드
필드에서 Final을 사용하려고 할 때
public class Product {
// 값을 입력하지 않았기 때문에 String의 초기 값이 출력됨.
private final String productName;
private String type;
//오버로딩
public Product(String productName) {
this.productName = productName;
this.type = "과자";
this(productName, "과자"); //생성자 몰아주기
}
public Product(String productName, String type) {
this.productName = productName;
this.type = type;
}
}
(주의) final 필드는 setter(변경을 대행하는 메서드)메서드를 만들지 못한다.
ex)
// public void setProductName(String productName) {
// this.productName = productName;
// }
public class GalaxyFold4 {
private static String company = "삼성";
동적인 데이터는 객체를 만들면서 설정하며, 객체마다 각자 다르게 관리한다.
일반 필드로 생성한다.
private String number;
private String color;
생성자에서는 static 항목을 초기화하지 않는다.
public GalaxyFold4(String number, String color) {
//this.setCompany("삼성"); //비추천
this.setNumber(number);
this.setColor(color);
}
public void output() {
System.out.println("번호 : " + this.getNumber());
System.out.println("색상 : " + this.getColor());
//System.out.println("제조사 : " + this.getCompany()); //잘못된 방법
System.out.println("제조사 : " + GalaxyFold4.getCompany());
} //올바른 방법
ex) 메인클래스에서 회사를 수정 할 경우
g1.setCompany("애플"); //잘못된 접근방법
GalaxyFold4.setCompany("화웨이"); //올바른 접근방법
다른 예시)
static 항목(standardRate = 1.2; 자리)에 대한 초기화 코드를 작성할 수 있는 저장공간
ex) : 1부터 100까지 더한 결과를 설정
if, for문 등 각종 프로그래밍 구문 사용 가능
private static double standardRate; //기본이율
static {
standardRate = 1.2;
}
public static double getStandardRate() {
return standardRate;
}
public static void setStandardRate(double standardRate) {
if(standardRate < 0) {
return;
}
KhBank.standardRate = standardRate;
}
static을 사용 했을 경우 예시)
public class Robot {
public static int plus(int left, int right) {
return left + right;
}
}
public class Test01 {
public static void main(String[] args) {
int a = Robot.plus(10, 20);
System.out.println("a = " + a);
}
}
static을 사용 하지 않았을 경우 예시)
public class Robot {
public int plus(int left, int right) {
return left + right;
}
}
public class Test01 {
public void main(String[] args) {
Robot rb = new Robot();
int a = rb.plus(10,20);
}
}
코드 예시)
public class Test03 {
static final int SCISSORS = 0;
static final int ROCK = 1;
static final int PAPER = 2;
//목표 : static과 final을 같이 쓰는 이유
//ex) 화면에 랜덤으로 가위/바위/보 중 하나가 출력
public static void main(String[] args) {
Random r = new Random();
int rsp = r.nextInt(3);
System.out.println("rsp : " + rsp);
// case문 에서는 변수를 적을 수 없다.
switch (rsp) {
case SCISSORS:
System.out.println("가위");
break;
case ROCK:
System.out.println("바위");
break;
case PAPER: // == default:
System.out.println("보");
break;
}
}
}