STIKA
Unity 캠프 12일차 TIL < C# 문법 3-1 / 팀 과제 > 본문
24.01.09 Tue
❤️ TIL
Today I Learned
❤️하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
📌 오늘의 계획
- C# 문법 3주차 강의 듣기
- 팀 과제 회의하기
✏️ 작업 내용
✔️ 팀 과제
기한 : 1/16(화) 21:00까지
- 프로젝트 이름 : 다이어트 던전
- 몬스터 종류
- 탕후루
- 떡볶이
- 대창
- GitHub Repository → Public으로 올리고 공유
- README 작성
- 작업 분배
- 초기화면 (개인 과제 코드 가져와서 정리)
- 전투의 전반적인 셋팅
- 실제 전투, 공격 차례
- 전투 결과
- 휴식, 보상 등의 추가 구현
- 제출
- 시연 영상 찍기
- 유튜브에 올리기
- GitHub주소와 함께 Form제출
✔️ C# 문법
객체지향 프로그래밍
OOP - Object Oriented Programming 의 특징
- 캡슐화 (Encapsulation)
- 관련된 데이터와 기능을 하나의 단위로 묶는 것
- 데이터, 메서드의 정보를 은닉하고 접근을 제한하여 안전성과 유지보수성을 높임
- 상속 (Inheritance)
- 기존의 클래스를 확장하여 새로운 클래스를 만드는 메커니즘
- 부모의 특성과 동작을 자식이 상속받아서 재사용
- 코드의 중복을 줄이고, 코드의 구조화와 유지보수에 용이
- 다형성 (Polymorphism)
- 하나의 인터페이스나 기능을 다양한 방식으로 구현하거나 사용할 수 있는 능력
- 오버로딩과 오버라이딩을 통해 구현
- Virtual 가상 사용
- 코드의 가독성과 재사용성을 높임
- 추상화 (Abstraction)
- 복잡한 시스템이나 개념을 단순화하고 필요한 기능에 집중하는 것
- 불필요한 부분을 생략하고 중요한 것에만 중점을 두는 것
- 클래스들의 중요하고 공통된 성질들을 추출하여 부모 클래스를 선정하는 개념
- 객체 (Object)
- 클래스로부터 생성된 실체
- 데이터와 해당 데이터를 조작하는 메서드를 가지고있음
- 객체들 간의 상호작용을 통해 프로그램이 동작
class Person
{
public string Name;
public int Age;
public void PrintInfo()
{
Console.WriteLine("Name: " + Name);
Console.WriteLine("Age: " + Age);
}
}
Person p = new Person();
p.Name = "John";
p.Age = 30;
p.PrintInfo();
출력: Name: John, Age: 30
Person p = new Person()
person의 주소를 담을 수 있는 p라는 공간을 만듬
new로 실제로 만들어진 person의 공간의 주소를 p에담음
or
p = 분양권
new person = 실제로 분양받은 아파트
Class의 구성요소
- 필드 (Fields)
- 클래스에서 사용되는 변수
-
보통 private 접근 제한자를 사용하여 외부에서 직접적인 접근을 제한필요한 경우에는 프로퍼티를 통해 간접적으로 접근
class Player { // 필드 선언 private string name; private int level; }
- 메서드 (Methods)
- 수행되는 동작, 동작을 구현하기 위해 사용
- 클래스 내부에 있는 함수를 메서드라고 함
- 보통 메서드는 public 접근 제한자를 사용하여 외부에서 호출할 수 있도록 한다.
- 메서드를 호출하기 위해서는 해당 메서드가 속해 있는 클래스의 객체를 생성해야 한다.
class Player { // 메서드 public void Attack() { // 공격 동작 구현 } }
- 생성자 (Constructors)
- 객체를 초기화하는 역할
- 객체가 생성될 때 자동으로 호출
- 필드를 초기화
- 생성자를 안만들면 디폴트 생성자가 생기지만
매개변수를 받는 생성자를 만들고 나면 디폴트 생성자는 안생김
Person person1 = new Person(); // 디폴트 생성자 호출 Person person2 = new Person("John", 25); // 매개변수를 받는 생성자 호출
- 소멸자 (Destructors)
- 객체가 소멸될 때 호출되는 메서드
- 메모리나 리소스의 해제 등의 작업
클래스 : 붕어빵틀
객체 : 붕어빵틀로 찍어낸 붕어빵
하지만 팥붕, 슈붕, 피붕 다 다름
프로퍼티 (Property)
- Getter, Setter
- 접근 제한자를 적절히 사용
- 필요한 부분만 외부에서 접근 가능하도록 설정하는 것이 좋다
class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0)
age = value;
}
}
}
Person person = new Person();
person.Name = "John"; // 컴파일 오류: Name 프로퍼티의 set 접근자는 private입니다.
person.Age = -10; // 유효성 검사에 의해 나이 값이 설정되지 않습니다.
프로퍼티 접근 제한자 적용
유효성 검사
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
자동 프로퍼티 (Auto Property)
다형성
Virtual 사용
class Unit { ... }
class Marin : Unit
class Zergling : Unit
<참조형태와 실형태가 같을때>
Marine marine = new Marine();
marine.Move();
marine.Attack();
Zergling zergling = new Zergling();
zergling.Move();
zergling.Attack();
<참조형태와 실형태가 다를때>
List<Unit> list = new List<Unit>();
list.Add(new Marine());
list.Add(new Zergling());
foreach (Unit unit in list)
{
unit.Move();
}
(참조형태 == 실형태) 로 관리할때는 문제가 안생김
근데 실형태를 참조형태(부모형태)로 관리하려고 할 때 문제가 생김
Unit은 Unit부분만 알고있기 때문
Unit 으로 Virtual 키워드가 있는 곳으로 접근했을 때
내가 유닛이지만 실형태랑 다를수있어 그러니 확인해봐
= 실형태에 재정의가 되어있는지 확인해봐라
추상클래스
- 직접적으로 객체를 만들지는 못함
- abstract class로 만듬
- 주로 상속을 위한 베이스 클래스로 사용
- abstract 메서드를 만들 수 있지만 자식클래스에서 반드시 구현되어야 함
오버라이딩(Overriding)
- 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의하는 것
- 상속 관계에 있는 클래스 간에 발생
메서드의 이름, 매개변수 및 반환타입이 동일해야 한다 - 자식은 부모의 메서드를 재정의하여 자신에게 맞는 동작으로 구현 가능
오버로딩(Overloading)
- 동일한 메서드 이름
- 매개변수의 개수, 타입 또는 순서가 다름
- 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.
📝 오늘의 마무리
이제 본격적인 팀 프로젝트의 시작이다.
오늘 처음으로 제대로 된 회의를 하고 분업까지 깔끔히 됐다.
다같이 3주차 강의를 전부 듣고 나서 본격적으로 프로젝트를 만들기로 했는데
일단 욕심내지 않고 필수구현만 만들기로 했다.
Class로 들어가니까 갑자기 급격하게 외워야 할 것, 이해 할 것이 굉장히 많아졌다.
이거를 자판기마냥 내뱉을 수 있는 날이 왔으면 좋겠다.
✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
✏️ 꾸준히 기록을 남기는 습관 가지기
📕 오늘의 학습 키워드
📕 공부한 내용 본인의 언어로 정리하기
📕 오늘의 회고
📕 12시간 중 얼마나 몰입했는지
📕 더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지
'프로그래밍 > Unity + C#' 카테고리의 다른 글
Unity 캠프 14일차 TIL < 알고리즘 / 팀 프로젝트 1-1 > (0) | 2024.01.11 |
---|---|
Unity 캠프 13일차 TIL < C# 문법 3-2 / 알고리즘 > (0) | 2024.01.10 |
Unity 캠프 11일차 TIL < TextGame 2차 > (0) | 2024.01.08 |
Unity 캠프 10일차 TIL < TextGame 1차 > (0) | 2024.01.04 |
내일배움캠프 Unity 9일차 TIL - C# 문법 2-2 (0) | 2024.01.04 |