[C#] 객체지향 프로그래밍

728x90

객체지향 프로그래밍 OOP(Object Oriented Programming)의 특성은 아래와 같습니다.

추상화(Abstraction)

캡슐화(Encapsulation)

상속(Inheritance)

다형성(Polymorphism)

1. 캡슐화

캡슐화(Encapsulation):

캡슐화의 주된 목적은 "데이터의 은닉"입니다.

민감한 데이터를 private로 감추어서 public setter또는 getter메소드로만 private로 감춘 데이터에 접근하거나,

변경 할 수 있습니다.

따라서 이러한private변수에 read-only(읽기전용) 또는 write-onlty(변경만 가능) 선택접 접근을 제어할 수 있게됩니다.

캡슐화를 하게되면 보안성이 증가되며 맴버변수와 함수를 더 좋게 제어 할 수 있게 됩니다.

 

예제)

 

Car.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Car
    {
        //private는 다른클래스에서 직접 접근이 불가능하다.
        private String model = "PMMODEL";
        public String handle = "right";
        protected string a = "abc";

        public string getModel()
        {
            return model;
        }

        public void setModel(String str)
        {
            model = str;
        }
        public void getModel2()
        {
            Console.WriteLine(handle);
        }
    }
}

Program.cs(메인함수)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();
            Car car2 = new Car();

            car.setModel("aaaaaa");
            Console.WriteLine(car.getModel()); //출력 aaaaaa



        }
    }
}


2. 상속

부모클래스의 멤버변수, 메서드를 상속받을 수 있습니다.

 

예제)

CarRenew.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class CarRenew : Car // C#에서 상속은 자식클래스 : 부모클래스(슈퍼클래스)이다.
    {
        ///메서드나 변수가 직접 선언되어 있지않아도 부모클래스에 메서드가 있다면 
        //자유롭게 사용가능하다.
        
        public void getA()
        {
            Console.WriteLine(a); //protected는 자식클래스까지 사용가능하다.
        }

        public void getModel3()
        {
            //Console.WriteLine(model); //private는 자식 클래스라도 사용할 수 없다
        }
    }
}

Program.cs(메인함수)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();
            Car car2 = new Car();

            car.setModel("aaaaaa");
            Console.WriteLine(car.getModel()); //출력 aaaaaa

            CarRenew carRenew = new CarRenew();

            carRenew.handle = "abc";

            Console.WriteLine(carRenew.getModel()); //출력 PMMODEL

            carRenew.getA(); //출력 abc

        }
    }
}

 

 

3.다형성

다형성은 여러가지 자료형을 가질 수 있는 것을 의미합니다.

다형성은 상속받은 메소드들을 동일하게 호출하며 다른 작업을 수행하도록 가능하게합니다.

 

예를들면 동물(부모클래스) "소리"를 낼 수 있습니다.

하지만 동물에 속하는 부엉이,고양이,강아지,(하위클래스)는 모두 "각자 고유의 소리"(상속받은 메소드)를 냅니다.

 

에졔)

Animal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Animal
    {
        public virtual void animalSound() //virtual은 오버라이딩을 가능하게 한다.
        {
            Console.WriteLine("소리를 냅니다");
        }
    }
}

 

Dog.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Dog : Animal
    {
        //오버라이딩 -> 메서드 재정의
        public override void animalSound() //재정의 했다는 것을 표시하기 위해 override를 적어준다.
        {
            Console.WriteLine("멍멍");
        }
    }
}

 

Cat.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Cat :Animal
    {
        public override void animalSound()
        {
            Console.WriteLine("야옹");
        }
    }
}

 

Program.cs(메인함수)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Animal();
            animal.animalSound(); //소리를 냅니다.

            Dog dog = new Dog();
            dog.animalSound(); //멍멍

            Cat cat = new Cat();
            cat.animalSound(); //야옹

            //객체를 변화시키면 메서드도 변화한다.
            animal = new Dog();
            animal.animalSound(); //멍멍

            animal = new Cat();
            animal.animalSound(); //야옹


        }
    }
}

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

[C#] 멀티스레드  (0) 2024.05.14
[C#] 데이터 베이스 연결 및 기본 CRUD  (1) 2024.05.14
[C#] 배열과 foreach문(반복)  (0) 2024.05.14
[C#] 비트 연산자  (0) 2024.05.13
C# 설치 및 환경설정  (1) 2024.05.13