객체 지향 프로그래밍이라는 의미이며 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
내부 필드 앞부분에 입력하여 외부에서 필드의 데이터를 초기화할 수 있게 되었다.
에러의 원인을 분석하고 수정하는 과정에서 성취감과 즐거움을 느낀다.
계속해서 모르는 개념과 단어들이 추가되고 있다. 복기를 통해 빠르게 익숙해지는 것이 관건인 듯싶다.