객체 ( 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 클래스를 각각 포함하고 있습니다.
이를 통해 코드를 논리적으로 그룹화하고 클래스 명의 충돌을 방지할 수 있습니다.
이렇게 네임스페이스는 큰 프로젝트에서 코드의 구조를 유지보수 가능하게 하고, 이름 충돌을 피하며, 코드를 논리적으로 그룹화하여 이해하기 쉽게 만듭니다.
'Programming' 카테고리의 다른 글
생성자와 접근지정자 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.01.17 |
---|---|
가상 메서드와 다형성 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.01.15 |
상속 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.01.13 |
객체지향프로그래밍 (OOP) - 캡슐화 : 쉽고 재미있는 C# Programming 의 기본 (0) | 2024.01.13 |
반복문 : 쉽고 재미있는 C# Programming 의 기본 (2) | 2024.01.13 |