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
- base()
- 자동구현프로퍼티
- 인터페이스 예제
- 프로퍼티와 생성자
- 가변배열
- this 키워드
- 추상 프로퍼티
- 인터페이스 상속
- is
- 클래스 연습문제
- 배열초기화
- 형식변환
- 무명형식
- 인터페이스의 프로퍼티
- 컬렉션 초기화
- System.Array
- 중첩클래스
- 프로퍼티
- 접근 한정자
- 인덱서
- 오버라이딩
- 클래스
- 배열
- 분할 클래스
- 튜플
- as
- 이것이C#이다
- 일반화 클래스
- 메소드숨기기
- c#
Archives
- Today
- Total
제로의영역
7.16 구조체 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
(1) 정의: C#의 복합 데이터 형식의 한 종류
(2) 용도: 필요할 때만 사용하고 바로 메모리에서 지우는 데이터를 다룰 때 사용
(3) 사용법
1) struct키워드를 이용해서 선언: 'struct+구조체 이름'
2) 필드 선언(생성)
3) 메소드 선언(생성)
사용예)
struct 구조체 이름
{
필드 생성
메소드 생성
{
}
}
(4) 클래스와 구조체의 차이
특징 | 클래스 | 구조체 |
키워드 | class | struct |
형식 |
참조 형식 1. 변수가 값이 있는 곳의 위치를 가리키는 데이터 형식 2. 힙에 데이터 저장 3. 객체를 더이상 사용하지 않을 때 제거 |
값 형식 1. 변수가 값을 담는 데이터 형식 2. 스택에 데이터 저장 3. 코드블록이 끝나는 시점( } )에 제거 |
복사 | 얕은 복사: 참조만 복사하는 것 | 깊은 복사: 힙에 보관되어 있는 내용을 source로부터 복사해서 별도의 힙 공간에 객체를 보관하는 것 |
인스턴스 생성 |
new 연산자와 생성자 필요: 클래스+객체이름=new+생성자 |
선언만으로도 생성 |
생성자 | 매개 변수 없는 생성자 선언 가능 | 매개 변수 없는 생성자 선언 불가능 |
상속 | 가능 | 모든 구초제는 System.Object형식을 상속하는 System.ValueType으로부터 직접 상속받음 |
예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex7_18
{
struct Point3D //구조체 선언
{
public int X; //필드 생성
public int Y;
public int Z;
public Point3D(int X,int Y, int Z) //매개변수가 있는 Point3D 생성자 생성
{
this.X = X; //생성자의 변수를 통해 Point3D 구조체의 변수에 접근
this.Y = Y;
this.Z = Z;
}
public override string ToString() //System.Object 형식의 ToString() 메소드를 오버라이딩한 메소드 생성(System.Object로 부터 상속)
{
/*return base.ToString();*/ //선언만으로 생성되는지 테스트를 위해 입력
return string.Format($"{X},{Y},{Z}");
}
}
class MainProgram
{
static void Main(string[] args)
{
Point3D p3d1; //선언만으로 인스턴스 생성
p3d1.X = 10; //p3d1의 필드 생성
p3d1.Y = 20;
p3d1.Z = 40;
Console.WriteLine(p3d1.ToString());
Point3D p3d2 = new Point3D(100, 200, 300); //생성자를 이용한 인스턴스 생성도 가능
/*Point3D p3d2; //선언만으로 인스턴스 생성방법 테스트 >> 같은 결과가 나옴
p3d2.X = 100;
p3d2.Y = 200;
p3d2.Z = 300;*/
Point3D p3d3 = p3d2; //인스턴스 복사(깊은 복사) >>100,200,300
p3d3.Z = 400; //Z값만 변경 >> 100, 200, 400
Console.WriteLine(p3d2.ToString());
Console.WriteLine(p3d3.ToString());
}
}
}
출력결과)
10,20,40
100,200,300
100,200,400
'C#' 카테고리의 다른 글
8.2 인터페이스는 약속이다 (0) | 2019.06.25 |
---|---|
7.17 튜플 (0) | 2019.06.18 |
7.15 확장 메소드 (0) | 2019.06.14 |
7.14 분할 클래스(Partial Class) (0) | 2019.06.10 |
7.13 중첩 클래스 (0) | 2019.06.07 |