using System.ComponentModel;
using System.Numerics;
using System.Threading;
namespace CSharp
{
internal class Program
{
// Knight 를 객체로 표현
// 속성 : hp, attack, pos
// 기능 : Move, Attack, Die
//객체를 표현하는 문법은 class
// 붕어빵 틀에 해당한다고 생각하면 편함
// 재료만 잘 넣어주면 결과가 나옴
class Knight
{
// public 외부에서도 접근할 수 있다는 의미
public int hp;
public int attack;
public void Move()
{
Console.WriteLine("Knight Move");
}
public void Attack()
{
Console.WriteLine("Knight Attack");
}
}
static void Main(string[] args)
{
// 절차 지향 (procedure) 지향
// 함수 지향적
// 함수의 순서가 중요
// 순서가 바뀌면 로직이 바뀜
// 객체 지향 (OOP) Object Oriented Programming
// 프로그램을 객체 단위로 구성
// 객체를 사용하는 문법은 new 이다.
// 설계도를 기반으로 만들면된다.
Knight knight = new Knight();
// new를 사용하면 에러 발생
// 또하나의 문법이 있다.
//Knight knight1 = null; 프로그램이 뻗음 존재하지 않은 곳에 접근할 수 없음
//
knight.hp = 100;
knight.attack = 10;
knight.Move();
knight.Attack();
}
}
}
| 절차지향 프로그래밍 (Procedural) | 객체지향 프로그래밍 (OOP) |
|---|---|
| 프로그램을 함수 단위로 구성 | 프로그램을 객체 단위로 구성 |
| 함수 호출 순서에 종속됨 | 객체의 속성(데이터) + 기능(메서드)으로 구성 |
| 유지보수가 어려움 | 유지보수가 용이 |
| 중복 코드가 많아짐 | 코드 재사용성 증가 |
✅ OOP는 모든 것을 객체 단위로 생각하며, 데이터(속성)와 동작(기능)을 함께 묶어 관리하는 방식입니다.
Knight 클래스 정의 class Knight
{
public int hp; // 체력
public int attack; // 공격력
public void Move()
{
Console.WriteLine("Knight Move");
}
public void Attack()
{
Console.WriteLine("Knight Attack");
}
}
✅ 클래스(Class)란?
Knight 클래스는 기사(Knight) 캐릭터를 나타내는 객체의 설계도(틀)입니다.Knight 클래스를 기반으로 여러 개의 Knight 객체를 생성 가능.✅ 멤버 변수(속성)
hp: 기사의 체력을 저장하는 변수.attack: 기사의 공격력을 저장하는 변수.✅ 멤버 함수(기능)
Move(): 기사의 이동 동작을 수행.Attack(): 기사의 공격 동작을 수행.Main 메서드) static void Main(string[] args)
{
// 🔹 객체 생성
Knight knight = new Knight(); // new 키워드 사용
// 🔹 속성 값 설정
knight.hp = 100; // 체력 설정
knight.attack = 10; // 공격력 설정
// 🔹 기능 실행
knight.Move(); // "Knight Move" 출력
knight.Attack(); // "Knight Attack" 출력
}
✅ 객체(Object)란?
Knight 클래스(설계도)를 기반으로 생성된 실제 메모리에 존재하는 실체.Knight knight = new Knight(); → knight라는 객체 생성.✅ 객체 생성 방식
| 선언만 한 경우 | new 키워드 사용 |
|----------------|------------------|
| Knight knight; | Knight knight = new Knight(); |
| 메모리 할당 없음 | 메모리 할당(O) |
✅ 객체의 속성 값 설정
knight.hp = 100;
knight.attack = 10;
✅ 객체의 기능 실행
knight.Move(); // "Knight Move" 출력
knight.Attack(); // "Knight Attack" 출력
hp, attack과 같은 속성을 통해 데이터를 저장.Move(), Attack() 등의 함수로 객체의 동작을 정의.