250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- shader
- 깃허브
- 최적화
- 애니메이션
- unity
- 튜토리얼
- 속성
- 파이널 IK
- 익명 타입
- 사용법
- 프로퍼티
- 유니티
- 에러
- github
- 2판
- 리깅
- 쉐이더
- Effective C#
- c#
- 오류
- 애님
- Final IK
- 리팩토링
- 유니티 그래픽 최적화
- 쓰는 법
- 유니티 그래픽스 최적화 스타트업
- error
- 메모리
- 오픈 월드
- tutorial
Archives
- Today
- Total
참치김밥은 최고의 한식이다
[Effective C# 2판] Item 9 : 다양한 동일성 개념들 사이의 상관관계를 이해하라 (Equals) 본문
이번 Item 에서는 이해하기 쉽게 세 줄 요약을 써 봤다~~
세 줄 요약 :
1. 값 타입을 만들 때는 Equals()를 재정의하고,
2. 참조 타입을 만들 때는 System.Object가 정의한 의미 체계를 따르지 않을 때(System.Object의 Equals()는 두 인수가 같은 객체를 참조할 때 true를 반환함)만 Equals()를 재정의하자.
3. 더불어 Equals()를 재정의하는 경우에는 GetHashCode()도 반드시 재정의해야 한다.
C#은 서로 다른 객체가 ‘같다’는 것을 결정하는 함수를 4가지나 가지고 있다.
public static bool ReferenceEquals(object left, object right);
public static bool Equals(object left, object right);
public virtual bool Equals(object right);
public static bool operator ==(MyClass left, MyClass right);
덧붙여, 만일 Equals()를 재정의하는 경우, IEquatable<T>를 구현해야 한다.
참조 타입의 경우, 두 객체가 동일한 객체를 참조하고 있다면 이 객체들은 동일하다고 간주한다. 이를 객체 ID가 동일하다고 한다.
값 타입의 경우, 두 객체의 타입이 일치해야 하고, 값의 내용 또한 일치해야만 동일한 객체로 판단한다.
이처럼 동일성을 판단하는 기준이 다르기 때문에 위와 같이 여러 가지 메서드가 필요하다.
- Object.ReferenceEquals()는 두 개의 참조 타입 객체가 동일한 객체를 참조하는 경우 true를 반환한다. 즉, 값 타입 오브젝트에게 이 메서드를 쓰면 항상 false를 반환한다.
아래 링크를 보면, 객체가 값 타입 일때와 참조 타입 일 때, Equals()와 ==로 동등성을 판단하는 방법이 다르다는 것을 알 수 있다. (내가 그 동안 헷갈렸던 이유)
https://dhshin94.tistory.com/81
728x90