(c#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,c#, wpf,...

9
C# 기초강좌 구조체(Struct) 탑크리에듀( http://www.topcredu.co.kr), 이종철

Upload: 3-2

Post on 07-Jan-2017

442 views

Category:

Education


0 download

TRANSCRIPT

Page 1: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

C# 기초강좌 구조체(Struct)

탑크리에듀(http://www.topcredu.co.kr), 이종철

Page 2: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

실습코드 및 동영상 다시 보기는 아래 URL에서

가능 합니다.

http://ojc.asia

Page 3: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

구조체(Struct) - 1

간단한 개체를 표현하는데 적합하며 클래스처럼 개체의 구조를 정의하는데 사용한다.

구조체내의 필드는 static, const라고 선언한 경우에만 초기화가 가능하다. 그 외의 경우는 생성자에게 초기화를 시켜야 한다.

매개변수 없는 생성자(기본 생성자)와 소멸자는 정의할 수 없고 매개변수 있는 생성자는

정의가능하지만 그안에서 초기화 되지않은 필드를 초기화 시켜야 한다. 그렇지 않으면 컴파일 시 오류가 발생 한다. 또한 인스턴스 필드를 선언 시 초기값을 할당하면 오류가 발생한다. 물론 C#에서는 struct를 다른 클래스가 상속받아서 사용하지 않으므로 protected

로 선언할 수 없다.

struct Point {

int x; int y;

Point() { }

}

struct Point { public int x, y; //초기화 수식을 빼면 오류발생 public Point(int x, int y) { this.x = x; this.y = y; } }

Page 4: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

구조체(Struct) - 2

구조체는 할당시 원래 구조체의 내용이 복사되어 저장된다. 그러므로 원래 복사본의 데이터는 변경되지 않는다.

구조체는 ValueType이고 클래스는 ReferenceType이다.

클래스와 다르게 new 연산자없이 인스턴스화 할 수 있다. 클래스는 new 했을때 Heap에 저장 되지만 struct는 Stack에 저장 된다.

(Emp e 또는 Emp e = new Emp() 두방법 모두 가능)

모든 구조체는 암시적으로 System.ValueType에서 상속되며 new 연산자를 통해 생성하더라도 스택에 저장된다. 그리고 struct를 위한 생성자를 선언하는 경우 기본 생성자를 만들어 줄 수 없다. 클래스인 경우 생성자를 명시적으로 만들어 놓으면 컴파일러가 다시 만들지는 않지만 struct인 경우 항상 기본 생성자를 만드는 구조이므로 사용자가 기본 생성자를 만들게 되면 중복 선언이 되는 것이다. 그러므로 생성자를 만든다면 항상 매개변수를

가지는 생성자를 만들어야 하며 반드시 멤버 변수들을 초기화 시켜주어야 한다.

Page 5: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

구조체(Struct) - 3

구조체는 할당시 원래 구조체의 내용이 복사되어 저장된다. 그러므로 원래 복사본의 데이터는 변경되지 않는다.

구조체는 ValueType이고 클래스는 ReferenceType이다.

클래스와 다르게 new 연산자없이 인스턴스화 할 수 있다.

(Emp e 또는 Emp e = new Emp() 두방법 모두 가능)

모든 구조체는 암시적으로 System.ValueType에서 상속되며 new 연산자를 통해 생성하더라도 스택에 저장된다. 그리고 struct를 위한 생성자를 선언하는 경우 기본 생성자를 만들어 줄 수 없다. 클래스인 경우 생성자를 명시적으로 만들어 놓으면 컴파일러가 다시 만들지는 않지만 struct인 경우 항상 기본 생성자를 만드는 구조이므로 사용자가 기본 생성자를 만들게 되면 중복 선언이 되는 것이다. 그러므로 생성자를 만든다면 항상 매개변수를 가지는 생성자를 만들어야 하며 반드시 멤버 변수들을 초기화 시켜주어야 한다.

Page 6: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

구조체(Struct) 예제 - 1

using System;

public struct Point

{

public int x, y;

// 반드시 매개변수 있는 생성자를 만들어야 하며 인스턴스 필드를 꼭 초기화 해야 한다.

//초기화 수식을 빼고 테스트 해보라...

public Point(int x, int y)

{

this.x = x; this.y = y;

}

// Override the ToString method: public override string ToString() { return (String.Format("({0},{1})", x, y)); } }

Page 7: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

구조체(Struct) 예제 - 2

class MainClass {

static void Main() {

//구조체를 new 연산자로 생성하더라도 스택영역에 저장된다.

Point p1 = new Point();

Point p2 = new Point(1, 2);

// ToString 메소드를 호출하여 출력

Console.WriteLine("기본생성자 Point : {0}", p1);

Console.WriteLine("Point (1,2) : {0}", p2);

Page 8: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

구조체(Struct) 예제 - 3

Point p3;

p3.x = 100; p3.y = 200;

Console.WriteLine("Point (100,200) : {0}", p3);

}

}

[실행 결과]

기본생성자 Point : (0,0)

Point(1,2) : (1,2)

Point(100,200) : (100,200)

Page 9: (C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육

This Practice makes the Expert!

C#,ADO.NET,Network 프로그래밍 기초과정 C#기초, Xamarin 앱 개발과정 Xamarin 앱개발 과정 C# WPF, XAML 프로그래밍