본문 바로가기

Programming

객체와 클래스,네임스페이스 : 쉽고 재미있는 C# Programming 의 기본

 

객체 ( Object ) 와 클래스 ( Class )는 객체지향프로그래밍 ( OOP ) 의 핵심 개념 중 하나입니다.

객체지향프로그래밍은 소프트웨어 개발을 위한 패러다임 중 하나로, 현실 세계의 개념을 프로그램에 모델링하고, 이러한 모델을 기반으로 프로그램을 구성하는 개념입니다. 객체와 클래스는 이를 실현하기 위한 중요한 도구로 사용됩니다.


 

1. 객체 ( Object ) 의 개념

 

▶ 객체 ( Object ) : 현실 세계에 존재하거나 생각할 수 있는 것 중에서 구별 가능한 것을 의미합니다.

객체의 특징 : 상태(속성)와 행동(메서드)을 가집니다.

 

예)

자동차, 동물, 사람, 핸드폰 등은 객체의 예시입니다.

자동차의 상태(속성)은 색상, 속도, 연료량 등이 되며, 행동(메서드)은 주행, 정지, 엔진시동 등이 됩니다.

 

2. 클래스 ( Class ) 의 개념

 

클래스 ( Class ) : 객체를 만들기 위한 일종의 설계도로, 객체를 생성하는 데 사용됩니다.

클래스의 특징 : 속성 (멤버 변수)과 메서드 (함수)를 가지며, 이를 통해 객체를 생성합니다.

 

예)

자동차라는 객체를 만들기 위한 클래스를 Car라고 가정할 때 Car 클래스에는 자동차의 속성 (색상, 속도 등)과 행동 (주행, 정지 등)에 대한 정의를 포함합니다.

 

3. 클래스와 객체의 관계

 

클래스는 객체를 만들기 위한 틀이며, 객체는 클래스의 인스턴스(instance)입니다.

클래스는 여러 객체를 생성할 수 있으며, 각 객체는 클래스에서 정의한 속성과 메서드를 공유합니다.

 

4. 클래스와 객체의 예시

// 클래스의 정의
class Car
{
    // 속성(멤버 변수)
    public string color;
    public int speed;

    // 메서드(함수)
    public void Drive()
    {
        Console.WriteLine("Driving...");
    }

    public void Stop()
    {
        Console.WriteLine("Stopping...");
    }
}

// 객체의 생성
Car myCar = new Car();
myCar.color = "Blue";
myCar.speed = 60;

// 객체의 사용
myCar.Drive();  // Driving...
myCar.Stop();   // Stopping...

* 속성 (멤버변수) : 클래스 내부에 선언된 변수로, 객체의 상태를 나타냅니다. 예시에서 'color' 와 'speed' 가 속성에 해당합니다.

* 메서드 (함수) : 클래스 내부에서 선언된 함수로, 객체의 행동을 정의합니다. 예시에서 'Drive' 와 'Stop'이 메서드에 해당합니다.

* 객체의 생성 : 'new' 키워드를 사용하여 클래스의 인스턴스(객체)를 생성합니다. 

Car myCar = new Car(); 는 'Car' 클래스로부터 'myCar' 라는 객체를 생성합니다.

* 객체의 사용 : 객체는 해당 클래스의 속성과 메서드에 접근할 수 있습니다. 

myCar.color 와 같이 객체의 속성에 접근하고, myCar.Drive() 와 같이 메서드를 호출할 수 있습니다.

 

이렇게 클래스와 객체는 현실 세계의 사물을 모델링하고 그에 따른 특징과 행동을 프로그램에서 표현하는 데 사용됩니다. 클래스는 객체를 생성하기 위한 틀로, 객체는 해당 클래스의 인스턴스로 실제로 사용되는 것을 나타냅니다.

 

5. 핵심 요약

 

클래스 ( Class ) : Data (속성)와 Method (기능)를 가지는 템플릿 (설계도)

객체 ( Object ) : 클래스를 기반으로 실제로 메모리에 할당된 데이터와 메서드를 포함하는 인스턴스(instance)

 

클래스를 이용하여 실제 객체를 생성하면 그것이 인스턴스(instance)입니다.

 

인스턴스와 객체는 종종 동의어로 사용되며, 인스턴스는 클래스로부터 생성된 것을 가리킬 때 사용됩니다.

그래서 인스턴스는 클래스의 객체라고 불립니다.


 

[ 추가 : namespace ]

 

1. 개념

 

namespace 는 C#에서 코드를 구조화하고, 그룹화하여 관리하는 데 사용되는 일종의 컨테이너입니다.

namesapce 를 사용하면 코드의 일부를 논리적으로 그룹화하여 유지보수성을 높일 수 있습니다.

다른 namespace에서 동일한 이름의 클래스나 메서드를 사용하는 경우에도 충돌을 방지할 수 있습니다.

 

2. 형식

 

2.1 namespace 정의하기

namespace MyNamespace
{
    // 클래스, 인터페이스, 메서드 등을 포함하는 코드 영역
    class MyClass
    {
        // 클래스 멤버들
    }

    // 다른 클래스, 인터페이스, 메서드 등
}

*C# 에서는 namespace 키워드를 사용하여 네임스페이스를 정의합니다. 네임스페이스 내에서는 클래스, 인터페이스, 구조체 등의 여러 형식을 정의할 수 있습니다.

 

2.2 다른 namespace를 사용하는 방법

using System; // System 네임스페이스 사용

namespace MyNamespace
{
    class Program
    {
        static void Main()
        {
            // System.Console 대신 Console 사용
            Console.WriteLine("Hello, World!");
        }
    }
}

* using 문을 사용하여 다른 네임스페이스를 현재 코드에 포함시킬 수 있습니다. 이를 통해 해당 네임스페이스에 속한 형식들을 편리하게 사용할 수 있습니다.

 

이렇게 using을 통해 네임스페이스를 불러오면 해당 네임스페이스에 속한 형식들을 짧게 사용할 수 있어 코드의 가독성을 높일 수 있습니다.

 

2.3 왜 중요한가?

 

  • 명명 충돌 방지 : 서로 다른 네임스페이스에서 동일한 이름의 클래스나 메서드를 사용할 때 충돌을 방지합니다.
  • 코드의 구조화 및 모듈화 : 네임스페이스는 코드를 논리적으로 그룹화하여 프로젝트를 구조화하고 모듈화하는 데 도움을 줍니다.
  • 가독성 향상 : using 을 통해 필요한 네임스페이스를 가져와서 짧은 코드로 작성할 수 있어 가독성을 향상시킵니다.

 

3. 활용 :코드의 구조화

namespace Geometry
{
    class Circle
    {
        public double Radius { get; set; }

        public double CalculateArea()
        {
            return Math.PI * Math.Pow(Radius, 2);
        }
    }

    class Rectangle
    {
        public double Width { get; set; }
        public double Height { get; set; }

        public double CalculateArea()
        {
            return Width * Height;
        }
    }
}

class Program
{
    static void Main()
    {
        Geometry.Circle circle = new Geometry.Circle();
        circle.Radius = 5;

        Console.WriteLine("Circle Area: " + circle.CalculateArea());
    }
}

 

위의 예제에서 Geometry 네임스페이스는 Circle과 Rectangle 클래스를 각각 포함하고 있습니다.

이를 통해 코드를 논리적으로 그룹화하고 클래스 명의 충돌을 방지할 수 있습니다.

 

이렇게 네임스페이스는 큰 프로젝트에서 코드의 구조를 유지보수 가능하게 하고, 이름 충돌을 피하며, 코드를 논리적으로 그룹화하여 이해하기 쉽게 만듭니다.