C#에서 using은 자원 해제와 관련된 선언문입니다.
이를 통해 프로그래머는 자원을 안전하게 해제할 수 있다.
using문을 사용하면 자원을 사용한 후에 자동으로 리소스를 해제할 수 있다.
이것은 코드에서 예외가 발생해도 자원을 안전하게 해제할 수 있도록 도와준다
클래스는 "객체를 만들기 위한 설계도"라고 생각하면 된다.
예를 들어, 과일이라는 개념을 나타내는 클래스를 만든다고 가정해자.
이 클래스에는 과일의 속성과 동작을 정의할 수 있다.
속성으로는 과일의 이름, 색상, 크기 등이 있을 수 있고,
동작으로는 과일을 먹는다거나 비교한다거나 하는 것들이 있을 수 있다.
가장 대표적인 예시 중 하나는 '사람' 클래스이다.
'사람' 클래스에는 "이름, 나이, 성별" 등의 속성이 있을 수 있고,
'먹다', '잠자다', '걷다' 등의 동작을 정의할 수 있다.
무조건 클래스를 생성한 후에 코딩시작!
using System;
class Michael
{
}
....
클래스를 기반으로 만드는 인스턴스!!
예를들어 '철수'라는 객체를 만들어서 그 객체의 속성을 설정하고, 동작을 수행해보자.
'철수' 객체는 이름이 "철수"이고, "나이가 15세"인 등의 속성을 가지고 있을 수 있다
이 객체는 '먹다'라는 동작을 수행할 수도 있을 것입니다.
"클래스로 구현한 모든 대상!"을 객체라 함!
객체는 클래스의 인스턴스라 불림
"인스턴스는 클래스로부터 생성된 객체"를 의미하며,
"객체는 클래스의 속성과 동작을 실제로 가지는 실체"이다.
객체를 지향한다는 의미.
코딩이 객체를 통해 이루어짐!
현실 세계의 객체들을 프로그래밍에서 모델링하여 문제를 해결하는 방법
using System
namespace Human //분류, 예를들어 책장
{
class Jae //Jae라는 클래스, 예를들어 책
{
}
}
위와같은 방식으로 사용하며,
네임스페이스를 사용하면 서로 다른 클래스들을 그룹화하여 코드를 조직화할 수 있다.
네임스페이스를 사용하면 클래스 이름이 충돌하는 상황을 방지할 수 있고, 코드의 가독성과 유지 보수성을 높일 수 있다.
using System
namespace Human //분류, 예를들어 책장
{
class Player
{
//각 int값들이
//속성이자 멤버변수이다
int Gold;
int Exp;
int Gender;
int HpPoint;
int MpPoint
Gold = 100;
//숫자가 상수, 변수의 반대개념
Exp = 100;
}
}
자료형 | 형식 | 범위 | 크기 |
---|---|---|---|
sbyte | System.SByte | -128 ~ 127 | 부호 있는 8 bit 정수 |
byte | System.Byte | 0 ~ 255 | 부호 없는 8 bit 정수 |
short | System.Int16 | -32,768 ~ 32,767 | 부호 있는 16 bit 정수 |
ushort | System.UInt16 | 0 ~ 65,535 | 부호 없는 16 bit 정수 |
int | System.Int32 | -2,147,483,648 ~ 2,147,483,647 | 부호 있는 32 bit 정수 |
uint | System.UInt32 | 0 ~ 4,294,967,295 | 부호 없는 32 bit 정수 |
long | System.Int64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 | 부호 있는 64 bit 정수 |
ulong | System.UInt64 | 0 ~ 18,446,744,073,709,551,615 | 부호 없는 64 bit 정수 |
float | System.Single | ±1.5e-45 ~ ±3.4e38 | 4 byte |
double | System.Double | ±5.0e-324 ~ ±1.7e308 | 8 byte |
decimal | System.Decimal | ±1.0 × 10−28 ±7.9 × 1028 | 16 byte |
char | System.Char | U+0000 ~ U+ffff | 유니코드 16 bit 문자 |
string | System.String | 문자열 | 유니코드 문자열 |
bool | System.Boolean | true & false | 4 byte |
플레이어의 행동들을 표현하는것을 멤버함수라고 한다.
ex) 아이템을 줍는다, 몬스터를 공격한다, 지형위를 움직인다, NPC와 대화한다…
class Player
{
int Hp;
int Att;
...
/*리턴값*/void Move ()
{
}
void Skill()
{
}
void GetItem()
{
}
void Talk()
{
}
} //게임에서 사용하기위해 설계했다
....
위의 식을 함수라고 부른다.
//덱빌딩을 만든다 -> 프로젝트생성
//주인공이 있다 -> 클래스 생성
//주인공이 화염속성이다 -> 멤버변수 생성
//주인공이 화염속성 카드로 적을 공격한다 -> 멤버함수
클래스는 설계도이다.
하나의 설계도를 가지고, 여러가지를 양산해서 만들 수 있다.
ex) Player클래스(설계도)를 가지고, 여러 플레이어를 만들 수 있다
class Player
{
//멤버변수는 클래스내부에 있다고 해서 멤버변수
int Hp;
int Att;
}
class Program
{
static void Main(string[] args)
{
Player NewPlayer1 = new Player();
Player NewPlayer2 = new Player();//객체를 만들다
}
멤버변수 = 클래스 내부에 존재
지역변수= 함수내부에 존재
class Player
{
public int Hp; //외부에 공개
protected int Att; //자식에게만 공개
private int Def; //내부에 공개
}
namespace ClassAccess
{
class Program
{
//객체지향의 은닉화를 대표하는 문법 -> 캡슐화
//접근제한 지정자
static void Main (string[] args)
{
player NewPlayer1 = new Player();
//만들어진 객체의 내용을 사용하기위해
//객체의 이름.을 사용한다
NewPlayer1.Hp = 1000;
//.Hp로 Player 클래스의
//public 접근제한 지정자 int Hp를 불러옴
//잘못쓰기도 힘들게 만들어놔라
//함수로 접근제한 지정자로 감출수
//혹은 공개할수있다.
}
}
}
class Player
{
"멤버변수는 외부에서 접근하지 못하는게 일반적으로 좋다."
private int Hp;
private int Att;
//그럴때 함수사용
//후에 내 Hp가 0혹은 내가 원하는 순간만 체크할수있다.
//가장 큰 이점은 디버깅 가능
//플레이어의 상태(멤버변수)가 변화될때마다 카운팅 가능
public void SetHp(int _Hp)
{
Hp = _Hp
}
}
//함수는 보통 선언과 내용으로 나뉨
//void[리턴값] Func[이름혹은 식별자] ()[*인자값]
public void Func()
{
}
//함수는 보통 클래스 외부와의 소통을 위해 만듬
//플레이어가 어떠한 사양과 내용을 가졌다.
//플레이어가 아직 만들어진건 아니다.
//설계도이다
함수를 호출할 때 함수 내부에서 사용할 값을 전달하는 매개체이다.
함수를 호출할 때 인자값을 전달하면,
함수 내부에서 인자값을 받아서 처리할 수 있다.
대신 상황에 따라 리턴값을 생각해야 한다!
return이란 함수가 실행 된 후 결과를 반환하는 값이다.
함수를 호출한 곳에서 이 값을 활용할 수 있다.
public int Add(int a, int b)
{
return a + b;
//여기 아래에는 아무 의미가 없다
}
이 함수는 a와 b를 더한 결과를 반환한다.
return아래에 어떤 코드가 몇만줄 있건간에 return시 함수는 종료된다.