refactoring : mutable data - change reference to value

This commit is contained in:
haerong22
2022-03-14 11:45:39 +09:00
parent 9738221070
commit 2fcf164ccb
5 changed files with 123 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
package com.example.refactoring._06_mutable_data._23_change_reference_to_value;
public class Person {
private TelephoneNumber officeTelephoneNumber;
public String officeAreaCode() {
return this.officeTelephoneNumber.areaCode();
}
public void officeAreaCode(String areaCode) {
this.officeTelephoneNumber = new TelephoneNumber(areaCode, this.officeNumber());
}
public String officeNumber() {
return this.officeTelephoneNumber.number();
}
public void officeNumber(String number) {
this.officeTelephoneNumber = new TelephoneNumber(this.officeAreaCode(), number);
}
}

View File

@@ -0,0 +1,36 @@
package com.example.refactoring._06_mutable_data._23_change_reference_to_value;
import java.util.Objects;
public class TelephoneNumber {
private final String areaCode;
private final String number;
public TelephoneNumber(String areaCode, String number) {
this.areaCode = areaCode;
this.number = number;
}
public String areaCode() {
return areaCode;
}
public String number() {
return number;
}
@Override
public int hashCode() {
return Objects.hash(areaCode, number);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
TelephoneNumber that = (TelephoneNumber) obj;
return Objects.equals(areaCode, that.areaCode) && Objects.equals(number, that.number);
}
}

View File

@@ -0,0 +1,23 @@
package com.example.refactoring._06_mutable_data._23_change_reference_to_value.before;
public class Person {
private TelephoneNumber officeTelephoneNumber;
public String officeAreaCode() {
return this.officeTelephoneNumber.areaCode();
}
public void officeAreaCode(String areaCode) {
this.officeTelephoneNumber.areaCode(areaCode);
}
public String officeNumber() {
return this.officeTelephoneNumber.number();
}
public void officeNumber(String number) {
this.officeTelephoneNumber.number(number);
}
}

View File

@@ -0,0 +1,24 @@
package com.example.refactoring._06_mutable_data._23_change_reference_to_value.before;
public class TelephoneNumber {
private String areaCode;
private String number;
public String areaCode() {
return areaCode;
}
public void areaCode(String areaCode) {
this.areaCode = areaCode;
}
public String number() {
return number;
}
public void number(String number) {
this.number = number;
}
}

View File

@@ -0,0 +1,17 @@
package com.example.refactoring._06_mutable_data._23_change_reference_to_value;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class TelephoneNumberTest {
@Test
void testEquals() {
TelephoneNumber telephoneNumber1 = new TelephoneNumber("123", "1234");
TelephoneNumber telephoneNumber2 = new TelephoneNumber("123", "1234");
assertEquals(telephoneNumber1, telephoneNumber2);
}
}