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 |