프로그래밍 언어/C#

C# 클래스와 객체 차이점, 필드와 메서드, 생성자 및 상속 예제로 이해하기 - C#9

eco7T 2024. 9. 30. 12:39
반응형

이 글은 C# 프로그래밍 언어에서 클래스와 객체의 개념, 구조, 사용 방법을 이해시키기 위해 작성되었습니다. 초보 프로그래머를 대상으로 하여 클래스와 객체의 기본 개념부터 생성자, 접근 제한자, 상속까지 차근차근 설명함으로써 실용적인 예시를 통해 기초 지식을 효과적으로 전달하려는 목적이 있습니다.

C# 프로그래밍 언어의 클래스와 객체
C# 프로그래밍 언어의 클래스와 객체

 

C# 프로그래밍 언어의 클래스와 객체

  • 클래스(Class): 클래스는 하나의 틀 또는 설계도라고 생각하면 됩니다. 예를 들어, 자동차를 만드는 설계도가 있다고 한다면 이 설계도는 자동차의 엔진, 바퀴, 색상, 크기 등의 특징과 기능을 담고 있습니다. 그러나 이 설계도 자체가 실제 자동차를 의미하는 것은 아닙니다. 이것이 바로 클래스의 역할입니다. 클래스는 객체의 특징과 동작을 정의하는 '틀'입니다.
  • 객체(Object): 객체는 클래스라는 설계도를 바탕으로 만들어진 실제 제품입니다. 위의 자동차 예시에서 실제로 공장에서 조립된 자동차 한 대가 바로 객체입니다. 즉, 객체는 클래스의 인스턴스(Instance)라고도 합니다.

객체를 통해 클래스에서 정의한 기능을 사용할 수 있게 되는데, 이것이 C# 프로그래밍에서 중요한 이유입니다. 하나의 클래스를 통해 여러 객체를 만들 수 있습니다.

반응형

 

  클래스의 구조

클래스를 직접 만들어 보기 전에, 먼저 C#에서 클래스가 어떻게 구성되어 있는지 알아보겠습니다.

public class Car { // 필드(데이터를 저장하는 변수) public string color; public int speed; // 메서드(클래스의 동작, 기능을 정의) public void Drive() { Console.WriteLine("The car is driving."); } public void Stop() { Console.WriteLine("The car has stopped."); } }

 

클래스의 구성 요소

  • 필드(Field): 클래스 내부에 선언된 변수들로, 객체의 상태를 나타냅니다. 예시에서 colorspeed가 필드입니다. 이 필드는 객체의 데이터를 저장하는 공간으로 생각할 수 있습니다.
  • 메서드(Method): 클래스 내부에 선언된 함수들로, 객체의 동작이나 기능을 정의합니다. 예시에서는 Drive()Stop()이 메서드입니다. 이는 자동차가 '달린다' 또는 '멈춘다'라는 동작을 수행하는 것과 같습니다. 

 

  클래스 만들기와 객체 생성하기

다음으로 실제로 클래스를 만들고 객체를 생성해 보겠습니다.

 

클래스 만들기

public class Dog { // 필드 public string name; public int age; // 메서드 public void Bark() { Console.WriteLine(name + " is barking!"); } public void DisplayAge() { Console.WriteLine(name + " is " + age + " years old."); } }

위의 Dog 클래스는 개의 이름(name)과 나이(age)라는 두 개의 필드를 가지고 있고, Bark()DisplayAge()라는 두 가지 메서드를 가지고 있습니다.

 

객체 생성하기

class Program { static void Main(string[] args) { // Dog 클래스의 객체 생성 Dog myDog = new Dog(); // 객체의 필드에 값 할당 myDog.name = "Buddy"; myDog.age = 3; // 객체의 메서드 호출 myDog.Bark(); myDog.DisplayAge(); } }

 

실행 결과

Buddy is barking! Buddy is 3 years old.

여기서 myDogDog 클래스의 인스턴스(객체)입니다. new Dog()를 통해 클래스를 기반으로 새로운 객체를 생성하였고, 그 객체의 필드와 메서드를 사용했습니다.

 

  생성자(Constructor)

생성자는 객체를 생성할 때 호출되는 특별한 메서드입니다. 생성자를 통해 객체가 만들어질 때 초기 상태를 설정할 수 있습니다.

 

생성자의 예시

public class Cat { public string name; public int age; // 생성자 public Cat(string catName, int catAge) { name = catName; age = catAge; } public void Meow() { Console.WriteLine(name + " says Meow!"); } }
class Program { static void Main(string[] args) { // Cat 클래스의 객체 생성 시 생성자를 통해 초기 값 설정 Cat myCat = new Cat("Whiskers", 2); myCat.Meow(); } }

 

실행 결과

Whiskers says Meow!

위 예시에서 Cat 클래스는 Cat 객체가 만들어질 때 이름과 나이를 지정하도록 생성자를 정의했습니다. new Cat("Whiskers", 2)를 통해 객체를 생성하면서 초기값을 설정했습니다.

 

  접근 제한자(Access Modifiers)

C#에서는 클래스 내부의 멤버(필드, 메서드 등)에 대해 접근 권한을 설정할 수 있습니다. 이는 코드의 보안성과 안정성을 높이는 중요한 개념입니다.

  • public: 모든 곳에서 접근 가능
  • private: 클래스 내부에서만 접근 가능
  • protected: 해당 클래스 및 파생 클래스(상속 관계)에서 접근 가능
  • internal: 같은 어셈블리 내에서 접근 가능

예시: 접근 제한자의 활용

public class Person { private string name; // 외부에서 직접 접근 불가 public int age; // 외부에서 접근 가능 // public 메서드를 통해 private 필드에 접근할 수 있도록 함 public void SetName(string personName) { name = personName; } public void DisplayInfo() { Console.WriteLine("Name: " + name + ", Age: " + age); } }
class Program { static void Main(string[] args) { Person person = new Person(); person.age = 25; // public이므로 직접 접근 가능 person.SetName("Alice"); // private 필드는 public 메서드를 통해 접근 person.DisplayInfo(); } }

 

실행 결과

Name: Alice, Age: 25

nameprivate이기 때문에 Main 메서드에서 직접 접근할 수 없지만, SetName 메서드를 통해 값을 설정할 수 있습니다.

 

  클래스의 상속(Inheritance)

상속은 기존 클래스(부모 클래스)의 특징을 물려받아 새로운 클래스(자식 클래스)를 만드는 것을 의미합니다. 상속을 통해 코드의 재사용성을 높일 수 있습니다.

 

예시: 상속의 활용

// 부모 클래스 public class Animal { public void Eat() { Console.WriteLine("Eating..."); } } // 자식 클래스 public class Dog : Animal { public void Bark() { Console.WriteLine("Barking..."); } }
class Program { static void Main(string[] args) { Dog myDog = new Dog(); myDog.Eat(); // 부모 클래스의 메서드 사용 myDog.Bark(); // 자식 클래스의 메서드 사용 } }

 

실행 결과

Eating... Barking...

Dog 클래스는 Animal 클래스를 상속받아 Eat() 메서드를 사용할 수 있습니다. 이렇게 상속을 통해 코드의 중복을 줄이고 확장성을 높일 수 있습니다.

반응형