5회차 미션
배운내용,깨달은 점
예외 처리와 자바의 Call By Reference, Call By Value, 오버라이딩
https://transfer-kk.tistory.com/66
[Java] Java에서의 equals와 hashCode
기본적으로 equals()함수는 boolean equals(Object obj)로 정의되며 2개의 객체가 동일한지 검사하기 위해 사용된다. 2개의 객체가 가리키는 곳이 동일한 메모리 주소일 경우에만 동일한 객체가 된다. publi
transfer-kk.tistory.com
https://transfer-kk.tistory.com/65
[Java] Java의 Call by Value 와 Call by Reference
Call by Reference는 함수의 인자를 전달할 때 주소를 전달하는 방식으로 Pass by Value, Pass by Reference라고도 한다. 대표적으로 C++이 사용한다. 반면 Java는 Call by Value를 사용하며, Call by Value는 함수의 인
transfer-kk.tistory.com
어려웠던 점, 반성하고 싶은 점/개선할 방법
예외 처리에 있어서 try문에서 에러가 일어나면 그 즉시 catch문으로 옮겨진다는 사실을 간과하여 마지막 미션을 하는데 오래걸렸습니다. 좀 더 제대로 개념을 알고 나서 문제를 풀어볼 수 있도록 해야겠습니다.
미션제출
연습문제 1 Call by Reference, Call by Value
// Money.java
public class Money {
private int value;
public Money(int value) {
this.value = value;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Money money1 = new Money(500);
Money money2 = new Money(500);
System.out.println(money1 == money2);
System.out.println(money1.equals(money2));
}
}
위의 코드에서 전부 false가 나오는 이유
=> money1,money2는 참조타입으로 Heap Memory 영역에 생성된 객체의 주소값을 참조하기 때문에 '참조 타입'이라고 불립니다.
따라서 첫 번째 케이스와 두번째 케이스는 money1과 money2가 서로 다른 주소값을 지니기 때문에 false가 나온 것입니다.
==은 주소 값 즉, 메모리 번지가 같은지 비교하는 연산
equals는 객체의 값을 비교할 때 값 자체를 비교하는 함수
연습문제 2 equals(), hashCode()
아래의 코드 출력값이 false, true가 나오도록 Money.java의 코드를 수정하기
// Money.java
package sixth.mission_2;
import java.util.Objects;
public class Money {
private int value;
public Money(int value) {
this.value = value;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Money money = (Money) o;
return value == money.value;
}
@Override
public int hashCode() {
return Objects.hash(value);
}
}
//Main.java
public class Main {
public static void main(String[] args) {
Money money1 = new Money(500);
Money money2 = new Money(500);
System.out.println(money1 == money2);
System.out.println(money1.equals(money2));
}
}
// @override란?
=> 오버라이드 메소드를 만들었는데 실수로 함수를 잘못쓰는 경우가 생겨 오버라이드를 못하는 경우를 막는 어노테이션으로 @override를 사용하고 함수가 오버라이드를 하지 못하도록 잘못 쓰면 에러를 발생시켜준다.
연습문제 3
import static java.lang.Integer.parseInt;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean isContinued = true;
while (isContinued) {
System.out.println("숫자를 입력해주세요.");
String input = scanner.nextLine();
int number = 0;
try {
number = parseInt(input);
System.out.println("입력하신 숫자는 " + number + "입니다.");
} catch (NumberFormatException e) {
System.out.println("잘못된 값을 입력하셨습니다.");
}
}
}
}
연습문제 4
// Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("휴대폰 번호를 입력해주세요. ");
String input = scanner.nextLine();
PhoneNumber phoneNumber = new PhoneNumber(input);
System.out.println(
"휴대폰 번호를 정상적으로 입력하셨습니다. 입력하신 휴대폰 번호는 " + phoneNumber.getPhoneNumberFormally() + "입니다.");
}
}
// PhoneNumber.java
import java.util.Scanner;
public class PhoneNumber {
private String value;
protected PhoneNumber(String value) {
try {
this.validate(value);
this.value = value;
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
this.inputPhoneNumberAgain();
}
}
private void validate(String phoneNumber) {
if (phoneNumber.length() != 11) {
throw new IllegalArgumentException("휴대폰 번호는 11글자여야 합니다.");
}
if (!phoneNumber.substring(0, 3).equals("010")) {
throw new IllegalArgumentException("휴대폰 번호는 010으로 시작해야 합니다.");
}
}
private void inputPhoneNumberAgain() {
Scanner scanner = new Scanner(System.in);
System.out.println("휴대폰 번호를 입력해주세요. ");
String inputValue = scanner.nextLine();
try {
this.validate(inputValue);
this.value = inputValue;
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
this.inputPhoneNumberAgain();
}
}
protected String getPhoneNumberFormally() {
String phoneNumber = this.value;
String phoneNumberFormally =
phoneNumber.substring(0, 3) + '-' + phoneNumber.substring(3, 7) + '-'
+ phoneNumber.substring(7, 11);
return phoneNumberFormally;
}
}
궁금한 점
1. 오늘은 없습니다! 항상 좋은 피드백 감사드립니다!
'Java > Java 스터디' 카테고리의 다른 글
Java 입문 스터디 마지막 회고 (0) | 2023.02.27 |
---|---|
Java 입문 클래스 7회차 미션 (3) | 2023.02.24 |
Java 입문 클래스 5회차 미션 (2) | 2023.02.17 |
Java 입문 클래스 4회차 미션 (8) | 2023.02.13 |
Java 입문 클래스 3회차 미션 (2) | 2023.02.10 |
댓글