450 likes | 728 Views
C# 스터디 -2. UPnL 장준영. 다음주 에 만들 것. 재미있고 간단한 총게임 ?. 다음주 에 만들 것. ( 사실 오늘 하려고 했는데 완성을 못함ㅠ . ㅠ ). 오늘 배울 것. 객체지향 프로그래밍 (OOP) 클래스 (class) 속성 / 메서드. 객체지향 프로그래밍. OOP. 객체지향 프로그래밍. 객체 들의 모임으로 해석하는 프로그래밍 방식 일종의 철학 ?. 객체. 속성과 메서드 ( 행동 ) 가 있는 것 객체가 정확히 뭐다 ! 라는 설명보다는 예 시를 드는 것이 더 빠름. 객체.
E N D
C# 스터디-2 UPnL장준영
다음주에만들 것 • 재미있고 간단한 총게임?
다음주에만들 것 • (사실 오늘 하려고 했는데 완성을 못함ㅠ.ㅠ)
오늘 배울 것 • 객체지향 프로그래밍(OOP) • 클래스(class) • 속성/메서드
객체지향 프로그래밍 OOP
객체지향 프로그래밍 • 객체들의 모임으로 해석하는 프로그래밍 방식 • 일종의 철학?
객체 • 속성과 메서드(행동)가 있는 것 • 객체가 정확히 뭐다! 라는 설명보다는예시를 드는 것이 더 빠름.
객체 • 사람 • 키, 몸무게, 나이와 같은 속성 • 걷는다,먹는다와 같은 메서드
클래스(class) • 사람은 어떤어떤 속성과 메서드를 가지고 있다. • 객체를 정의!
인스턴스 • 사람이 뭐다를class로 나타낸다면, 사람 하나하나를 실제로 만든 것 • Person ybbarng = new Person(“방용배”); ->방용배라는인스턴스를 만듦
인스턴스 • Person algy = new Person(“알게이”); • Person doju = new Person(“임동재”); • Person hoki = new Person(“황호기”);
속성 ~의 • 용배의 키 -> ybbarng.Height; • 용배의 나이 -> ybbarng.Age;
속성 • 속성은 변수처럼 대입할 수 있다. • 용배의 키가 182이다. -> ybbarng.Height = 182; • 용배가 2살 어려졌다 -> ybbarng.Age -= 2;
메서드 • 용배가 걷는다 -> ybbarng.walk(); • 용배가 먹는다 -> ybbarng.eat(고기);
갤러그를 객체지향적으로 프로그래밍 한다면?
클래스 class Shuttle { }
클래스 • 클래스는 다른 파일에 저장하는 경우가 많음. • 찾아보기 쉬우니까!
클래스 • Person 클래스를 만들어봅시다.
클래스 namespace ~~ { class Person { } } // 와 다 만들었다!
속성 • 변수 선언하듯이 선언 • 일단 public을 앞에 붙여보자. • public string name; // 이름 • public int age; // 나이 • public int height; // 키
속성 사실 얘들은 속성이 아니라 필드라고 부릅니다. 속성은 따로 있는데 필드처럼 보이게 합니다. 하지만 일단 필드를 속성이라고 알아둡시다.
메서드 • 인자가 없는 것 public void walk() { Console.WriteLine(“걷는다”); }
메서드 • 메서드 내에서 자기 자신의 속성에 접근 가능 public void walk() { Console.WriteLine(name + “이(가) 걷는다”); }
메서드 • 인자가 있는 것 public void eat(string food) { Console.WriteLine(food + “을(를)먹는다”); } // 나중에 ybbarng.eat(“고기”); 라고 실행하면 // 고기을(를)먹는다가 출력됨.
메서드 • 함수처럼 리턴값이 있을 수도 있다. • 다음의 함수를 생각해봅시다. • f(x) = x^2 + x • f(10) = 100 + 10 = 110
메서드 • 사람이 매년 3cm씩 큰다고 할 때, n년 후의 키를 반환 public int f(int n) { return height + 3 * n; }
여기까지 • 코드
Program.cs로 돌아가서 Main에 입력하세요
인스턴스 만들기 • Person ybbarng = new Person();
속성 건드리기 • ybbarng.name = "방용배"; • ybbarng.age= 30; • ybbarng.height= 182;
메서드 실행 • ybbarng.walk(); • ybbarng.eat(“고기”); • int result = ybbarng.f(10); • Console.WriteLine(result);
생성자 Person ybbarng = new Person(); ybbarng.name = "방용배"; ybbarng.age= 30; ybbarng.height= 182; • 요 네줄을 한 줄로 줄여줌.
생성자 • Person.cs에다가 다음을 추가 public Person(string name_, int height_, int age_) { name = name_; height = height_; age = age_; }
생성자 • Program.cs의 Main함수에서 다음과 같이 쓴다. Person ybbarng = new Person(“방용배”, 30, 182);
생성자 • 이렇게 해놓으면 쉽게 다른 사람의 인스턴스도 만들 수 있다. Person gaenari = new Person(“손도현”, 31, 183); Person nhne = new Person(“김도영”, 31, 170);
제한자 • public은 뭘까요?
제한자 • Person.cs에서 • public int height를 • private int height로 바꿔봅시다.
제한자 • Program.cs의 Main에서 • Console.WriteLine(ybbarng.name); • Console.WriteLine(ybbarng.age); • 는 되는데 • Console.WriteLine(ybbarng.name); • 은 안됨
제한자 • 왜 쓰는지 모르겠다면 그냥 다 public으로 하세요. • (나쁜 조언이지만 어쩔 수 없음…)
정적 속성/메서드 • static! • static void Main(string[] args)에도 있음.
정적 속성/메서드 • public static int total; • 얘는 ybbarng.total같은 식으로 접근하는게 아니고 • Person.total로 합니다.
정적 속성/메서드 • public static int total; • 전체 사람 수 같은 건 각각의 개인이 가지는 속성이 아니라 Person이라는 전체 클래스가 가지는 것이다!
정적 속성/메서드 public static void born() { total++; } • 메서드도 마찬가지 • 정적 메서드에서는 정적 속성만 건드릴 수 있다.
오늘 할 것 • Person 클래스에 원하는 속성/메서드를 하나씩 추가하세요. • 속성: 몸무게, 성별, 별명 등등 • 메서드: 잔다, 뛴다 등등