class로 struct와 다르게 참조 타입형식입니다.
void main()
{
Human human = new Human();
human.thirst = 50;
// human.Hungry = 20; private로 선언된 메소드(동작)나, 필드(데이터)에 접근 할 수 없습니다.
human.DrinkWater(20);
Human human2 = human;
human2.DrinkWater(20);
}
class Human
{
private int health = 100;
private int hungry = 50;
public int thirst = 20;
public void DrinkWater(int value)
{
thirst += value;
Console.WriteLine($"물을 마셔 {value}만큼 갈증이 해소 됬습니다. 현제 갈증 상태는 {Thirst}입니다.");
}
public void EatFood(int value)
{
hungry += value;
Console.WriteLine($"먹을 것을 먹어 {value}만큼 배고픔이 해소됬습니다.")
}
}
물을 마셔 20만큼 갈증이 해소 됬습니다. 현제 갈증 상태는 70입니다.
물을 마셔 20만큼 갈증이 해소 됬습니다. 현제 갈증 상태는 90입니다.
접근 제한자에 의해서 접근 범위가 결정됩니다.
private의 경우에는 자신을 제외한 모든 객체에 대한 접근 거부
protected의 경우에는 자신과 자신을 상속 받는 하위 객체에게만 접근 허용
public의 경우에는 자신을 포함한 모두에게 접근 허용입니다.
클래스(객체)는 단 하나의 책임만 가져야합니다. 즉, 하나의 클래스는 하나의 기능만을 담당하여, 하나의 책임을 수행하는데 집중되도록 클래스를 개별적으로 설계하는 원칙입니다.확장에 열려 있어야 하며, 수정에는 닫혀 있어야 합니다. 수정보다는 추가적인 코드를 작성하여, 기능을 추가할 수 있어야 한다는 원칙입니다.자식 객체는 언제나 부모 타입으로 교체될 수 있어야 합니다. 다형성의 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여, 하위 클래스의 인스턴스를 받은 상태에서 부모의 메서드를 사용해도 프로그램이 동작해야 한다는 원칙입니다.하나의 큰 인터페이스보다 용도에 맞는 인터페이스를 잘게 분리해야 합니다. 프로그램의 유지보수에서 발생할 수 있는 인터페이스의 분리나 수정으로 인한 많은 양의 코드 수정을 막기 위해 불필요한 정보까지 갖일 수 있는 하나의 거대한 인터페이스보다, 상황에 맞도록 소규모로 분리된 인터페이스를 사용할 수 있어야 한다는 원칙입니다.고수준의 모듈은 저수준 모듈의 구현에 의존해선 안됩니다. 객체가 객체를 참조하거나, 의존 관계를 맺을 때, 세부구현된 객체 보다 상위 객체를 참조함으로서, 세부구현된 클래스의 변환 발생시에도 유연하게 동작핤 ㅜ있도록 구조를 맺은 원칙입니다.