[C#] 1. 객체지향의 시작 클래스(class) [OOP, new 연산자, 인스턴스]

반응형
반응형

#1 객체지향의 시작 클래스(class)

 

[학습 목표]

  • 객체 지향 프로그래밍에 대한 이해.
  • 클래스(class) 문법을 이용한 "객체의 틀"을 제작하는 방법에 대한 숙지
  • new 연산자를 이용해 객체를 생성하는 방법에 대한 숙지
  • 인스턴스화, 인스턴스의 용어의 의미에 대한 이해

[목차]

  1. 객체 지향 프로그래밍(OOP)
  2. 클래스(Class)
  3. new 연산자
  4. 인스턴스화 & 인스턴스

* 개인적인 공부 기록용으로 작성한 글이기에, 잘못 된 내용이 있을 수 있습니다.


#1 객체 지향 프로그래밍(OOP)

컴퓨터 프로그래밍을 하기 위해 사용하는 언어는 절차 지향 언어와, 객체 지향 언어로 구분됩니다.

초기에는 대부분 절차 지향 방식으로 프로그램들을 구성했으나, 프로그램이 커지면서, 더 이상 절차지향 방식으로 프로그래밍을 하는 것이 힘들어 졌습니다. 이에 대한 해결책으로 객체 지향 프로그래밍이 등장했습니다.

객체 지향 프로그래밍이란, 현실세계의 상호작용을 프로그래밍으로 그대로 구현한 것인데, 말로만 들으면 이해가 가지 않을 수 있으니 예시를 통해 알아 보도록 하겠습니다.

객체는 기본적으로 속성과 기능을 지니고 있습니다.

예를 들어 RPG게임을 플레이하는 한 플레이어가 있다고 가정해 볼 때 속성으로는, hp, atk(공격력) .. 등이 있을 수 있고 기능으로는 attack(공격), move(이동) 등이 있을 수 있습니다. 이 것을 모델로 하여 직접 객체를 제작해 보도록 합시다.


#2 클래스(Class)

클래스란, "객체의 틀"을 만드는 문법입니다. class 뒤에 클래스의 이름을 명시하고, 괄호({ }) 안에 객체 틀의 정보를 입력합니다.

class Player
    {

    }

"객체의 틀"을 이용해서 "객체"를 찍어 낼 수 있습니다. 흔히 붕어빵 틀과 붕어빵을 예시로 들고는 합니다.

제작한 객체의 틀(붕어빵 틀)을 사용해 객체(붕어빵)을 원하는 만큼 찍어내는 것이지요.

이제, 객체의 틀 안에 속성을 정의해 보도록 합시다.

class Player
    {
        public int hp;
        public int atk;
    }

앞에서 말한 모델과 동일하게 제작하도록 하겠습니다. hp,atk(공격력) 변수를 정의합니다. 앞의 public은 접근 지정자 라는 것인데 public 없이 int자료형만 선언하면, Player 클래스 안에서만 사용하겠다는 의미가 됩니다. 접근 지정자에 대해서는 추 후에 자세하게 정리할 예정이니 이정도만 알고 넘어가셔도 됩니다. 다음으로 기능(함수)들을 정의해 보도록 하겠습니다.

class Player
    {
        public int hp;
        public int atk;
         
        public void attack()
        {
            Console.WriteLine("Player Attack!");
        }
        public void Move()
        {
            Console.WriteLine("Player Move!");
        }
    }

Player 객체 틀이 완성됐습니다. 이제 제작한 Player 객체 틀을 이용해 객체를 생성해 보도록 합시다.


#3 new 연산자

new 연산자는 프로그래머가 직접 제작한 객체의 틀을 이용해서 객체를 찍어내는 역할을 하는 연산자입니다.

사용 방식은 다음과 같습니다.

클래스이름 객체이름 = new 클래스이름();

앞서 예시로 든 Player 객체 틀을 이용해 player 객체를 생성한다고 하면 다음과 같이 선언하면 됩니다.

Player player = new Player();

이제 객체를 생성했으니, 객체를 사용해 보도록 합시다. 객체의 속성과 기능들은 (.)을 통해서 접근이 가능합니다.

player.hp = 100;
player.atk = 10;

player.Move();
player.attack();

이렇게, 객체의 속성들을 (.)을 이용해서 값을 넣어줄 수도 있고, 기능들을 (.)을 이용해서 사용할 수도 있습니다.

작성한 소스코드를 실행해 보도록 하겠습니다.

 

[전체 코드]

using System;

namespace TextRpg
{
    class Player
    {
        public int hp;
        public int atk;
         
        public void attack()
        {
            Console.WriteLine("Player Attack!");
        }
        public void Move()
        {
            Console.WriteLine("Player Move!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Player player = new Player();
            player.hp = 100;
            player.atk = 10;

            player.Move();
            player.attack();
        }
    }
}
[실행결과]
Player Move!
Player Attack!

#4 인스턴스화 & 인스턴스

인스턴스화 : 클래스로 부터 객체를 찍어내는 과정을 의미하는 용어

인스턴스 : 특정 클래스로 부터 찍어낸 객체를 해당하는 클래스의 인스턴스라고 부른다.

 

예를들어 Player mage = new Player(); 와 같은 소스 코드가 있다고 가정해 보겠습니다.

이 때 mage 객체를 찍어내는 과정"인스턴스화" 라고 부르며, mage 객체를 Player 클래스의 "인스턴스" 라고 부릅니다.

 

그런데 왜 굳이 객체라는 말을 두고 인스턴스라는 새로운 용어를 사용하는 것 일까요?

그 이유는 특정한 객체 (mage) 가 특정 클래스 (Player)의 객체라는 것을 강조하는 구체적인 의미를 갖도록 하기 위함입니다.

객체 mage 라고 부르는 것 보다, Player 의 mage 인스턴스 라고 부르는 것이 객체의 관계를 표현 하는 데 직관적이기 때문이죠.


* 2021.07.22 인스턴스화 & 인스턴스 관련 내용 추가

반응형

댓글

Designed by JB FACTORY