자바/자바 입문 공부일지

자바 기초 공부 일지 11 . ★ 클래스와 인스턴스, 삼각형의 넓이 구하기

Tomitom 2022. 10. 27. 10:14
반응형

 

 

클래스는 데이터와 기능의 집합입니다.

클래스를 만드는 목적은 프로그램의 실행부에서 가져다 쓸 데이터 또는 기능을 정의하는 것이에요. 

데이터와 기능이 든 주머니라고 생각하면 좋을 것 같아요.

 

public class BankCustomer {

    public static void main(String[] args) {
       
    }
}
만약 BankCustomer 이라는 main 클래스를 만들면서 이 클래스 안에서 쓸 다른 클래스를 만든다고 한다면 
상단에 class를 추가해서 만들 수 있습니다. 
 
class Account{
    int balance = 0;        // 인스턴스 변수
    void deposit(int money) {     // 인스턴스 메소드(규칙 : static을 쓰면 안 된다.)
        balance = money;
    }
    void check() {          // 인스턴스 메소드
        System.out.println("잔액은 : " + balance + "원 입니다.");
    }
 
이제 Account 라는 클래스가 새로 생겼습니다. 
이 안에는 변수와 메소드가 들어있습니다. 마치 주머니처럼요!
이제 이 클래스로 붕어빵이나 도장 찍듯이 main 클래스에서 여러 개의 인스턴스를 만들어볼게요.
 
 
public class BankCustomer {

    public static void main(String[] args) {
               
 
        // Account 라는 붕어빵 틀에 반죽을 넣고 붕어빵을 만들게요! = 인스턴스 생성
 
        Account a = new Account() ;    // Account형 변수 a를 새롭게 찍어낸다. 계좌 인스턴스가 만들어짐.
        a.deposit(1000);          //이제 a 변수로 클래스 Account 를 사용할 수 있습니다. 
        a.check();          // a라는 객체는 Account 클래스의 인스턴스다.
 
// a로 참조시켜서 (참조변수가 됩니다.) 참조데이터를 만들고, 참조자들이 참조자료에 접근하는 것입니다. 
   
    }

}
이렇게 완성된 코드를 전체적으로 보겠습니다. 
 
 
package day13;




class Account{
	int balance = 0; // 인스턴스 변수 
	void deposit(int money) {   // 인스턴스 메소드(규칙 : static을 쓰면 안 된다.) 
		balance = money;
	}
	void check() {    // 인스턴스 메소드
		System.out.println("잔액은 : " + balance + "원 입니다.");
	}
}

public class BankCustomer {

	public static void main(String[] args) {
				
		// Account 라는 붕어빵 틀에 반죽을 넣고 붕어빵을 만든다 = 인스턴스 생성
		Account a = new Account() ; // 새로운 Account형 변수 a를 찍어낸다. 계좌 인스턴스가 만들어짐. 
		a.deposit(1000);  // a라는 객체는 Account 클래스의 인스턴스다. 
		a.check();
	
	}

}

 

참조변수는 여러 개를 만들 수 있고, 참조한 값을 다시 참조할 수도 있습니다. 

그 경우 참조를 하고 있는 a에 대해서 b가 a를 참조하게 되기 때문에 

a의 값과 b의 값이 동일하게 출력 됩니다. 

여기까지를 바탕으로 새로운 클래스를 생성해서 은행 잔액 계산하는 기능을 만들어볼게요. 

 

package day13;

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 DupRef {
	public static void main(String[] args) {
		BankAccount ref1 = new BankAccount();
		BankAccount ref2 = new BankAccount();
		//BankAccount ref2 = ref1; 같이 참조할 경우 같은 값이 나옵니다. // 
		
		ref1.deposit(3000);
		ref2.deposit(2000);
		ref1.withdraw(800);
		ref2.withdraw(300);
		ref1.checkMyBalance();
		ref2.checkMyBalance();
		
			}

}

 
 
 
package day13;

class BankAccount {     // main 에 참조할 클래스를 새로 생성합니다.
    int balance = 0;    // 초기의 잔액balance은 0 으로 지정합니다.
   
    public int deposit(int amount) {    // 여기에서 public 이란 다른 클래스에서도 참조할 수 있도록 열어두는 것이에요.
            balance += amount;              // 값amount을 받아서 잔액에 추가하고 그 잔액을 return 하여 int 값으로 반환합니다.
        return balance;                 // deposit 입금 메소드를 생성했어요.
    }
   
