동등성과 동일성 #12
Replies: 7 comments
-
동등성과 동일성이 무엇인지와 차이점에 대해 자유롭게 서술하시오동일성두 객체가 실제로 같은 대상인지을 판단한다. 동등성두 객체가 가진 내용이나 값니 같은지 판단한다. 요약 !!동일성은 바로 딱 그 객체인가? 도메인과 엔티티의 관점에서 동등성과 동일성 중 어떤 것을 기준으로 일치 판단을 해야할지 설명하시오.도메인 모델에서는 모든 객체를 하나의 기준으로 판단하지 않고 객체가 어떤 성격을 가지는지에 따라 다른 기준을 적용해야 한다. 엔티티엔티티는 고유한 식별자를 가지고 내부 상태가 변경될 수 있다. 따라서 엔티티는 속성값 전체가 아니라 식별자를 기준으로 동일성을 판단하는 것이 적절하다. 값 객체값 객체는 고유한 식별자 없이 객체가 가진 값 자체가 의미가 된다. 금액, 주소, 이메일, 좌표 등등 요약 !!엔티티는 고유한 식별자를 가지므로 동일성을 기준으로 일치 여부를 판단해야 하며 |
Beta Was this translation helpful? Give feedback.
-
동등성과 동일성이 무엇인지와 차이점에 대해 자유롭게 서술하시오동일성(Identity)은 두 객체의 메모리 주소가 같음을 의미한다. 동등성(Equality)은 두 객체의 값이 같음을 의미한다. 자바에서 동일성은 String s1 = new String("구가영");
String s2 = new String("구가영");
String s3 = s1;
System.out.println(s1 == s2); // false (서로 다른 객체임)
System.out.println(s1.equals(s2)); // true (이름 "구가영"은 같음)
System.out.println(s1 == s3); // true (같은 객체를 참조함)참고) String name1 = "팔가영";
String name2 = "팔가영";
System.out.println(name1 == name2); // true!!Java에서 문자열은 String Pool로 관리되므로, 두개의 String 변수를 따로 선언하여도 JVM Heap메모리의 String Pool에는 "팔가영" 하나의 문자열이 존재한다. 즉, name1과 name2는 메모리상 같은 주소를 바라보므로, 동등성과,동일성 모두 만족된다. 도메인과 엔티티의 관점에서 동등성과 동일성 중 어떤 것을 기준으로 일치 판단을 해야할지 설명하시오.엔티티(Entity)는 고유한 식별자를 가지고 있으며, 속성 값이 바뀌어도 여전히 같은 존재이다. 따라서 객체 내부의 속성값이 아닌, 식별자(ID)가 같은지를 확인하여 판단하므로, "동일성"을 기반으로 일치 판단을 해야한다. 예) 사용자, 주문, 상품 |
Beta Was this translation helpful? Give feedback.
-
|
동등성과 동일성이 무엇인지와 차이점에 대해 자유롭게 서술하시오 동일성 : 비교하고자 하는 두 참조 변수가 메모리 주소까지 완전히 같은, 하나의 고유한 객체를 가리키고 있는 상태 == 로 비교한다. 동등성 : 두 객체가 메모리 상에서는 서로 다른 주소에 독립하여 존재하더라도, 객체가 가진 내부 데이터나 정보가 논리적으로 일치하는 상태 커스텀 객체에서 동등성을 비교하고 싶다면 , equals() 랑 hashCode() 를 오버라이딩 해야한다. 동일하면 동등하다. 왜 커스텀 객체에서 equals() 랑 hashCode() 를 오버라이딩 해야하나? String, Integer, ArrayList, HashMap, Date 같은 객체에서는 이미 오버라이딩 되어있음. 그러나 오버라이딩 전 equals() 랑 hashCode() 를 그대로 쓰면 동등성 비교를 못함. 원래의 equals() 는 참조 변수를 비교할 때 쓰는 == 과 같은 의미이고. 원래의 hashCode() 는 객체에 랜덤한 수를 쥐어주고 식별할 때 쓰임. 따라서 동등성 비교를 위한 오버라이딩이 필요함. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
기본 질문1. 동등성과 동일성이 무엇인지와 차이점에 대해 자유롭게 서술하시오.객체지향 프로그래밍에서의 동등성과 동일성은 일반적인 의미와 다른 의미를 갖는다. 동등성: 동일성: 2. 도메인과 엔티티의 관점에서 동등성과 동일성 중 어떤 것을 기준으로 일치 판단을 해야할지 설명하시오.객체의 성격에 맞게 동등성을 기준으로 할지, 동일성을 기준으로 할지 구분하여 적용해야 한다. 일반적으로 엔티티는 동일성, 값 객체는 동등성으로 판단하는 것이 적절하다. 동일성은 일반적으로 두 객체가 같은 객체인지를 설명되지만, 도메인 관점에서는 동일한 식별자를 통해 같은 대상을 나타내는지도 포함한다. 엔티티는 속성값이 변경되더라도 지속적으로 같은 대상으로 추적되어야 하는 도메인 객체이다. 예를 들어 회원의 이름이나 주소가 변경되더라도 회원 ID가 같다면 동일한 회원으로 판단해야 한다. 반대로 이름과 생년월일 등의 속성값이 모두 같더라도 회원 ID가 다르다면 서로 다른 회원일 수 있다. 따라서 엔티티의 일치 여부는 속성값의 동등성이 아니라 고유 식별자를 기준으로 하는 동일성에 따라 판단해야 한다. 반면 값 객체는 고유한 식별자를 갖지 않고 객체를 구성하는 속성값 자체로 의미가 결정된다. 예를 들어 금액, 주소, 좌표와 같은 값 객체는 서로 다른 인스턴스로 생성되었더라도 모든 구성 값이 같으면 같은 값으로 판단할 수 있다. 따라서 값 객체의 일치 여부는 동일성이 아니라 속성값에 기반한 동등성으로 판단해야 한다. |
Beta Was this translation helpful? Give feedback.
-
1. 동등성과 동일성이 무엇인지와 차이점에 대해 자유롭게 서술하시오동일성은 서로 다른 참조 변수가 하나의 메모리 주소를 가리킬 때, 두 변수는 '동일하다'라고 합니다. 그리고 동등성은 서로 다른 메모리 주소라도 두 값이 논리적으로 같은 값이라면 '동등하다'고 합니다. 예를 들어 차이점을 쉽게 보자면, 하나의 휴대폰이 있고 두 사람이 그 휴대폰을 같이 가리킬때 이런 상황을 동일하다고 하며 서로 다른 휴대폰이 있지만 두 휴대폰이 기종이 같다면 내부 기능, 디자인이 같고 이를 동등하다고 합니다. 2. 도메인과 엔티티의 관점에서 동등성과 동일성 중 어떤 것을 기준으로 일치 판단을 해야할지 설명하시오.앞선 1. 물음의 설명에서 메모리 관점으로 동등성과 동일성을 비교했지만, 도메인과 엔티티의 관점으로 보자면 도메인 모델을 설계할 때, 객체의 성격에 따라 엔티티, 값 객체로 구분 지을 수 있고 엔티티는 동일성으로 값 객체는 동등성으로 일치를 판단합니다. 왜냐하면 엔티티는 식별자를 가지고 그 식별자로 객체를 추적하는 성격을 지닌 객체를 엔티티라고 합니다. 이때 식별자를 제외한 다른 속성값이 다르더라도 식별자가 같다면 동일 엔티티라고 보기 때문에 엔티티는 동일성으로 판단합니다. 그런데 메모리 관점으로 본다면 '메모리 주소 일치가 아니라 식별자라는 값이 논리적으로 같은지 판단하는데 동등성 아니냐'라고 혼란이 생길 수 있습니다. 하지만 이는 메모리 관점으로만 생각했을 때 발생하는 모순적 사고이며 도메인 모델 관점으로 확장해서 보면 메모리 관점으로 식별자가 동등하다면 도메인 관점에서 엔티티는 동일하다라고 판단합니다. 그리고 값 객체는 식별자가 아닌 객체가 가지는 값 그 자체로 의미를 가지는 객체를 값 객체라고 합니다. 이런 값 객체는 모든 속성의 값이 같다면 즉, 모든 속성이 동등하다면 일치한다고 판단합니다. 결론적으론 엔티티는 동일성, 값 객체는 동등성으로 일치를 판단합니다. |
Beta Was this translation helpful? Give feedback.
-
|
동등성과 동일성이 무엇인지와 차이점에 대해 자유롭게 서술하시오
MyClass a = new MyClass("hello ensharp");
MyClass b = a; // 자바에서 클래스 복사 시 얕은 복사가 일어남. 즉, 같은 위치의 데이터를 가리킴
System.out.print(a.content); // hello ensharp
System.out.print(b.content); // hello ensharp
System.out.print(a == b); // true
b.content = "hi ensharp";
// 둘다 변경됨.
System.out.print(a.content); // hi ensharp
System.out.print(b.content); // hi ensharp두 변수가 완전히 같은(동일성을 가지는) 경우가 아니더라도 같다고 생각해볼 수 있는 경우가 있다. 내부의 모든 데이터가 같을 때이다. 이를 두 변수가 동등성을 가진다고 한다. MyClass a = new MyClass("hello ensharp");
MyClass b = new MyClass("hello ensharp");
System.out.print(a.equals(b)); // true
b.content = "hi ensharp";
System.out.print(a.content); // hello ensharp
System.out.print(b.content); // hi ensharp도메인과 엔티티의 관점에서 동등성과 동일성 중 어떤 것을 기준으로 일치 판단을 해야할지 설명하시오. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
📆 일자: 26년 7월 13일(월)
기본 질문 (필수)
참고 래퍼런스
동등성과 동일성
Beta Was this translation helpful? Give feedback.
All reactions