ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20250331_(1) Object-Oriented Programming, OOP
    Study/C# 2025. 3. 31. 15:42


     

    객체지향 프로그래밍(OOP) 은 프로그램을 데이터(속성) 와 그 데이터를 다루는 행위(메서드)하나의 단위(객체, Object) 로 묶어 구성하는 프로그래밍 패러다임이다.

    절차형 프로그래밍이 “순차적 작업 흐름”에 초점을 맞췄다면,

    객체지향 프로그래밍은 “객체 간의 관계와 메시지 교환”을 중심으로 프로그램을 구성한다.


    1. 객체(Object)와 클래스(Class)

    • 객체(Object): 현실 세계의 사물이나 개념을 프로그래밍 세계로 추상화한 실체. 속성과 행위를 가짐.
    • 예: 고양이 → 이름, 나이, 색상(속성), 울다(), 점프하다()(행위)
    • 클래스(Class): 객체를 생성하기 위한 청사진(설계도).
    • 클래스에서 new 키워드로 객체(인스턴스)를 생성함.
    class Cat
    {
        public string Name;
        public int Age;
    
        public void Meow()
        {
            Console.WriteLine("야옹");
        }
    }
    
    
    Cat myCat = new Cat { Name = "나비", Age = 2 };
    myCat.Meow(); // 야옹
    
    

     


    2. 객체지향 프로그래밍의 4가지 핵심 특성

    1) 캡슐화 (Encapsulation)

    • 객체의 내부 상태(변수, 필드)를 외부에서 직접 접근하지 못하게 막고,
    • 공개된 메서드(속성, getter/setter 등) 를 통해서만 접근 가능하도록 설계
    class BankAccount
    {
        private int balance;
    
        public void Deposit(int amount)
        {
            if (amount > 0)
                balance += amount;
        }
    
        public int GetBalance() => balance;
    }
    
    

    2) 상속 (Inheritance)

    • 기존 클래스(부모 클래스)의 속성과 기능을 재사용하고 확장할 수 있도록 하는 기능
    • 코드 재사용성과 확장성을 높여줌
    class Animal
    {
        public void Breathe() => Console.WriteLine("숨을 쉰다");
    }
    
    class Dog : Animal
    {
        public void Bark() => Console.WriteLine("멍멍");
    }
    
    

    3) 다형성 (Polymorphism)

    • 같은 이름의 메서드라도 객체에 따라 다른 방식으로 동작할 수 있게 하는 성질
    • 인터페이스, 추상 클래스 등을 통해 구현 가능
    Animal a = new Dog();
    a.Breathe();  // Animal의 메서드
    // a.Bark();   // 접근 불가: Animal 타입 기준
    
    

    4) 추상화 (Abstraction)

    • 복잡한 내부 구현은 감추고, 중요한 기능(행동)만 외부에 드러냄
    • 인터페이스 또는 추상 클래스를 통해 구조만 정의
    interface IShape
    {
        double GetArea();
    }
    
    

    3. C#에서 객체지향을 구성하는 요소

    요소 설명

    class / object 클래스 정의 및 인스턴스 생성
    interface 추상적인 행동만 정의 (다중 상속 가능)
    abstract class 추상화된 공통 로직 정의, 일부 구현 포함 가능
    virtual, override 다형성 구현
    sealed 상속 제한
    new 메서드 숨기기 (hiding)
    접근 제한자 (public, private, protected) 캡슐화 및 정보은닉 구현

     


    4. 객체지향의 장점

    • 모듈화: 객체 단위로 나누어 설계하므로, 분리된 관리가 용이
    • 재사용성: 상속과 인터페이스를 통해 기존 코드를 쉽게 재활용
    • 확장성: 기존 코드 변경 없이 새로운 기능을 추가 가능
    • 유지보수 용이성: 추상화와 다형성으로 구조적 변경에 유연하게 대응

    5. 객체지향 설계와 SOLID 원칙의 연결

    OOP를 올바르게 적용하기 위해서는 SOLID 원칙이 핵심이다.

    앞서 설명한 것처럼, 추상화 프로그래밍은 DIP, ISP와 관련 있고,

    상속과 다형성은 OCP와 LSP와 직접 연결된다.

    OOP 요소 연관된 SOLID 원칙

    추상화 DIP, ISP
    상속 LSP, OCP
    다형성 OCP, LSP
    캡슐화 SRP

    6. 객체지향 설계 예시

    interface INotification
    {
        void Send(string message);
    }
    
    class EmailNotification : INotification
    {
        public void Send(string message) => Console.WriteLine($"이메일: {message}");
    }
    
    class SmsNotification : INotification
    {
        public void Send(string message) => Console.WriteLine($"SMS: {message}");
    }
    
    class AlarmService
    {
        private readonly INotification _notification;
    
        public AlarmService(INotification notification)
        {
            _notification = notification;
        }
    
        public void Alert(string message)
        {
            _notification.Send(message);
        }
    }
    
    

     

    이 설계는 다음 원칙을 반영한다:

    • 추상화: INotification 인터페이스
    • 다형성: 여러 구현체가 동일한 인터페이스를 따름
    • DIP: AlarmService는 구현체가 아닌 추상화에 의존

    7. 객체지향의 한계와 주의점

    • 객체 간 관계가 복잡해지면 오히려 유지보수가 어려워질 수 있음
    • 설계에 과도하게 집착하면 오히려 개발 속도 저하 및 과설계(Overengineering) 발생
    • 불필요한 상속보다 조합(Composition) 을 활용하는 것이 더 나은 경우도 많음

    • 객체지향 프로그래밍은 현실 세계의 개념을 코드로 표현하여, 유지보수성과 재사용성이 높은 프로그램을 설계할 수 있도록 해준다.
    • OOP의 네 가지 핵심 특성은 캡슐화, 상속, 다형성, 추상화이며, 각각의 특성은 SOLID 원칙과 밀접하게 연관된다.
    • C#은 클래스, 인터페이스, 접근제어자 등 객체지향 구현을 위한 다양한 구문과 키워드를 지원하며, 그 구조를 기반으로 효율적인 설계를 할 수 있다.

     

    'Study > C#' 카테고리의 다른 글

    20250331_(3) Generalized Programming  (0) 2025.03.31
    20250331_(2) Abstract Programming  (0) 2025.03.31
    20250327_(7) Collection  (0) 2025.03.28
    20250327_(6) Boxing / Unboxing  (0) 2025.03.28
    20250327_(3) The SOLID Principles  (0) 2025.03.28
Designed by Tistory.