[실습으로 다지는 C#] 캡슐화 실습 – 학생 클래스 정의하기

 

 이번 강의에서는 캡슐화 실습을 해 봅시다. 

 캡슐화는 여러 개의 멤버를 하나의 형식으로 묶는 과정을 말합니다. 이번 실습에서는 학생 클래스를 정의하는 실습을 해 보기로 할게요.

 실습할 학생 클래스의 멤버는 다음과 같아요.

학생 클래스
    멤버 필드
        아이큐
        매력
        번호 - 읽기 전용, 순차 부여
        이름
        가장 최근에 부여한 번호 - 정적 멤버
    멤버 메서드
        생성자(이름)
        공부하다(횟수)
        춤추다(횟수)
        노래하다(횟수)
        ToString 재정의
    멤버 속성
        get은 public, set private

OOP 프로그래밍에서는 구현할 프로그램을 UML 다이어그램을 이용하여 요구 분석 및 아키텍쳐링, 설계를 한 후에 구체적으로 구현하고 테스트를 하곤 하죠. 특히 형식을 정의할 때 이를 클래스 다이어그램으로 표시하고 형식과 형식 사이의 관계를 도식하곤 합니다.

여기서 실습할 학생 클래스를 클래스 다이어그램으로 표현하면 다음처럼 표현할 수 있어요.

 

학생 클래스 다이어그램
학생 클래스 다이어그램

사각형을 삼등분하였을 때 첫 번째 칸은 클래스 이름, 두 번째 칸은 멤버 필드, 세 번째 칸은 멤버 메서드입니다.

그리고 멤버 앞에 + 표시는 public 접근 지정을 의미하고 -는 private 접근 지정을 의미합니다. 참고로 protected 접근 지정은 #으로 표시합니다.

lastnum과 get_LastNum처럼 밑줄 친 멤버는 정적 멤버를 의미합니다.

특수한 의미를 나타내기 위해 <<스테레오 타입>> 을 사용할 수도 있습니다.

이제 시나리오에 맞게 코드를 작성해 보세요. 메서드 내에서 구체적으로 수행할 작업은 여러분들이 추가적으로 시나리오를 작성하여 구현해 보세요. 그리고 난 후에 비교해 보시기 바랍니다.

using System;

namespace 캡슐화_실습___학생_클래스_정의하기
{
    class Student//학생 클래스
    {
        #region 멤버 필드
        int iq;//    아이큐
        int cp;//    매력
        readonly int num;//    번호
        string name;//    이름
        static int lastnum;//    가장 최근에 부여한 번호
        #endregion
        #region        //멤버 메서드
        public Student(string name)//    생성자
        {
            this.name = name;
            lastnum++;
            num = lastnum;
        }
        //    공부하다
        public void Study(int tcnt)
        {
            Console.WriteLine("{0}번 {1}학생 {2}횟수 공부하다.", num, name, tcnt);
            iq += tcnt;
        }
        //    춤추다
        public void Dance(int tcnt)
        {
            Console.WriteLine("{0}번 {1}학생 {2}횟수 춤추다.", num, name, tcnt);
            cp += tcnt;
        }
        //    노래하다
        public void Sing(int tcnt)
        {
            Console.WriteLine("{0}번 {1}학생 {2}횟수 노래하다.", num, name, tcnt);
            iq += tcnt / 2;
            cp += tcnt / 2;
        }
        //    ToString 재정의
        public override string ToString()
        {
            return string.Format("번호:{0} 이름:{1}", num, name);
        }
        #endregion
        #region//멤버 속성
        //    get은 public, set private
        public int IQ
        {
            get
            {
                return iq;
            }
            private set
            {                
                iq = value;
            }
        }
        public int CP
        {
            get
            {
                return cp;
            }
            private set
            {
                cp = value;
            }
        }
        public int Num
        {
            get
            {
                return num;
            }
        }
        public string Name
        {
            get
            {
                return name;
            }
            private set
            {
                name = value;
            }
        }
        public static int LastNum
        {
            get
            {
                return lastnum;
            }
        }
        
        #endregion
    }
}
//https://ehpub.co.kr
//실습으로 다지는 C#
//9. 캡슐화 실습 - 학생 클래스 정의하기
using System;


namespace 캡슐화_실습___학생_클래스_정의하기
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu1 = new Student("홍길동");
            Student stu2 = new Student("강감찬");
            Console.WriteLine(stu1);
            Console.WriteLine(stu2);

            stu1.Study(3);
            Console.WriteLine("번호:{0} 이름:{1} 아이큐:{2} 매력:{3}", stu1.Num, stu1.Name, stu1.IQ, stu1.CP);
            stu1.Dance(4);
            Console.WriteLine("번호:{0} 이름:{1} 아이큐:{2} 매력:{3}", stu1.Num, stu1.Name, stu1.IQ, stu1.CP);
            stu1.Sing(6);
            Console.WriteLine("번호:{0} 이름:{1} 아이큐:{2} 매력:{3}", stu1.Num, stu1.Name, stu1.IQ, stu1.CP);

            Console.WriteLine("가장 최근에 부여한 학생 번호:{0}", Student.LastNum);
        }
    }
}

실행 결과는 다음과 같습니다.

번호:1 이름:홍길동
번호:2 이름:강감찬
1번 홍길동학생 3횟수 공부하다.
번호:1 이름:홍길동 아이큐:3 매력:0
1번 홍길동학생 4횟수 춤추다.
번호:1 이름:홍길동 아이큐:3 매력:4
1번 홍길동학생 6횟수 노래하다.
번호:1 이름:홍길동 아이큐:6 매력:7
가장 최근에 부여한 학생 번호:2