오늘 배운 내용
- 객체지향의 4대 특징
- 캡슐화(Encapsulation)
- 상속(Inheritance)
- 추상화(Abstraction)
- 다형성(Polymorphism)
캡슐화(Encapsulation)
- 프로그램 내에서 객체가 동작하기 위한 데이터(필드)와 동작(메서드)를 객체 자신이 가질 수 있는 성질
- 은닉성 : 외부에는 필요한 정보만 공개한다. (private)
class Car
{
float _moveSpeed;
bool _onHeadLight;
void MoveFront()
{
}
void OnHeadLight()
{
}
}
public class Game
{
private int _playerId = 5;
public int PlayerId
{
get
{
return _playerId;
}
private set
{
_playerId = value
}
}
}
public float MoveSpeed {get; private set;}
- 인스턴스(Instance)
Player player = new Player
- 즉 Player라는 클래스(설계도) 참조타입을 Heap메모리에 할당 할것인데, 클래스(설계도) 기반으로 생성된 실질적인 객체 = 인스턴스(new Player)를 Heap 메모리에 주소값(player가 가르키는 주소)을 할당한다.
- 생성자
public 구조체명()
{
Console.WriteLine("생성자 호출");
}
- 인스턴스의 new 할당이 될때 생성자를 호출하고 객체를 생성한다.
- 데이터를 초기화할 때 사용한다
- 다른 객체와 참조할 준비가 됐는지 확인할 때
상속(Inheritance)
- 상속을 사용하게 되면, 공통점을 묶어 Base Class 즉, 부모 클래스로 두고, 여기서 클래스를 파생시켜 중복된 코드를 줄이고, 간결하게 작성할 수 있게 된다.
public class Monster
{
}
public class Slime : Monster
{
}
public class Goblin : Monster
{
}
- Protected
- Class는 보통 private과 public을 사용하지만, 상속일 때는 protect를 사용하여 외부에서는 불가능하지만 상속관계에서는 사용 가능하게 해준다는 뜻으로 사용이 가능하다.
- 오버라이딩(Overriding)
- 부모 클래스가 가진 함수를 자식 클래스가 상속 받아서 자신의 동작으로 재정의 하는것 (virtual과 override)
public class Monster
{
public virtual void Skill()
{
Console.WriteLine("스킬 사용");
}
}
public class Slime : Monster
{
public override void Skill()
{
Console.WriteLine($"{Name} : 점액질 발사");
}
}
public class Goblin : Monster
{
public void Skill()
{
Console.WriteLine($"{Name} : 할퀴기")
}
}
- Sealed
- 상속의 상속을 막을 때, 해당 자식 객체가 최하위로 설정 하려할 때는 Sealed를 붙여준다. (내가 쓴 코드를 다른 사람이나 팀원이 상속할때 의도를 해치지않고 실수를 줄이도록 도와주는 코드)
public sealed class Goblin : Monster
{
}
- 오버로딩(Overloading)
- 같은 이름으로 다른 동작을 가진다. (반환형과 인자를 달리하지만 같은 이름으로 함수를 선언하는것)
public void Attack()
{
Console.WriteLine($"{Name} : {AttackValue} 공격력으로 공격);
}
public void Attack(int damage)
{
Console.WriteLine($"{Name} : {damage} 공격력으로 공격);
}
- 캐스팅(업캐스팅, 다운캐스팅)
public void Run()
{
Monster mon = new Boss("boss");
if (mon is Boss)
{
(mon as Boss).Shouting();
}
}
추상화(Abstract)
- 다른 객체가 상속받을 뼈대를 만들 때 사용. 프로그램에서 필요한 기능들만 간소화 시키는 것.(추상 클래스는 인스턴스(new할당)생성이 불가능 하다.)
public abstract class Monster
{
}
public abstract void Walk();
public override void Walk()
{
Console.WriteLine("강아지가 네 발로 걸어요");
}
다형성(Polymorphism)
- 다형성은 이름과 같이 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질이다.