2024-04-23
그동안 TIL 을 계속 써왔지만, 이 방향이 맞는지 긴가민가 했었다.
나만의 틀을 만들어 오늘의 키워드, 공부한 내용, TIL 마무리 및 내일 할 일 을 정리하였지만,
몇가지의 단점이 있었다.
등의 이유로 TIL 의 틀을 바꾸기로 하였다.
C++ 과 C# 은 모두 C 언어(절차 지향 프로그래밍 언어)에서 파생된 언어이다.
C++ 은 C 언어를 기반으로, 속도나 효율성의 저하 없이 C 언어를 개선함과 동시에 객체 지향 프로그래밍 기능을 추가한 언어이다.
C# 은 C++ 을 기반으로, 비주얼 베이직(visual basic) 의 편의성을 결합하여 만든 객체 지향 프로그래밍 언어이다.
절차 지향 프로그래밍 언어의 경우,
순서에 따라 절차대로 함수를 만들어 프로그래밍 하기 때문에 코드의 양이 많아지고, 관리하기가 어렵다.
반면, 객체 지향 프로그래밍 언어의 경우,
관련있는 데이터와 명령어를 하나로 묶어 객체라는 조립 단위를 만들고,
필요한 객체를 조립하는 방식으로 프로그램을 만들기 때문에 코드의 재사용과 관리 및 유지 보수가 쉽다.
Object-Oriented Programming.
캡슐화 (Encapsulation)
상속 (Inheritance)
다형성 (Polymorphism)
하나의 인터페이스나 기능을 다양한 방식으로 구현하거나 사용할 수 있는 능력
하나의 메서드 이름이 다양한 객체에서 다르게 동작할 수 있는 것
코드의 가독성과 재사용성을 높임
추상화 (Abstraction)
객체 (Object)
필드 : 클래스에서 사용되는 변수, 객체의 상태를 나타내는 데이터를 저장
메서드 : 클래스에서 수행되는 동작 정의, 객체의 동작을 구현하기 위해 사용
생성자 : 객체를 초기화하는 역할, 객체가 생성될 때 자동으로 호출되며, 필드를 초기화
소멸자 : 객체가 소멸될 때 호출되는 메서드, 메모리나 리소스의 해제
모두 사용자 정의 형식을 만드는 데 사용됨
구조체는 값 형식이라, 스택에 할당되고 복사될 때 값이 복사됨
클래스는 참조 형식이라, 힙에 할당되고 참조로 전달됨
Class Person1
{
public string Name;
public int Age;
public void Print()
{
Console.WriteLine("Name : " + Name);
Console.WriteLine("Age : " + Age);
}
}
Struct Person2
{
public string Name;
public int Age;
public void Print()
{
Console.WriteLine($"Name : {Name}, Age : {Age}");
}
}
Person1 p1 = new Person1(); // 참조 형식
p1.Name = "Kim";
p1.Age = 20;
p1.Print();
Person2 p2; // 값 형식
p2.Name = "Lee";
p2.Age = 25;
p2.Print();
위에서 알아봤듯이, 클래스와 구조체를 선언하는 방식이 다르다는 것을 확인할 수 있다.
2주차 과제 , 개인 프로젝트를 진행하다보니
코드가 너무 길어져 클래스로 구분해야할 필요를 느꼈다.
객체지향 프로그래밍의 장점을 제대로 활용하지 못하고 있는 것 같아 더 어렵게 느껴졌다.
Player - 상태 (HP, Gold, Lv) , 인벤토리 (Helmet, Armor, Weapon)
Dungeon - 난이도 (얻을 수 있는 골드, 입을 수 있는 피해량)
Shop - Helmet, Armor , Weapon (Price) - (Buy , Sell)
처럼 클래스로 묶을 수 있는 데이터를 정리한 뒤, 클래스화하여
객체지향 프로그래밍의 장점을 최대한 살려
개인 프로젝트를 완성하는 것이 목표이다.