IMCAT.DEV
로그인 가입
C# 입문 객체지향

C# 클래스와 객체 기초

C# 클래스와 객체 기초 — 초급

클래스와 객체 기초

1. 도입 (왜 배워야 하는가)

C#에서 클래스와 객체는 객체 지향 프로그래밍(OOP)의 핵심 개념입니다. 이러한 개념은 소프트웨어 설계와 개발에서 필수적입니다. 클래스는 객체를 생성하기 위한 설계도와 같은 역할을 하며, 객체는 이 설계도를 바탕으로 만들어진 실제 데이터 구조입니다.

이 두 개념을 이해하지 못하면, 복잡한 프로그램을 작성할 때 코드의 재사용성과 유지 보수성이 떨어지게 됩니다. 예를 들어, 쇼핑몰 애플리케이션을 개발할 때 상품, 장바구니, 주문 등을 각각 클래스로 정의하지 않으면 코드가 중복되거나 관리하기 어려워집니다.

2. 핵심 개념 설명

클래스

클래스는 객체를 생성하기 위한 설계도입니다. 클래스를 통해 속성과 메서드를 정의할 수 있습니다.

객체

객체는 클래스에서 정의된 속성과 메서드를 가진 실체입니다. 클래스가 설계도라면, 객체는 그 설계도로 만든 집에 비유할 수 있습니다.

속성

속성은 객체가 가진 데이터입니다. 예를 들어, 자동차 클래스의 속성으로는 색상, 모델, 연료 타입 등이 있을 수 있습니다.

메서드

메서드는 객체가 수행할 수 있는 행동입니다. 자동차 클래스에 "운전하다", "주차하다"와 같은 메서드가 있을 수 있습니다.

용어설명
클래스객체의 설계도
객체클래스에서 생성된 실체
속성객체의 데이터
메서드객체의 행동

3. 기본 코드 예제

다음은 간단한 자동차 클래스를 정의하고 객체를 생성하는 예제입니다.

using System;

class Car
{
    // 속성 정의
    public string Color { get; set; }
    public string Model { get; set; }

    // 메서드 정의
    public void Drive()
    {
        Console.WriteLine("차가 운전 중입니다.");
    }
}

class Program
{
    static void Main()
    {
        // 객체 생성
        Car myCar = new Car();
        myCar.Color = "빨강"; // 속성 설정
        myCar.Model = "소나타"; // 속성 설정

        // 메서드 호출
        myCar.Drive(); // "차가 운전 중입니다." 출력
    }
}

실행 결과

차가 운전 중입니다.

코드 설명

  1. Car 클래스를 정의하고, 속성 Color와 Model을 추가합니다.
  2. Drive 메서드를 정의하여 차가 운전 중임을 출력합니다.
  3. Program 클래스의 Main 메서드에서 Car 객체 myCar를 생성합니다.
  4. myCar의 속성 Color와 Model을 설정합니다.
  5. Drive 메서드를 호출하여 메시지를 출력합니다.
  6. 4. 실전 활용 예제

    1. 쇼핑몰 장바구니 구현

    장바구니 클래스를 만들어 사용자가 선택한 상품을 관리할 수 있습니다.

    using System;
    using System.Collections.Generic;
    
    class Product
    {
        public string Name { get; set; }
        public double Price { get; set; }
    }
    
    class ShoppingCart
    {
        private List<Product> products = new List<Product>();
    
        public void AddProduct(Product product)
        {
            products.Add(product);
            Console.WriteLine($"{product.Name}가 장바구니에 추가되었습니다.");
        }
    
        public double GetTotalPrice()
        {
            double total = 0;
            foreach (var product in products)
            {
                total += product.Price;
            }
            return total;
        }
    }
    
    class Program
    {
        static void Main()
        {
            ShoppingCart cart = new ShoppingCart();
            cart.AddProduct(new Product { Name = "아이폰", Price = 1000 });
            cart.AddProduct(new Product { Name = "갤럭시", Price = 900 });
    
            Console.WriteLine($"장바구니 총 금액: {cart.GetTotalPrice()}");
        }
    }

    실행 결과

    아이폰가 장바구니에 추가되었습니다.
    갤럭시가 장바구니에 추가되었습니다.
    장바구니 총 금액: 1900

    2. 동물 클래스

    서로 다른 동물의 특성을 정의하고, 각각의 행동을 나타낼 수 있는 클래스를 만들 수 있습니다.

    using System;
    
    class Animal
    {
        public string Name { get; set; }
    
        public void Speak()
        {
            Console.WriteLine($"{Name}가 소리 내고 있습니다.");
        }
    }
    
    class Program
    {
        static void Main()
        {
            Animal dog = new Animal { Name = "강아지" };
            dog.Speak(); // "강아지가 소리 내고 있습니다." 출력
        }
    }

    실행 결과

    강아지가 소리 내고 있습니다.

    5. 흔한 실수와 주의사항

    실수 1: 클래스와 객체의 혼동

    • 잘못된 코드:
    • Car myCar = new Car; // 오류 발생
    • 올바른 코드:
    • Car myCar = new Car(); // 괄호를 추가

      실수 2: 속성에 대한 접근 오류

    • 잘못된 코드:
    • Console.WriteLine(myCar.Color); // myCar가 초기화되지 않으면 NullReferenceException 발생
    • 올바른 코드:
    • myCar.Color = "파란색"; // 속성을 설정한 후 접근
      Console.WriteLine(myCar.Color);

      6. 정리

    • 클래스는 객체를 생성하기 위한 설계도입니다.
    • 객체는 클래스에서 정의된 속성과 메서드를 가진 실체입니다.
    • 속성과 메서드를 통해 객체의 데이터와 행동을 정의할 수 있습니다.
    • 객체 지향 프로그래밍의 핵심 개념으로 코드의 재사용성과 유지 보수성을 높입니다.
    • 다음 학습 주제로는 '상속과 다형성'을 추천합니다. 이를 통해 클래스 간의 관계를 이해하고 더 복잡한 시스템을 설계할 수 있습니다.