Day 16 (23.01.16)

Jane·2023년 1월 16일
0

IT 수업 정리

목록 보기
16/124

1. 참조변수 예제 (BankAccount 클래스)

1-1. ref 변수의 주소값 참조

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;
	}

}

public class BankAccountTest {

	public static void main(String[] args) {
		BankAccount ref1 = new BankAccount();
		BankAccount ref2 = ref1;
		
		System.out.println(ref1);
		System.out.println(ref2);
		
		ref1.deposit(3000);
		ref2.deposit(2000);
		ref1.withdraw(400);
		ref2.withdraw(300);
		ref1.checkMyBalance();
		ref2.checkMyBalance();
	}

}

[Console]
BankAccount@4926097b (ref1은 새 객체를 참조한다 / 새 객체의 주소값)
BankAccount@4926097b (ref2는 ref1을 참조한다)
잔액 : 4300 (ref1.checkMyBalance())
잔액 : 4300 (ref2.checkMyBalance())

1-2. 참조변수를 매개변수로 사용하기

  • 참조형 데이터타입을 변수선언을 한 다음에 사용할 수 있다.
    public static void check(BankAccount acc)
  • 데이터타입을 넘겨받으면 그 안에는 주소값이 들어간다.
public class BankAccountTest {

	public static void main(String[] args) {
		BankAccount ref = new BankAccount();
		ref.deposit(3000);
		ref.withdraw(300);
		check(ref);

	}

	public static void check(BankAccount acc) {
		acc.checkMyBalance();
	}
}

2. 참조변수를 매개변수로 사용하는 예제 (Triangle 클래스)

  • void compare(Triangle t) :: Triangle 객체의 밑변과 높이를 비교하는 함수
  • void compareArea(Triangle t) :: Triangle의 면적을 비교하는 함수
class Triangle {
	int base;
	int height;

	void initTriangle(int a, int b) {
		base = a;
		height = b;
	}

	double getArea() {
		return (base + height) / 2.0;
	}

	void compare(Triangle t) {
		if ((base == t.base) && (height == t.height)) {
		/*
        함수 안의 base와 변수 t의 base가 같으면서,
        함수 안의 height와 변수 t의 height가 같을 때
		*/
			System.out.println("같은 삼각형입니다");
		} else {
			System.out.println("다른 삼각형입니다");
		}
	}

	void compareArea(Triangle t) {
		if (getArea() == t.getArea()) {
        /*
        함수 안의 면적(getArea)과 변수 t의 면적(getArea)이 같을 때
		*/
			System.out.println("같은 면적입니다");
		} else {
			System.out.println("다른 면적입니다");
		}
	}
}

public class ObjectTest {

	public static void main(String[] args) {
		Triangle triangle = new Triangle();
		triangle.initTriangle(10, 5);

		Triangle triangle2 = new Triangle();
		triangle2.initTriangle(10, 5);

		triangle.compare(triangle2); // 같은 삼각형입니다.
		triangle2.initTriangle(10, 10);
		triangle.compare(triangle2); // 다른 삼각형입니다.

		triangle2.initTriangle(5, 10);
		triangle.compareArea(triangle2);// 같은 면적입니다.
		triangle2.initTriangle(3, 4);
		triangle.compareArea(triangle2);// 다른 면적입니다.
	}

}

3. 참조형에서의 null 사용

3-1. null 개요

  • 참조형에서는 null 사용이 가능하다 (나머지 8가지의 데이터타입에서는 사용할 수 없다)
  • null : 참조의 연결을 끊는다 / 아무 것도 할당하지 않은 초기화된 상태 / 메모리를 회수해도 좋다는 뜻
public class ObjectTest {

	public static void main(String[] args) {
		Triangle triangle = new Triangle();
		System.out.println(triangle);

		triangle = null;
		System.out.println(triangle);

	}

}

[Console]
Triangle@4926097b (new 객체를 할당받은 주소)
null (null로 할당공간을 비움)

3-2. 참조형에서 만날 수 있는 Error

Triangle triangle_new;
System.out.println(triangle_new.getArea());
  • 할당하지 않은 객체는 Compile Error가 발생한다.
