멍발자의 개발
오버로드 & 클래스 멤버 & 인스턴스 멤버 본문
오버로드는 같은 이름으로 메서드를 정의하는 것이다.
1) 같은 이름으로 메소드를 정의한다.
2) (괄호 안에 들어가는)인수의 형태, 개수, 열이 다르게 한다.
=> 같은 역할을 하되, 결과값만 틀리게 하는 것이다.
인스턴스 멤버
객체로 이루어져 있다. 객체를 생성하지 않는 한 액세스 할 수 없는 것이 인스턴스 멤버이다.
일반적으로 쓰는 것이 인스턴스 멤버이다.
new에서 쓰는 건 거의 다 인스턴스다.
static 멤버
static 수식자가 붙은 클래스 멤버는 객체를 생성하지 않아도 멤버에 엑세스 할 수 있다.
클래스 멤버
클래스 변수에는 this 키워드를 사용할 수 없다.
클래스 메소드로부터 인스턴스 멤버에서 액세스 할 수 없다.
this 키워드는 "객체 자신의"라는 의미가 되는데 클래스 멤버는 클래스 자신과 연결되어 있기에 객체 자체의 멤버와 연결되지 않기 때문이다.
class Computer3 {
private String os;
private int memory;
public static int sum; // 클래스 변수
//생성자
public Computer3() {
this.os = null;
this.memory = 0;
sum++; // 생성자에서 클래스변수 sum에 엑세스 (참조)
System.out.println("PC가 만들어졌습니다.");
}
public void setOsMemory(String os, int memory) {
this.os = os;
this.memory = memory;
System.out.println("OS는 " + os+ "이고 메모리는 " + memory + "GB입니다.");
}
public static void showSum() {
System.out.println("생성된 PC는 " + sum + "대 만들었습니다.");
}
public void checkSum() {
if ( sum > 2 ) { // 인스턴스 메소드 내에서 클래스 변수 sum에 액세스 (참조)
System.out.println(" " + sum + "대의 PC가 만들어졌기 때문에 유지보수를 하세요.");
} else {
System.out.println(" "+ sum + "대 이하이므로 유지보수가 필요없습니다.");
}
}
}
public class ClassMemberFromInstanceMethod {
public static void main(String[] args) {
Computer3 com1 = new Computer3(); // Computer3 객체 생성 1번재
com1.setOsMemory("Windows 11", 64);
com1.checkSum();
Computer3 com2 = new Computer3(); // Computer3 객체 생성 2번재
com1.setOsMemory("Windows 10", 16);
com1.checkSum();
Computer3 com3 = new Computer3(); // Computer3 객체 생성 3번재
com1.setOsMemory("Android", 8);
com1.checkSum();
}
}
//결과
PC가 만들어졌습니다.
OS는 Windows 11이고 메모리는 64GB입니다.
1대 이하이므로 유지보수가 필요없습니다.
PC가 만들어졌습니다.
OS는 Windows 10이고 메모리는 16GB입니다.
2대 이하이므로 유지보수가 필요없습니다.
PC가 만들어졌습니다.
OS는 Android이고 메모리는 8GB입니다.
3대의 PC가 만들어졌기 때문에 유지보수를 하세요.
Comments