[C#] 클래스 : 정적필드, 얕은 복사와 깊은 복사, this 키워드

2019. 4. 1. 18:49개발 관련 학습정리/C#

반응형

1. 정적 필드

 

프로그램 전체에 걸쳐 공유해야 하는 변수를 사용할때 정적 필드 안에 생성하면 전체에 공유를 할 수 있다.

 

 

 

 

 

 

정적 필드 "Global"

 

 

 

 

 

이와 같이 Global이라는 정적 필드에 public static int count 라는 변수를 선언하면 프로그램 전체에 공유 할 수 있습니다

 

변수 뿐만 아니라 메소드도 공유할 수 있으며, 정적 메소드라고 불립니다.

인스턴스가 아닌 클래스 자체에 소속되고 정적 메소드가 클래스의 인스턴스를 생성하지 않아도 호출이 가능합니다.

 

 

 

 

 

 

정적 필드 예제. 아까 global에서 선언한 변수를 global.OOO로 접근 할수 있다.

 

 

 

 

 

 

2. 객체 복사 (얕은 복사와 깊은 복사)

 

 

 

 

 

얕은 복사

바로 코드를 보도록 합시다.

먼저 MyClass라는 클래스에 field1,2를 선언
얇은 복사 코드

 

 

 

 

 

 

 

 

먼저 객체 source 선언, source의 field1,2에 10,20을 대입합니다.

target객체를 만들고 sourve를 대입 후, target field2에 30을 대입합니다.

이와 같은 방법은 얕은 복사로, 가리키는 메모리가 같아서 source의 field2의 숫자도 바뀌게 됩니다.

그렇기 때문에 이와같은 문제를 해결하기 위해서는 깊은 복사가 필요합니다.

 

 

 

 

 

 

 

깊은 복사

깊은 복사 코드

 

 

 

 

깊은 복사는 인자를 받아와서 field1,2를 this.field1,2로 대입하여 새로운 힙 영역으로 할당합니다.

이와 같이 깊은 복사를 쓰면 각자의 힙 영역을 쓰게되어 따로 움직이게 됩니다.

 

 

 

 

 

 

3. this 키워드

 

this는 객체가 자신을 지칭할 때 사용하는 키워드 입니다.

객체 내부에서 필드나 메소드에 접근할때 모호성을 해결하기 위해 주로 사용됩니다.

 

 

 

 

 

 

this 키워드를 사용한 모습

 

 

 

 

 

 

매개변수와 필드 변수도 name입니다. 하지만 this키워드를 사용하여 구분을 하면 모호성 없이 해결할 수 있는것이 this 키워드의 장점입니다.

 

다음은 this 키워드의 예제입니다.

 

 

 

 

 

 

 

 

 

 

 

 

setname에서 매개변수를 필드 변수에 할당 -> 그 할당당한 name을 getname에서 리턴.

setposition과 getposition도 같은 원리이다.

 

 

 

 

 

 

4. this 생성자

 

this 생성자는 입력받는 매개 변수에 따라 이들 필드를 초기화 합니다.

 

 

 

 

 

생성자 코드

 

 

 

 

다음 소스는 this생성자 코드로, 위임/타겟 생성자와 비슷한 의미이다.

매개변수가 2개 들어올 경우, c를 정하고 위의 생성자로 이동한뒤 b를 지정, 다시 올라가 a를 지정하는 방식이다.

뒤의 :this() 문법이 그 역할을 하고, 매개변수에 따라 값이 달라지게 된다.

반응형

'개발 관련 학습정리 > C#' 카테고리의 다른 글

C# 추상클래스와 인터페이스  (0) 2021.01.26
C# Delegate  (0) 2021.01.25
c# property  (0) 2021.01.12
[C#] overriding 오버라이딩 / 메서드 숨기기 (hold)  (1) 2019.04.14
[C#] 클래스 : 생성자, 소멸자  (0) 2019.03.31