    public int withdraw(int amount) {
        balance -= amount;              // amount 출금 메소드를 생성했어요.
        return balance;
    }
   
    public int checkMyBalance() {
        System.out.println("잔액 : " + balance); // checkMyBalance 잔액 메소드를 생성했어요.
        return balance;
    }
}


class DupRef {                      //main이 될 DupRef 클래스를 생성합니다.
    public static void main(String[] args) {
        BankAccount ref1 = new BankAccount();   // 앞서 만들었던 BankAccount 클래스로 ref1 참조 데이터를 만듭니다!
        BankAccount ref2 = new BankAccount();  // 객체에 대한 참조값은 메모리 주소를 의미합니다. 
        //BankAccount ref2 = ref1; 만약 이렇게 작성을 하면 같은 값이 나옵니다. //
       
        ref1.deposit(3000);
        ref2.deposit(2000);
        ref1.withdraw(800);
        ref2.withdraw(300);
        ref1.checkMyBalance();
        ref2.checkMyBalance();
       
            }

}
 
즉 클래스란 참조 자료의 설계도라고 보시면 됩니다. 
참조하고 있는 인스턴스와의 관계를 끊기 위해서는 null 을 참조하면 됩니다.
ref1 = null;      // 메모리에는 ref1 이 남아있지만 사용할 수 없는 상태가 됩니다. (쓰레기 데이터!) 

아래는 클래스를 참조해서 예제들을 작성해보았어요. 

 

package day13;

class Cat{
	String name;
	String pattern; 
	Cat(String n, String p){
		name = n;
		pattern = p; 
	} 
	
	void introduce() {
		System.out.println("내 이름은 : " + name);
		System.out.println("내 무늬는 : " + pattern);
	}
}

public class Test {
	public static void main(String[] args) {
		Cat c1 = new Cat("국희","고등어");
		c1.introduce();
	}

}
 
package day13;

class Cat{
    String name;
    String pattern;
    Cat(String n, String p){
        name = n;
        pattern = p;
    }
   
    void introduce() {
        System.out.println("내 이름은 : " + name);
        System.out.println("내 무늬는 : " + pattern);
    }
}

public class Test {
    public static void main(String[] args) {
        Cat c1 = new Cat("국희","고등어");
        c1.introduce();
    }

}
 
 
이제 클래스를 활용해서 삼각형의 밑변과 높이로 넓이를 계산하는 프로그램을 작성해볼게요. 
 
package day13;
/*
 * 밑변과 높이 정보를 저장할 수 있는 클래스 Triangle을 정의하자
 * 밑변과 높이 정보를 전달받을 수 있는 생성자와 
 * 밑변과 높이 정보를 변경할 수 있는 메소드와
 * 삼각형 넓이를 계산해서 반환하는 메소드를 함께 정의하자 
 * 클래스 완성 후에는 main 메소드에서 객체 생성 및 사용해보자 
 */

	class Triangle{
		double bottom, height;
		
		Triangle(double bt, double hg){
			bottom = bt;
			height = hg;
		}
		
		void check(double bt, double hg) {
			bottom = bt;
			height = hg;
		}
		
		double getArea() {
			return bottom * height / 2 ; 
		}
	}	

	
	public class Quiz {
		public static void main(String[] args) {
			Triangle a = new Triangle(5, 10);
			System.out.println(a.getArea());
	}

}
package day13;
/*
 * 밑변과 높이 정보를 저장할 수 있는 클래스 Triangle을 정의하자
 * 밑변과 높이 정보를 전달받을 수 있는 생성자와
 * 밑변과 높이 정보를 변경할 수 있는 메소드와
 * 삼각형 넓이를 계산해서 반환하는 메소드를 함께 정의하자
 * 클래스 완성 후에는 main 메소드에서 객체 생성 및 사용해보자
 */

    class Triangle{
        double bottom, height;
       
        Triangle(double bt, double hg){
            bottom = bt;
            height = hg;
        }
       
        void check(double bt, double hg) {
            bottom = bt;
            height = hg;
        }
       
        double getArea() {
            return bottom * height / 2 ;
        }
    }  

   
    public class Quiz {
        public static void main(String[] args) {
            Triangle a = new Triangle(5, 10);
            System.out.println(a.getArea());
    }

}

 

반응형