[윤성우의 열혈 Java 프로그래밍] Chapter 07 클래스와 인스턴스
개인적으로 헷갈리는 것 중요한 것 위주로 정리해두고 연습문제를 풀어본 글입니다.
클래스 내에는 인스턴스 변수와 인스턴스 메소드가 있다. (각각 클래스 내의 변수와 메소드)
클래스 안에 있는 변수와 메소드는 인스턴스 를 만들어서 사용할 수 있다. (new 사용)
class BankAccount {
// 인스턴스 변수
int balance = 0;
// 인스턴스 메소드
public int deposit(int amount) { }
public int withdraw(int amount) { }
public int checkMyBalance() { }
}
BankAccount myAcnt; // 참조변수 선언
myAcnt = new BankAccount(); // 인스턴스 생성
BankAccount myAcnt = new BankAccount(); // 위의 두 문장을 한번에!
//예제
class BankAccount {
int balance = 0;
public int deposit(int amount) { //예금
balance += amount;
return balance;
}
public int withdraw(int amount) { //출금
balance -= amount;
return balance;
}
public int checkMyBalance() {
System.out.println("잔액 : " + balance);
return balance;
}
}
class BankAccountOO {
public static void main(String[] args) {
//두 개의 인스턴스 생성
BankAccount kim = new BankAccount();
BankAccount lee = new BankAccount();
//예금
kim.deposit(5000);
lee.deposit(3000);
//출금
kim.withdraw(2000);
lee.withdraw(2000);
//잔액 조회
kim.checkMyBalance();
lee.checkMyBalance();
}
}
/*
출력 결과 (java BankAccountOO)
잔액 : 3000
잔액 : 1000
*/
참조변수는 참조하는 인스턴스 값을 바꿀 수 있다. 또한 하나의 인스턴스를 다수의 참조변수가 동시에 참조할 수 있다.
참조변수가 갖고있던 인스턴스 값을 버릴 때 null을 대입하면 된다.
BankAccount ref = new BankAccount();
ref = null; //null 값 대입
- String 클래스는 문자열을 참조변수로 선언할 수 있다.
String myLanguage = "Korean";
main 메소드를 갖고있지 않는 클래스에 있는 변수와 메소드를 사용하려면
인스턴스를 생성하여 사용할 수 있다.
ex)
class A { //main 없음 }
class B { //main 있음
A first = new A();
//first.-- 로 A의 변수와 메소드 사용 가능
//이때 first가 참조변수
}
- 생성자는 인스턴스를 생성할 때 초기화를 위해 자동으로 호출되는 메소드이다.
생성자의 이름은 클래스 이름과 동일해야 한다.
생성자는 반환형 값이 없고 표시하지 않는다.
* BankAccount 클래스 내부에서는 정의한 accNumber, ssNumber, balance만 사용하고
외부에서 BankAccount를 사용할 때 생성자로 정의한 acc, ss, bal을 사용한다!
- 디폴트 생성자
public BankAccount( ) { }
컴파일러가 자동으로 넣어주는 것으로 인자를 전달받지 않는 형태지만,
이것으로 인스턴스 생성을 위한 생성자 호출 조건을 부합할 수 있다. (엔간하면 직접 생성자 정의)
클래스 이름 > 첫 문자는 대문자 ex.AppleBanana
메소드 이름 > 첫 문자는 소문자 ex.appleBanana
상수 이름 > 모든 문자를 대문자 단어연결 시 언더바(_) ex.APPLE_BANANA
<문제 07-1.>
class Triangle {
int base;
int height;
//생성자 정의
public Triangle(int b, int h) {
base = b;
height = h;
}
public void setBase(int b) { //밑변 변경
base = b;
}
public void setHeight(int h) { //높이 변경
height = h;
}
public double TriangleArea() { //넓이 계산
return (base * height) * 0.5;
}
}
class ApplicTriangle {
public static void main(String[] args) {
Triangle shape = new Triangle(5, 7);
System.out.println("삼각형의 넓이 : " + shape.TriangleArea());
shape.setBase(10); //밑변 변경
shape.setHeight(8); //높이 변경
System.out.println("바뀐 삼각형의 넓이 : " + shape.TriangleArea());
}
}
/*
출력결과
삼각형의 넓이 : 17.5
바뀐 삼각형의 넓이 : 40.0
*/