파파비의 블로그

C#) object, Object, 오브젝트 class 본문

개발/c#

C#) object, Object, 오브젝트 class

N. Dave 2020. 4. 4. 10:22
반응형

c#에서 가장 상위의 class는 오브젝트 클래스이다.

 

1. 클래스를 만들 때 아무런 상속 표시를 하지 않는다면

자동으로 object class를 상속하게 된다.

 

2. object는 참조형 class이다.

그러나 하위에 valuetype이라는 class를 만들고 이를 상속하는 class들은 전부 값형식이다.

 

3. object는 c#의 키워드이다. 닷넷프레임워크 형식은 System.Object이다.

그런데 보통 System 네임스페이스를 사용하는 경우가 많아

Object만 쳐도 되는데, 그래서 object랑 Object랑 뭐가 다른지 궁금하게 느껴졌을 수도 있는데,

사실은 둘이 같다.

 

4. object는 4개의 함수가 구현되어있다.

 - ToString, GetType, GetHashCode, Equals

 

5. object의 ToString은 String화 하라는게 아니라,

해당 인스턴스의 class의 풀네임을 반환한다. string화 하는 tostring메소드는 이 메소드를 오버라이딩한 것이다.

따라서 적용하면 네임스페이스부터 클래스이름까지 함께 반환된다.

 

6. GetType은 인스턴스 내에 type인스턴스를 반환해준다.

class를 통해 인스턴스를 만들게 되면 자동으로 System.Type의 인스턴스 또한 내부적으로 갖게 된다.

Type인스턴스는 class에 관한 정보를 갖게 된다. 객체에 대한 정보가 아닌..

 

object ob = new object();

Type type = ob.GetType();

 

클래스에 대한 정보인데 객체를 통해 구하기가 불편하다고 생각할 수 있다.

그러면 typeof(class) 의 함수를 이용하면 된다.

 

Type type = typeof(int);

등으로 가능하다.

 

7. object의 Equals는 어떤 기능을 갖고 있을까?

같은 값인지 확인하고 맞으면 T/F? 반은 맞다.

값형식은 그렇게 한다.

참조형식은 다르다. 레퍼런스가 가르키는 위치가 같으면 T, 다르면 F이다.

서로 다른 2개의 객체가 존재하고, 그 둘의 값이 같아도 메모리 위치가 다르면

F를 반환하게 된다.

 

그런데 string class는 값을 확인해서 같으면 T를 반환하도록 오버라이드해 놨다.

 

8. GetHashCode

객체가 생성되면 4비트 크기의 고유번호를 갖게 된다. 그 고유번호를 비교해서 같은지 다른지 파악할 수 있다.

equals와 비슷한 맥락을 갖고 있다. 그래서 오버라이딩 할 때 둘다 함께 오버라이딩 하지 않으면 컴파일러에서 경고를 보낸다.

 

GetHashCode의 포인트가 있는데, 그 것은 바로 '해시충돌'이다.

4비트 크기의 고유번호이다보니, 8비트 수준의 long 객체나 이런 것들은 고유번호가 겹치는 경우가 생길 수 있다.

(물론 흔히 있는 일은 아니다)

그래서 equals로 2중으로 하면 더 안전하게 갈 수 있다.

 

 

 

 

반응형
Comments