백견불여일타 C# 입문 - 객체지향 1)클래스/메소드

Soonyoung Kim·2021년 7월 7일
0

백견불여일타 C#

목록 보기
7/10

Point - #객체지향 #클래스 #캡슐화 #다형성 #상속 #네임스페이스 #메소드

  • 올바른 설계도는 프로그램 완성 후에 유지보수를 쉽게 하고 안정적으로 오류 없이 동작하게 해줍니다. 아파트 건설과 마찬가지로 프로그램 또한 하나의 골격을 이용하여 여러 개의 물체를 조립해 나갑니다.
  • 이러한 골격을 이용하여 같은 성질의 물체를 만들어내는 것을 객체지향 프로그램밍이라고 합니다.

  • 변수로 만드는 데 한계가 있는 것들을 '클래스'란 개념을 가지고 만들어야 한다.
  • '클래스'는 '아파트'와 같다.
    30층으로 구성된 아파트, 똑같은 집구조로 이루어져 있지만 어떤 세대는 벽지가 심플하고 깨끗한 화이트 톤으로 된 방으로 꾸며져 있을 수도 있고, 어떤 세대는 어린 아이들의 취향을 고려하여 '뽀로로'가 그려진 벽지로 구성된 방으로 꾸며져 있을 수도 있습니다.
    '클래스'도 마찬가지이다.
    - 어떤 공통적인 '속성'(아파트의 골격과 같은)이 있지만,
    - 활용에 따라 '특징'은 달라질 수 있다.(아파트 각 세대의 벽지 스타일 같이)

객체지향이란?

  • 객체 : 어느 한 물체에 생명을 불어넣어주는 것
    객체는 '형태 또는 상태'와 '행동'을 가지고 있습니다.
  • '자동차' 프로그램

Private

  • 이것은 건드리지마! 나만 쓸 수 있어!
  • 메소드는 다른 클래스에서 호출이 불가능한 것

Public

  • 마음대로 사용해도 돼! 이것은 공용 물품이야~

캡슐화

  • 데이터의 형태와 데이터의 형태를 다루는 행위를 하나의 세트로 묶어내는 것이다.

  • 장점
    1) 중요한 데이터를 보호할 수 있다는 것
    2) 캡슐화는 데이터 자체를 정의하는 private 변수와, 데이터를 다루는 방법에 대해 서술하는 public한 getter(get으로 시작하는 메소드), setter 메소드(set으로 시작하는 메소드)
    3) 다른 사람들이 데이터를 다룰 때에는 정해진 규칙의 메소드에만 접근이 가능하므로 데이터 악용의 소지가 없어진다.
    setter 메소드에서 'this'의 키워드는 '객체 형태에 주어진 변수'

  • this키워드
    객체의 변수인지, 메소드의 매개변수인지를 구분하는 방법

class Car001
    {
        private string color;

        public void setColor(string color)
        {
            this.color = color; //this키워드를 사용해서 객체의 변수인지, 메소드의 매개변수인지를 구분하는 방법
        }
        
        public string getColor()
        {
            return color;
        }

프로퍼티를 이용한 자동차 클래스 설계

class Ex002{
       public void Run()
              {
                  Car002 car = new Car002();
                  //객체의 프로퍼티에 직접 할당함
                  car.Size = "세단";
                  car.Color = "하얀";
              }
}

 class Car002
    {
        private string size;
        private string color;
		
        //메소드 형태의 괄호가 생략되는 set과 get을 함께 묶어버림
        public string Size
        {
            set { size = value; }
            get { return size; }
        }
        
        public string Color
        {
            set { color = value; }
            get { return color; }
        }
     }
  • 객체에서 '형태'를 나타내는 것을 프로퍼티(property, 속성)
  • '행동'을 나타내는 것을 메소드(method)라고 한다.

좀 더 간략화한 프로퍼티

public string Color { get; set; }
public string Size { get; set; }
  • 클래스는 객체를 만들어내는 설계도 역할이다.
  • 호빵이라는 큰 개념은 '클래스'가 될 수 있다.
  • 단팥, 피자, 만두...호빵은 호빵이라는 큰 개념을 가지고 찍어낸 '객체'이다.

메소드화

'메소드화'한다면 앞으로 다른 개발자가 여러분의 프로그램을 유지 보수할 때 해당 메소드 기반으로 공통으로 기능을 구현할 수 있게 된다. 만약 '메소드화'를 안한 프로그램에서 해당 로직에 오류가 났다면 지금까지 구현했던 로직을 수정하기 위해 여기저기 파일을 열어보면서 수정을 해야 하는 난감한 상황이 발생할 수 있다. 하지만 만약 메소드화했다면 해당 로직에서 오류가 났을 경우 공통 기능을 담당하는 메소드만 수정하면 되기 때문에 더욱 더 관리가 편한 프로그램이 될 것이다.

  • 메소드를 나누는 기준은 "하나의 메소드에는 하나의 기능만을 담당하게 구현한다."
  • 메소드에는 '리턴 타입'이 존재한다. 리턴 타입이란 메소드에서 할 일을 다 한 후에 '값을 넘겨주는 변수 타입'이다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RoadBook.CsharpBasic.Chapter05.Examples
{
    class Ex006
    {
        public void Run()
        {
            int number01 = 10;
            int number02 = 3;

            // dynamic : 데이터가 할당되어도 다른 타입으로 변경이 가능하다.
            dynamic result01 = Sum(number01, number02);
            dynamic result02 = Minus(number01, number02);
            dynamic result03 = Multiple(number01, number02);
            dynamic result04 = Divide(number01, number02);

            Console.WriteLine("{0}과 {1}의 사칙연산 결과 값 : {2}, {3}, {4}, {5}", number01, number02, result01,result02,result03,result04);
        }
        
        // private int 메소드명 : int값이 최종 리턴값이다.
        // void : ~이 하나도 없는 ...리턴해줄 값이 없음

        private int Sum(int number01, int number02)
        {
            return number01 + number02;
        }

        private int Minus(int number01, int number02)
        {
            return number01 - number02;
        }
        private int Multiple(int number01, int number02)
        {
            return number01 * number02;
        }
        private double Divide(int number01, int number02)
        {
            return (double)number01 / number02; //소수점으로 결과가 나올 수 있기 때문에 double형을 리턴 타입으로 지정한다. 
        }
    }
}

Param 매개변수는 1차원 배열 형태 사용 메소드

namespace RoadBook.CsharpBasic.Chapter05.Examples
{
    class Ex007
    {
        public void Run()
        {
            dynamic result = Sum(1, 2, 3, 4, 5);
            Console.WriteLine("1~5까지의 합은 {0}", result);
        }

        private int Sum(params int[] number)
        /*
         * param 매개변수는 1차원 배열 형태, 배열이란 데이터를 하나만 담는 변수의 확장형으로 여러개의 데이터를 한번에 담을 수 있는 기능
         * 1) 1~5 매개변수로 전달
         * 2) number 매개변수는 [1,2,3,4,5] 값을 한번에 담는다.
         * 3) 반복문을 통해서 result값을 계속 갱신
         */
        {
            int result = 0;
            for(int idx = 0; idx < number.Length; idx++)
            {
                result += number[idx];
            }

            return result;
        }
    }
}
profile
Sin prisa, sin pausa.

0개의 댓글