코딩 기록들
[Java Programming] 6.1 클래스 변수 / 메소드 본문
클래스 변수 (= static 변수)
- 인스턴스가 아닌 클래스로 접근할 수 있는 변수 => 변수앞에 'static' 키워드 붙이면 됨
- 클래스로 변수에 접근이 가능하다는 점에서, 애플리케이션 내부의 모든 Java파일에서 공유되는 '공용변수' 이다
- 모든 자바파일이 공유하는 변수이므로, 클래스변수의 값이 변경될경우 -> 원하지않는 결과값이 생성될 가능성이 매우높아짐
(static 만 붙어있는 변수는 없다고 봐도 됨 <- 위험하기 때문)
--> 따라서, 클래스변수는 값이 변경되지 않도록하기위해 static뒤에 final 키워드를 붙여 공용 상수(클래스 상수) 로 사용
-> static으로 정의된 변수는 인스턴스가 아닌, '클래스'로 접근이 가능하게 됨
public static int instanceCount = 0; // 클래스 변수
Car car1 = new Car("경차"); // 인스턴스 생성
System.out.println(car1.getName()); // 인스턴스 메소드 호출
System.out.println(Car.instanceCount); // 클래스 변수 참조
JVM 메모리구조

1. 메소드(Static)
- 실행에 관계 없이 static은 항상 상주해 있음
- stack, heap은 static에 언제나 접근가능하므로, 주의해서 사용해야됨
2. Stack
- 파라미터가 만들어질때 생성됨
3. Heap : 인스턴스가 만들어질때 생성됨
- 클래스로 만든 인스턴스
static 클래스변수를 만드는 방법
- final이 붙었기때문에 전부 대문자로 작성 & 단어와 단어는 언더바(" _" )로 연결함
Java에서 지원하는 다양한 기본 클래스 상수
System.out.println(Math.PI);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
...
public static final double PI = 3.141592653589793;
public static final byte MAX_VALUE = 127;
public static final byte MIN_VALUE = -128;
...
클래스 상수에 값을 할당하는 방법 (정석)
public class VendingMachine {
// 클래스상수 (공용상수)
/**
* 한번에 구매할수있는 제품의 수
*/
public static final int PRODUCT_COUNT; // 한번에 구매할 수 있는 제품의 수 = 1개 라고 정의해 놓은것
public static final String MACHINE_NAME;
//클래스 상수에 값을 할당하는 방법
// -> static block
static {
// static변수, 상수의 값을 초기화 하는 공간
PRODUCT_COUNT = 2;
MACHINE_NAME = "자판기";
}
// -> 이거를 다른곳에서 사용할때 : VendingMachine.MACHINE_NAME
클래스 메소드
- 클래스 메소드는 인스턴스로 접근할 수 없다(할당된 공간이 다름)
- 클래스로 접근하기때문에 : 멤버변수의 영향을 받을 수 없으며 -> 오직 파라미터의영향만 받음 + 클래스변수(상수)
- 클래스메소드가 잔뜩 모여있는 클래스 = 유틸리티 클래스, 헬퍼클래스 , 유틸클래스 등등으로 부름
public class StringUtils {
private double version = 1.0;
public double getVersion() {
return this.version;
}
public static String repeat(String str, int times) {
// Cannot make a static reference to the non-static field version
// -> 뜻 : static에서는 instance에 접근할 수 없다
System.out.println(version);
// Cannot make a static reference to the non-static method
// getVersion() from the type StringUtils
System.out.println(getVersion());
return str.repeat(times);
}
}
- 클래스 메소드는 클래스로 메소드 접근이 가능하다 -> 애플리케이션 내부의 모든 자바파일에서 공유되는 '공유메서드'
- 1회성 처리만하는 일종의 유틸리티 메소드가 필요할때 클래스 메소드로 정의해 '공용메소드' 로 사용
클래스 메소드 실습문제
1. isValidAge(int age, int min, int max) 클래스 메소드를 만들고 age의 값이 min보다 크고 max 보다 작으면 true를, 아니면 false를 반환하도록 작성하고 호출
2. getCourseCredit(double average) 클래스 메소드를 만들고 average의 값을 4.5 만점 기준의 학점을 반환하도록 작성하고 호출
3. getABCDE(double courceCredit) 클래스 메소드를 만들고 학점 기준에 맞춰 ABCDE 등급을 반환하도록 작성하고 호출해보세요.
'Java' 카테고리의 다른 글
[Java Programming] 7.2 String (1) | 2024.01.25 |
---|---|
[Java Programming] 6.2 클래스 다이어그램 & Vending Machine 예제 (0) | 2024.01.24 |
[Java Programming] 5.1 생성자 (1) | 2024.01.23 |
[Java Programming] 5.2 패키지, 접근제어지시자, 정보은닉&캡슐화 (0) | 2024.01.23 |
[Java Programming] 4.2 클래스와 인스턴스 (0) | 2024.01.22 |