개발일지

240924(화) C# 문법 종합반 [클래스와 객체]

게임 프로그래머 2024. 9. 24. 23:13

객체지향 프로그래밍(Object-Oriented Programming, OOP)의 특징

특징

1) 캡슐화: 데이터와 기능을 하나의 단위로 묶는것을 뜻함

2) 상속: 기존의 클래스를 확장하여 새로운 클래스를 만듬

- 부모 클래스의 동작과 특성을 자식 클래스가 상속받아 재사용 가능

- 코드의 중복 감소, 클래스 간 계층 구조를 구성하여 코드의 구조화, 유지 보수 용이

3) 다형성: 하나의 인터페이스나 기능을 다양한 방식으로 구현하거나 사용하는 능력

- 하나의 메서드 이름이 다양한 객체에서 다르게 동작할 수 있도록 함

- 유연하고 확장 가능한 코드 작성이 가능함, 코드의 가독성 재사용성 높임

4) 추상화: 복잡한 시스템이나 개념을 단순화하여 필요한 기능에 집중

5) 객체: 객체는 클래스로부터 생성된 실체, 데이터와 해당 데이터를 조작하는 메서드를 가지고 있음

- 객체는 상태(데이터)행동(메서드)를 가진다. (실제 세계의 개체나 개념 모델링함)

- 객체들 간의 상호 작용을 통해 프로그램이 동작, 모듈화와 재사용성을 높힌다.

 

클래스의 구성 요소

1. 필드(Fields): 클래스에서 사용되는 변수. 객체의 상태를 나타내는 데이터를 저장

2. 메서드(methods): 클래스에서 사용되는 함수. 클래스에서 수행되는 동작을 정의하고, 객체의 동작을 구현

3. 생성자 (Constructors): 객체 생성시 자동으로 호출, 객체를 초기화하고, 필드 초기화 작업 수행, 생성시 new 키워드와 함께 호출

4. 소멸자 (Destructors): 객체가 소멸시 호출되는 메서드로, 메모리나 리소스의 해제 등의 작업을 수행한다.

 

클래스(붕어빵 틀)의 정의

1) 객체를 생성하기 위한 템플릿 또는 설계도 역할

2) 클래스는 속성과 동작을 가짐. 표현(속성 → 필드, 동작 → 메서드)

3) 객체를 생성하려면 클래스를 사용하여 인스턴스를 만들어야 함

 

객체(붕어빵)의 정의

1) 객체는 클래스의 인스턴스. 클래스의 실체화된 형태

2) 객체는 클래스로부터 생성된다. 각 객체는 독립적인 상태(데이터)를 가질 수 있다.

 

클래스 구조

class Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine("Name: " + Name);
        Console.WriteLine("Age: " + Age);
    }
}

Person p = new Person();
p.Name = "John";
p.Age = 30;
p.PrintInfo(); // 출력: Name: John, Age: 30

 

클래스는 데이터와 메서드를 하나로 묶은 사용자 정의 타입이다.

 

2. 접근 제한자

클래스의 접근 권한을 지정하여 데이터를 보호

 

접근 제한자 예시

public: 외부에서 자유로운 접근 가능

private: 같은 클래스 내부에서만 접근 가능

protected: 같은 클래스 내부, 상속받은 클래스만 접근 가능

class Person
{
    public string Name;         // 외부에서 자유롭게 접근 가능
    private int Age;           // 같은 클래스 내부에서만 접근 가능
    protected string Address;  // 같은 클래스 내부, 상속받은 클래스만 접근 가능
}

 

3. 필드와 메서드

클래스는 필드(클래스의 상태를 나타내는 데이터 저장)와 메서드(클래스의 동작을 정의하고 실행)로 구성

보통 필드는 private 접근 제한자를 사용하여 외부에서 직접적인 접근을 제한한다.

필요한 경우 property를 통해 간접적으로 접근하게 함  

 

4. 프로퍼티(Property)

1) 클래스 멤버로서, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자(Accessor) 메서드의 조합

2) 객체의 필드에 직접 접근하지 않고, 간접 접근하여 값을 설정하거나 읽는다.

3) 필드에 대한 접근 제어, 유효성 검사 수행

 

프로퍼티 구문

get과 set 접근자를 사용하여 값을 읽고 설정하는 동작을 정의

get 접근자는 값을 반환하고, set 접근자는 값을 설정한다.

필요에 따라 get 또는 set 접근자 중 하나를 생략하여 읽기 전용 또는 쓰기 전용으로 정의할 수 있다.

[접근 제한자] [데이터 타입] 프로퍼티명
{
    get
    {
        // 값을 반환
    }
    set
    {
        // 값을 설정
    }
}

 

사용예시

더보기
class Person
{
    private string name;
    private int age;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set { age = value; }
    }
}
Person person = new Person();
person.Name = "John";   // Name 프로퍼티에 값 설정
person.Age = 25;        // Age 프로퍼티에 값 설정

Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");  // Name과 Age 프로

 

자동 프로퍼티 (Auto Property)

1) 프로퍼티를 간단하게 정의하고 사용할 수 있는 편리한 기능

2) 필드 선언, 메서드 구현을 컴파일러가 자동으로 처리하여 간단한 구문으로 프로퍼티 정의 가능

[접근 제한자] [데이터 타입] 프로퍼티명 { get; set; }
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Person person = new Person();
person.Name = "John";     // 값을 설정
person.Age = 25;          // 값을 설정

Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");  // 값을 읽어 출력

 

정말 새로운 개념들을 많이 알게되었다. 내용을 간략하게 정리하니까 개념 정리는 좀 되는 것 같은 착각이 들기도..

하지만 실제 응용까지는 정말 많은 코드를 작성해봐야 내것으로 만들 수 있을 것 같았다.