좀 쉬다가 오니깐 공부가 더 잘되는 느낌이다.
오늘 사용하지도 않는 WAF때문에 aws 과금이 계속 되고있는 걸 발견^^
필터링을 잘못해놓고 다 삭제했다고 생각했다. 잘 확인하자~~
int a = 10;
int b = a;//기본 타입은 값을 복사
b = 4;
이 경우는 값을 전달하므로 b의 값을 4로 변경하여도 a의 값은 여전히 10이다.
Address a = new Address(“Old”);
Address b = a; //객체 타입은 참조를 전달
b.setCity(“New”)
하지만 객체 타입은 참조를 전달하기 때문에 b의 city값을 "New"로 변경하면 a의 city 값도 의도하지 않았지만 "New"로 변경된다.
이러한 부작용을 원천 차단하기 위해서 객체 타입을 수정할 수 없게 만들어야한다.
즉, 객체타입을 불변 객체로 만들어야된다. 불변객체는 생성 시점 이후 절대 값을 변경할 수 없는 객체이다.
따라서 생성자로만 값을 설정하고 setter를 만들지 않거나 private으로 만들면 된다.
동일성 비교: 인스턴스 참조 값(reference)을 비교, ==사용
동등성 비교: 인스턴스 값(value)을 비교, equals()사용
Address a = new Address(“Old”);
Address b = new Address("Old");
System.out.println(a == b) //false
System.out.println(a.equals(b)) //true
객체타입은 ==을 사용하여 비교하면 값은 같더라도 false이다.
값이 같은 경우 true를 얻고싶으면 equals 함수를 사용하여야한다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
return Objects.equals(city, address.city) && Objects.equals(street, address.street) && Objects.equals(zipcode, address.zipcode);
}
@Override
public int hashCode() {
return Objects.hash(city, street, zipcode);
}
==으로 되어있기때문에 꼭 override 해줘야한다.