본문 바로가기
Unity/c# 공부

객체지향 프로그래밍의 4대 원칙

by _딩동 2025. 2. 22.
객체지향 프로그래밍(OOP, Object-Oriented Programming)의 4대 원칙
캡슐화, 상속, 다형성, 추상화 입니다.

캡슐화 (Encapsulation) 란❓

 

1️⃣ 데이터(변수)와 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하도록 보호하는 것

2️⃣ 정보 은닉(Information Hiding)을 통해 데이터 보호 및 무결성 유지

3️⃣ private, protected, public 같은 접근 제한자를 사용해 구현

 

장점  

private로 데이터를 보호하고 public 메서드를 통해 안전하게 접근 할 수 있습니다.

불필요한 직접 접근을 막아 데이터의 안정성을 유지합니다.

class Animal
{
	private string myDog;	// 외부에서 직접 접근 불가
    
    public void SetSpeak(string newSpeak)	//setter 메서드
    {
    	if(!string.IsNullOrEmpty(newSpeak))
        {
        	myDog = newSpeak;
        }
    }
    
    public void GetSpeak()	// getter 메서드
    {
    	return myDog;
    }
}

class Program
{
	static void Main()
    {
    	Animal a = new Animal();
        a.SetSpeak("왈왈");
        Console.WriteLine(a.GetSpeak());	// 출력 : 왈왈
    }
}

상속 (Inheritance) 란 ❓

 

1️⃣ 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있게 하는 것

2️⃣ 코드의 재사용성 증가 및 유지보수 편리

3️⃣ : (콜론)으로 부모 클래스를 상속받습니다.

 

장점

○부모의 클래스를 상속받아 매서드를 재사용 할 수 있습니다.

코드의 재사용성이 증가하고 유지보수가 편리해집니다.

class Animal
{
	public void Eat()
    {
    	Console.WriteLine("이 동물은 먹는 활동을 합니다");
    }
}

class Dog : Animal	// Animal 클래스 상속받음
{
	public void Bark()
    {
    	Console.WriteLine("왈왈");
    }
}

class Program
{
	static void Main()
    {
    	Dog myDog = new Dog();
        myDog.Eat();	// 부모 클래스의 메서드 사용가능
        myDog.Bark();	// 자식 클래스의 메서드 사용
    }
}

다형성 (Polymorphism) 이란❓

1️⃣ 같은 이름의 메서드가 여러 형태로 동작할 수 있도록 하는 것을 말합니다.

2️⃣ 오버로딩(Overloading) → 같은 클래스에서 같은 이름의 메서드를 매개변수 다르게 여러개 정의

3️⃣ 오버라이딩(Overriding) → 부모 클래스의 메서드를 자식 클래스에서 재정의하여 다르게 동작

 

✅장점

○ 부모 타입으로도 자식 클래스의 오버라이딩된 메서드를 호출할 수 있습니다.

○ 런타임 시점에서 객체 타입에 맞게 적절한 메서드가 실행됩니다.

 

https://dingdong.tistory.com/16

 

오버로딩과 오버라이딩의 차이점

오버로딩❓같은 이름의 *메서드를 여러 개 정의할 수 있는 기능단, *매개변수의 개수나 타입이 다르게 설정되어 있어야 합니다.1️⃣ 메서드 이름은 같아야 합니다2️⃣ 매개변수 개수, 타입, 순

dingdong.tistory.com


추상화 (Abstraction) 란❓

1️⃣ 불필요한 구현 세부 사항을 숨기고, 핵심 기능만 제공하는 것 입니다.

2️⃣ 인터페이스(interface) 또는 추상 클래스(abstract class)를 사용하여 설계합니다.

3️⃣ 유연한 설계가 가능함으로 유지보수성이 향상됩니다.

 

주의사항

○ 추상 클래스(abstract class)는 인스턴스화 불가능, 자식 클래스에서 반드시 구현해야 합니다.

 

장점

○ 불필요한 상세 구현을 감추고, 필수 기능만 제공하여 코드의 일관성을 유지합니다.

 

abstract class Animal	//클래스에서 abstract 명시
{
	public abstract void MakeSound();	// 추상 메서드 (구현x)
    
    public void Sleep()
    {
    	Console.WriteLine("zzz...");
    }
}

class Dog : Animal
{
	public override void MakeSound()	// 자식이 추상 메서드 구현
    {
    	Console.WriteLine("왈왈");
    }
}

class Program
{
	static void Main()
    {
    	Dog myDog = new Dog();
        myDog.MakeSound();	// 출력 : 왈왈
        myDog.Sleep();	// 출력 : zzz...
    }
}

 

 

긴 글 읽어주셔서 감사합니다
도움이 되셨다면 공감 & 댓글 응원 부탁드립니다