2023. 10. 23. 17:10ㆍGame Develop/C# Programming
저번 시간에 클래스의 기초에 대해서 공부했다. 이번 시간은 클래스의 심화, 깊은 복사와 얕은 복사에 대해 알아보려고 한다.
C#에서 데이터 반환 형식은 두 가지가 있다. 바로 값 형식과 참조 형식이다.
값 형식의 예시 : int, float, char, bool , 구조체 등등 자주 사용하는 기본 자료형들
참조 형식의 예시 : 배열, string, 클래스 등등
(클래스와 구조체의 가장 큰 차이점이 바로 이 반환 형식이다.)
자 예전에 말한 한정자 중에 ref와 out을 기억하는가?
이들이 바로 값 형식인 메서드나 구조체에서 데이터 자체를 참조할 때 사용하는 한정자였다.
위의 내용을 잘 알아두면 얕은 복사와 깊은 복사를 이해하는 데에 큰 어려움은 없을 것이다.
자 이제 복사 형식에 대해 직접 코드를 작성하면서 알아가보자.
우리는 강아지 두 마리를 만들어서 각각 다른 이름과, 색깔, 울음 소리를 가지게 할 것이다.
제일 먼저 클래스를 작성해주자!
자 점박이 색깔의 멍멍! 하고 짖는 피터라는 강아지 객체를 만들어주었다.
다른 개도 하나 만들어 주어야하는데 저번과는 다르게 복사해서 복사하는 걸로 만들어주자.
어!? 분명 p2 객체를 만들어 주고 이름, 색깔, 울음소리를 바꿔 줬는데 p1, p2 모두 찰스로 나온다.
어떻게 된 영문일까? 그것은 바로 위에서 언급한 클래스는 참조 형식이기 때문이다.
따라서 p2 = p1 문장에서 p1의 저장공간 자체를 대입 해버렸기 때문에 p1은 p2와 완전히 같은 저장 공간을 공유하게 된다.
자 이것이 바로 얕은 복사이다. 위와 같은 상황이 벌어지기 때문에 객체를 복사하는 것은 쉽지 않다.
우리가 실질적으로 사용하기 위해 복사하는 방식을 깊은 복사라고 한다.
이 방법은 여러가지가 있다. 먼저 매개변수를 Puppy로 받는 생성자를 정의해서 생성과 동시에 복사가 되도록 해보쟈!
자 복사가 된거 같다
이제 p2 객체의 이름 색깔 울음소리를 바꿔주도록 하자!
오 이제는 생성이 잘 된 것을 확인할 수 있다.
어떻게 한 것일까?
답은 간단하다 메서드는 값 형식이라고 했다. 값 형식은 저장 공간이 아닌 저장 공간에 들어있는 값만 전달해준다고 했다.
생성자는 앞전에 뭐라했었는가? 클래스 객체가 생성될 때 호출되는 특별한 '메서드'라고 했다.
따라서, 생성자를 통해서 복사하면 깊은 복사가 이뤄지게 된다.
다른 방법은 생성자가 아닌 메서드를 이용하는 방식도 있다.
자 이렇게 이름, 색깔, 울음소리가 잘 바뀐것을 확인했다.
이번 포스팅은 여기서 마치도록 하겠다!!
'Game Develop > C# Programming' 카테고리의 다른 글
C# Practicing(가상 메서드 오버라이드 심화) (1) | 2023.10.24 |
---|---|
C# Practicing(상속, 가상 메서드) (1) | 2023.10.23 |
C# Practicing(클래스) (0) | 2023.10.23 |
C# Practicing(반복문, 메서드 심화) (0) | 2023.10.23 |
C# Practicing(메서드) (0) | 2023.10.22 |