반응형
클래스는 데이터와 기능의 집합입니다.
클래스를 만드는 목적은 프로그램의 실행부에서 가져다 쓸 데이터 또는 기능을 정의하는 것이에요.
데이터와 기능이 든 주머니라고 생각하면 좋을 것 같아요.
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());
}
}
반응형
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 13. 클래스 변수와 인스턴스 변수, 지역 변수, 클래스 메소드와 인스턴스 메소드 (0) | 2022.10.27 |
---|---|
자바 기초 공부 일지 12. 생성자와 String 클래스 (수정중) (0) | 2022.10.27 |
자바 기초 공부 일지 10. 메소드의 재귀 호출 (0) | 2022.10.26 |
자바 기초 공부 일지 9. 메소드 method (0) | 2022.10.26 |
자바 기초 공부 일지 8. 반복문 while문, for문, break와 continue, 중첩 반복문 (0) | 2022.10.25 |