toString() 메서드

Mia Lee·2022년 1월 10일
0

JAVA

목록 보기
88/98
package ex_object;

public class Ex3 {

	public static void main(String[] args) {

		/*
		 * 4. toString() 메서드
		 * 
		 */
		
		Person p1 = new Person("홍길동", 20);
		System.out.println("객체 p1의 정보 : " + p1.toString()); // ex_object.Person@15db9742 출력!
		// => toString() 메서드를 호출하면 "클래스명@해시코드값" 형태로 문자열 리턴
		
		// 출력문 내에서 참조변수 뒤에 toString() 메서드를 생략해도 toString() 결과가 출력
		System.out.println("객체 p1의 정보 : " + p1); // p1.toString() 와 동일한 결과
		
		System.out.println("=========================================");
		
		ToStringPerson p2 = new ToStringPerson("홍길동", 20);
		// toString() 메서드 오버라이딩 후에는 해당 객체의 멤버변수 값을 출력할 경우
		// 출력문에서 객체명.toString() 메서드를 호출하거나 toString() 메서드 없이
		// 객체명만으로 출력해도 멤버변수 값이 리턴되어 출력
		System.out.println("객체 p2의 정보 : " + p2.toString()); // 홍길동, 20 출력
		System.out.println("객체 p2의 정보 : " + p2); // toString() 메서드가 생략!
		
//		String person = p2; // 오류 발생!
		String person = p2.toString();
		
		// toString() 메서드가 적용된 대표적인 예 : String 클래스
		String str = "홍길동";
		System.out.println(str); // toString() 메서드 생략되어 있음!
		System.out.println(str.toString()); // 정석적인 문법
		
		
	}

}

// Person 클래스 내에서 toString() 메서드를 오버라이딩하여
// 이름과 나이 변수의 값을 문자열로 결합하여 리턴하도록 구현
class ToStringPerson {
	String name;
	int age;
	
	public ToStringPerson(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	// Object 클래스의 toString() 메서드 오버라이딩
//	@Override
//	public String toString() {
//		// 멤버변수 name과 age 값을 문자열로 결합하여 리턴
//		return name + ", " + age;
//		
//	}
	
	// toString() 메서드 자동 오버라이딩 단축키 : Alt + Shift + S -> s
	@Override
	public String toString() {
		return "ToStringPerson [name=" + name + ", age=" + age + "]";
	}
	
	
	
}








연습

package ex_object;

public class Test3 {

	public static void main(String[] args) {

		// 2명의 계좌 생성
		// 1) 계좌번호 : 111-1111-111, 예금주명 : 홍길동, 현재잔고 : 1000
		// 2) 계좌번호 : 111-1111-111, 예금주명 : 홍길동, 현재잔고 : 1000
		Account acc1 = new Account("111-1111-111", "홍길동", 1000);
		Account acc2 = new Account("111-1111-111", "홍길동", 4000);
		
		// equals() 메서드를 호출하여 두 객체가 같은지 판별하여
		// "두 계좌는 동일!" 또는 "두 계좌는 다름!" 출력
		if (acc1.equals(acc2)) {
			System.out.println("두 계좌는 동일!");
		} else {
			System.out.println("두 계좌는 다름!");
		}
		
		// toString() 메서드를 호출하여 계좌번호, 예금주명, 현재잔고를 출력
//		System.out.println(acc1.toString());
		System.out.println(acc1);
		System.out.println(acc2);
		
	}

}

/*
 * Account 클래스 정의
 * 멤버변수 : 계좌번호(accountNo, String 타입), 예금주명(ownerName, String 타입), 현재잔고(balance, int 타입)
 * 생성자 : 계좌번호, 예금주명, 현재잔고를 전달받아 초기화하는 생성자
 * equals() 메서드 오버라이딩 - 단축키X, null값 비교는 생략, 멤버변수 값만 비교
 * toString() 메서드 오버라이딩
 * ex) 계좌번호 = 111-1111-111, 예금주명 = 홍길동, 현재잔고 = 1000 원
 * 
 */
class Account {
	String accountNo;
	String ownerName;
	int balance;
	
	public Account(String accountNo, String ownerName, int balance) {
		super();
		this.accountNo = accountNo;
		this.ownerName = ownerName;
		this.balance = balance;
	}

	// Object 클래스의 equals() 메서드 오버라이딩
	@Override
	public boolean equals(Object obj) {
		// Account 클래스의 멤버변수 비교
		// 전달받은 obj의 객체 멤버변수에 접근하기 위해 다운캐스팅 필요!
		Account acc = (Account) obj;
		
		if (accountNo.equals(acc.accountNo)) {
			if (ownerName.equals(acc.ownerName)) {
				if (balance == acc.balance) {
					return true; // 모든 멤버변수 값이 일치할 경우 true 값 리턴
				}
			}
			
		}
		
//		if (accountNo.equals(acc.accountNo) && ownerName.equals(acc.ownerName) && balance == acc.balance) {
//			return true;
//			
//		}
		
//		if (accountNo.equals(acc.accountNo)) {
//			return true;
//		} else if (ownerName.equals(acc.ownerName)) {
//			return true;
//		} else if (balance == acc.balance) {
//			return true;
//		}
		// => OR 연산자랑 동일한 코드
		
		return false;
		
	}

	@Override
	public String toString() {
		return "계좌번호 = " + accountNo + ", 예금주명 = " 
				+ ownerName + ", 현재잔고 = " + balance + " 원";
	}
	
}

















```

0개의 댓글