클래스와 인스턴스

클래스 – 메서드를 은유적으로 정의하는 청사진

인스턴스 – Product , 메서드 호출과 유사 ex) ABC abc = 새로운 ABC();


리팩토링

외부에서 보았을 때 프로그램의 동작을 변경하지 않고 프로그램의 내부 구조를 개선


리팩토링의 목적

– 오류를 쉽게 찾을 수 있도록 함

– 기능을 쉽게 추가할 수 있습니다.

– 검증 용이


인스턴스 변수(비정적 필드)

– 인스턴스마다 값이 다른 변수

클래스 변수(정적 필드)

– 클래스의 인스턴스는 자연스럽게 클래스 변수의 값을 가집니다.

클래스 변수 사용

– 인스턴스에 따라 변하지 않는 값이 필요한 경우

– 인스턴스화를 필요로 하지 않는 클래스에 값을 저장하고 싶은 경우

– 모든 인스턴스에서 값 변경을 공유해야 하는 경우

예 1)

클래스 ABC {

정적 이중 PI = 3.14; // 클래스 변수

}

예시 2)

클래스 계산기2 {
정적 int 기준 = 0; // 클래스 변수
int 왼쪽, 오른쪽;

공공 무효 setOprands(int 왼쪽, int 오른쪽) {
왼쪽 = 왼쪽;
오른쪽 = 오른쪽;
}
공개 무효 sum() {
System.out.println(this.left + this.right + base);
}
}
공개 클래스 메인 {

공개 정적 무효 메인(String() args) {
Calculator2 c1 = new Calculator2();
c1.setOprands(10, 20);
c1.sum(); // 30

Calculator2 c2 = new Calculator2();
c2.setOprands(10, 30);
c2.sum(); // 40

계산기 2루 = 10;

c1.sum(); // 40
c2.sum(); // 50
}
}


클래스 방법

– 인스턴스 없이 사용

– 클래스에 직접 접근하여 사용

전)

클래스 계산기3 {
공개 정적 무효 합계(int 왼쪽, int 오른쪽) {
System.out.println(왼쪽 + 오른쪽);
}
}
공개 클래스 메인 {
공개 정적 무효 메인(String() args) {
계산기3.sum(10,20);
}
}

특성

– 인스턴스 메서드는 클래스 멤버에 액세스할 수 있습니다.

– 클래스 메서드는 인스턴스 멤버에 액세스할 수 없습니다.
전)

클래스 C1{
정적 정수 static_variable = 1;
int 인스턴스 변수 = 2;
정적 무효 static_static(){
System.out.println(static_variable);
}
정적 무효 static_instance(){
// 인스턴스 변수는 클래스 메서드에서 액세스할 수 없습니다.
//System.out.println(instance_variable);
}
무효 instance_static(){
// 인스턴스 메서드는 클래스 변수에 액세스할 수 있습니다.
System.out.println(static_variable);
}
무효 인스턴스_인스턴스(){
System.out.println(인스턴스 변수);
}
}
클래스 ClassMemberDemo {
공개 정적 무효 메인(String() args) {
C1c = 새로운 C1();
// 인스턴스를 사용하여 정적 메서드에 액세스 -> 성공
// 인스턴스 메서드가 정적 변수에 액세스 -> 성공
c.static_static();
// 인스턴스를 사용하여 정적 메서드에 액세스 -> 성공
// 정적 메서드 액세스 인스턴스 변수 -> 실패
씨. static_instance();
// 인스턴스를 사용하여 인스턴스 메서드에 액세스 -> 성공
// 인스턴스 메서드 액세스 클래스 변수 -> 성공
c.instance_static();
// 인스턴스를 사용하여 인스턴스 메서드에 액세스 -> 성공
// 인스턴스 변수의 인스턴스 메서드에 액세스 -> 성공
c.instance_instance();
// 클래스를 사용하여 클래스 메서드에 액세스 -> 성공
// 클래스 메서드가 클래스 변수에 액세스 -> 성공
C1.정적_정적();
// 클래스를 사용하여 클래스 메서드에 액세스 -> 성공
// 인스턴스 변수에 접근하는 클래스 메소드 -> 실패
C1.static_instance();
// 클래스가 있는 인스턴스 메서드 액세스 -> 실패
//C1.instance_static();
// 클래스가 있는 인스턴스 메서드 액세스 -> 실패
//C1.instance_instance();
}
}