Triangle triangle_new = null;
System.out.println(triangle_new.getArea());
  • 변수에 null을 넣어두면 NullError가 발생한다.
  • null을 사용할 때는 if문을 사용하여 check를 해준다
public class ObjectTest {

	public static void main(String[] args) {

		Triangle triangle_new = null;
		if(triangle_new != null) {
			System.out.println(triangle_new.getArea());
		}
	}

}

4. String (문자열) 사용하기

  • String은 참조형 데이터타입 (4byte)
  • Java 프로그램에서 만들어서 제공한다.
  • 변수는 메모리에 올라간 특정 문자열의 첫번째 주소값을 담는다.

4-1. String 연습

public class ObjectTest {

	public static void main(String[] args) {
		String str1 = "Happy";
		String str2 = "Birthday";
		System.out.println(str1 + " " + str2);

		printString(str1);
		printString(str2);
	}

	public static void printString(String str) {
		System.out.println(str);

	}
}

[Console]
Happy Birthday
Happy
Birthday

4-2. BankAccount 클래스에서의 String 활용

  • String accNumber, String ssNumber : 각각 계좌번호, 주민번호의 문자열 변수를 만든다
  • initAccount(String acc, String ss, int bal) : 계좌번호, 주민번호, 잔고를 초기화해주는 함수
class BankAccount {
	String accNumber; // 계좌번호
	String ssNumber; // 주민번호
	int balance = 0; // 예금 잔액
	
	public void initAccount(String acc, String ss, int bal) {
		accNumber = acc;
		ssNumber = ss;
		balance = bal;
	}

	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;
	}

}

public class BankAccountTest {

	public static void main(String[] args) {
		BankAccount yoon = new BankAccount();
		yoon.initAccount("12-34-89", "970130-2000000", 10000);
		yoon.checkMyBalance();
	}

}

4-3. Baby 클래스에서의 String 활용

  • String name : 아이의 이름을 집어넣을 String 자료형의 변수
  • initBaby(age, name(String)) : 아이의 나이와 이름을 초기화하는 함수
  • show() : 나이와 이름 출력
class Baby {
	int age; // instance 변수
	String name;
	
	void initBaby(int a, String b) {
		age = a;
		name = b;
	}
	
	void show() {
		System.out.println(age + "살 " + name + "입니다");
	}
	
	void setAge(int num) { // 나이를 설정하는 함수
		age = num;
	}
	
	int getAge() { // 나이를 리턴하는 함수
		return age;
	}
}

public class ObjectTest {

	public static void main(String[] args) {

		Baby baby = new Baby();
		baby.initBaby(5,"아기");
		baby.show();
	}

}

[Console]
5살 아기입니다

4-4. Baby 클래스 나이 비교하기

  • compareAge(Baby b) : 나를 기준으로 변수로 받은 객체의 나이를 비교하기
class Baby {
	int age; // instance 변수
	String name;

	void initBaby(int a, String b) {
		age = a;
		name = b;
	}

	void show() {
		System.out.println(age + "살 " + name + "입니다");
	}

	void compareAge(Baby b) {
		if (age > b.age) {
			System.out.println("내가 형입니다.");
		} else if (age == b.age) {
			System.out.println("동갑입니다.");
		} else {
			System.out.println("내가 동생입니다.");
		}
	}
}

public class ObjectTest {

	public static void main(String[] args) {

		Baby baby = new Baby();
		baby.initBaby(5, "아기");
//		baby.show();
		
		Baby baby2 = new Baby();
		baby2.initBaby(6, "아기2");
		
		Baby baby3 = new Baby();
		baby3.initBaby(5, "아기3");
		
		Baby baby4 = new Baby();
		baby4.initBaby(4, "아기4");
		
		baby.compareAge(baby2); // 5살과 6살 비교
		baby.compareAge(baby3); // 5살과 5살 비교
		baby.compareAge(baby4); // 5살과 4살 비교
	}

}

[Console]
내가 동생입니다.
동갑입니다.
내가 형입니다.

profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글