C#/문법

C# 문법 16 -- 데이터 형식 정리 8

psb08 2024. 12. 6. 00:15
728x90

2 - 5 : 클래스

2 - 6 : 구조체

 

5. 클래스

C#에서 클래스는 객체 지향 프로그래밍의 기본 단위로, 속성(데이터)과 메서드(기능)를 포함하는 사용자 정의 데이터 타입입니다. 클래스를 사용하면 관련된 데이터와 기능을 하나의 단위로 묶어 관리할 수 있습니다.

 

< 특징 >

1. 속성과 메서드 : 클래스는 데이터를 저장하는 속성과 해당 데이터를 처리하는 메서드를 포함합니다.
2. 객체 생성 : 클래스를 기반으로 객체를 생성하여 사용할 수 있습니다.
3. 상속 : 클래스를 상속받아 새로운 클래스를 정의할 수 있습니다.

 

예시)

using System;

class Program
{
    static void Main()
    {
        // Person 클래스의 객체 생성
        Person person1 = new Person("Alice", 30);
        Person person2 = new Person("Bob", 25);

        // 객체의 메서드 호출
        person1.Introduce();
        person2.Introduce();
    }
}

// Person 클래스 정의
public class Person
{
    // 속성
    public string Name { get; set; }
    public int Age { get; set; }

    // 생성자
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    // 메서드
    public void Introduce()
    {
        Console.WriteLine($"안녕하세요, 제 이름은 {Name}이고, 나이는 {Age}세입니다.");
    }
}

 

6. 구조체

C#에서 구조체는 사용자 정의 데이터 타입으로, 주로 작은 데이터 집합을 그룹화하는 데 사용됩니다. 구조체는 클래스와 유사하지만, 값 타입(value type)으로 작동하며, 주로 간단한 데이터 구조를 만들 때 사용됩니다.

 

< 특징 >

1. 값 타입 : 구조체는 값 타입으로, 변수에 할당될 때 복사가 이루어집니다.
2. 메모리 관리 : 구조체는 스택 메모리에 저장되며, 클래스는 힙 메모리에 저장됩니다.
3. 간결한 정의 : 구조체는 간단한 데이터 그룹화에 적합하며, 추가적인 기능이 필요하지 않은 경우에 사용됩니다.

 

예시)

using System;

class Program
{
    static void Main()
    {
        Point point1 = new Point(10, 20);
        Point point2 = new Point(30, 40);

        Console.WriteLine($"Point 1: ({point1.X}, {point1.Y})");
        Console.WriteLine($"Point 2: ({point2.X}, {point2.Y})");

        double distance = CalculateDistance(point1, point2);
        Console.WriteLine($"Distance between Point 1 and Point 2: {distance}");
    }

    static double CalculateDistance(Point p1, Point p2)
    {
        return Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
    }
}

public struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

 

728x90