객체 지향 프로그래밍이라는 의미이며 C#이 이에 해당하는 언어이다.
객체란 눈에 보이는 모든 것이 해당할 수 있으며 심지어는 생각, 날씨 등도 객체가 될 수 있다. 쉽게 이해하거나 정의내리긴 어렵지만 간략하게 객체들은 각각 상태(state)와 행동(behavior)을 지니고 있다. 자동차를 예로 들자면 자동차의 색, 속도 등이 상태가 될 수 있고, 속도를 올리거나 브레이크를 밟거나 하는 등의 동작은 행동이 될 수 있다.
C# 프로그래밍에선 상태는 데이터(변수)로, 행동은 메소드(함수)로 표현할 수 있다. 즉 객체는 데이터와 메소드로 이루어져있다는 말과 같다. 예를 들어 붕어빵이라는 객체를 만들기 위해서는 붕어빵 틀이 필요하고, 그 틀을 클래스라고 표현할 수 있다. 클래스라는 틀이 있으면 붕어빵이라는 객체를 계속해서 만들어낼 수 있다는 말이다.
데이터의 개수가 많아진다면 일일이 코드를 입력하기 어려워진다. 공통된 부분들을 추려서 '추상화'하여 class를 생성하면 코드가 불필요하게 길어지지 않고 수정도 용이해진다.
[접근 제한자] class test <- class의 이름
{
// 필드, 메소드(함수) 등
}
string userName1 = "Chad";
string job1 = "전사";
int level1 = 50;
string userName2 = "MelonG";
string job2 = "마법사";
int level2 = 23;
string userName3 = "Dtail";
string job3 = "도적";
int level3 = 100;
위의 캐릭터 개수는 세개지만 만약 백개가 넘어간다면 일일이 코드를 입력하기엔 무리다.
class Character
{
string userName; // 캐릭터의 이름을 나타내는 필드
string job; // 캐릭터의 직업을 나타내는 필드
string level; // 캐릭터의 레벨을 나타내는 필드
public void IntroduceCharacter() // 메소드(함수)를 만들어서 실행
{
Console.WriteLine("제 이름은 " + userName + " 입니다 ");
}
}
class`로 틀은 만들었으나 '객체'가 없어서 실행되지 않는다.
Character myCharacter = new Character(); // Character class로 myCharacter 객체를 생성함
myCharacter.userName = "chad"; // class 내부의 필드 데이터들을 초기화 시킴
myCharacter.job = "전사"; 객체.필드 = 데이터
myCharacter.level = 20;
myCharacter.IntroduceCharacter(); // class 내부의 메소드를 호출함
class Character
{
string userName;
string job;
string level;
public void IntroduceCharacter()
{
Console.WriteLine("제 이름은 " + userName + " 입니다 ");
}
}
위의 코드는 예문이었으나 에러가 발생했다. 아래는 검색을 통해 원인을 분석한 뒤 수정한 코드이다.
Character myCharacter = new Character();
myCharacter.userName = "chad";
myCharacter.job = "전사";
myCharacter.level = 20;
myCharacter.IntroduceCharacter();
class Character
{
public string userName; // public으로 접근 제한자를 지정하여 해결함
public string job;
public int level; // 데이터 형식이 정수인데 string이었던 것을 수정함
public void IntroduceCharacter()
{
Console.WriteLine("제 이름은 " + userName + " 입니다.");
}
}
// 출력: 제 이름은 chad 입니다.
접근 제한자를 지정하지 않으면 기본 보호 수준(접근 수준)이 private제한자이다. 이것은 class내부에서만 접근이 가능하다. 모든 곳에서 접근이 가능한 public 제한자를 class내부 필드 앞부분에 입력하여 외부에서 필드의 데이터를 초기화할 수 있게 되었다.
에러의 원인을 분석하고 수정하는 과정에서 성취감과 즐거움을 느낀다.
계속해서 모르는 개념과 단어들이 추가되고 있다. 복기를 통해 빠르게 익숙해지는 것이 관건인 듯싶다.