구조체, 추상 클래스, 인터페이스, 1차원 배열
2023. 7. 24.

구조체

- 데이터와 관련 기능을 캡슐화 있는 값형식

->값 형식이므로 스택메모리에 저장

* 구조체 형식은 다른 클래스 또는 구조체 형식에서 상속할 수 없다. -부모가 될 수 없다.

*구조체 형식의 생성자가 형식의 모든 instance 필드를 초기화해야한다.

*매개변수가 없는 생성자를 선언할 수 없다.

-적은 양의 데이터를 다룰 때 주로 사용된다.

-일회용 사용(ex. 서버에 데이터 전송)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal struct Vector2//구조체: 값형식
    {
        public int x;
        public int y;
        //생성자
        public Vector2(int x, int y) {

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

        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {
        //생성자
        public App()
        {
            Vector2 v = new Vector2(2, 3); //값: 스택메모리에 저장
            Console.WriteLine("{0},{1}",v.x, v.y);

            Marine marine = new Marine();

        }
    }

 }

 

 

추상 클래스

-abstract 키워드를 사용해 불완전해 파생 클래스에서 구현해야 하는 클래스 멤버를 만들 수 있다.

-여러 파생 클래스에서 공유할 수 있는 기본 클래스의 공통적 정의를 제공하는 것.

*추상 클래스는 인스턴스화할 수 없다.

 

인터페이스

-계약을 정의. 멤버에 대한 기본 구현을 정의. 

-관련 기능 그룹에 대한 정의

-상속 시 어떤 파생 클래스에게는 쓸 모 없는 기능이 포함되는 것을 방지해준다.

-다중 상속이 가능하다.

 

속성 

-공용 데이터 멤버처럼 사용할 수 있지만 접근자라는 특수 메서드이다.

 

1차원 배열

int[] array = new int[5];

다음과 같이 작성한다.

int는 0으로 초기화되지만, string 은 참조형식이므로 null이 들어간다.

string[] stringArray = new string[6];

배열

- 동일한 타입의 데이터들을 그룹화하고 관리할 때 사용한다.

//0번 인덱스부터 n-1까지

-배열은 고정적이다 -> 타입의 기본값으로 채워진다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class App
    {
        //생성자
        public App()
        {
            //정수형 배열의 초기화
            int[] arr = new int[3];//정수형 배열 인스턴스를 생성
            Console.WriteLine(arr);

            int[] arr2 = new int[] { 1, 2, 3, 4, 5 };

            //문자열 배열의 초기화
            string[] weaponNames = new string[]
            {
                "Axe", "Sword", "Dagger", "Bow"
            };

            //선언과 동시에 초기화 시
            int[] arr3 = { 1, 2, 3};

            Marine[] marines = new Marine[3];
            Console.WriteLine(marines);
            Console.WriteLine("배열의 길이:{0}",marines.Length);

            for (int i = 0; i < 3; i++)
            {                
                Console.WriteLine(marines[i]);//index에 접근 - >null이다.
            }
            
            for (int i = 0; i < 3; i++)
            {
                marines[i] = new Marine();
                Console.WriteLine(marines[i]);
            }

            //foreach는 읽기전용
            //marines 개체에 대한 요소들을 수정x
            //수정하려면 for문 사용

            foreach(Marine marine in marines)
            {
                Console.WriteLine(marine); 
            }
        }
    }

 }

 

'C# 기초' 카테고리의 다른 글

배열 연습  (0) 2023.07.25
배열 예제  (0) 2023.07.24
상속, virtual, override, overload, 연결(chaining), casting  (0) 2023.07.24
void, 메서드 매개변수, 생성자 연습  (0) 2023.07.21
switch문, 생성자 연습+예제  (0) 2023.07.21
myoskin