C#

    [C# / 객체지향] 델리게이트 (Delegate)

    [C# / 객체지향] 델리게이트 (Delegate)

    객체지향 - 델리게이트 (Delegate) 델리게이트는 직역하면 대리자이다. 정확히는 함수를 대리하므로 함수 대리자이다. int, short 같은 타입은 정수를 가질 수 있지만, 델리게이트 타입은 함수를 가질 수 있다. 위와 같은 함수를 가지는 델리게이트 타입을 만들어보자. 델리게이트 타입을 만들 때는 대리할 함수의 반환값과 매개변수를 일치하게 해야한다. Say 함수의 반환 타입이 void이고 매개변수 타입이 string이므로 아래와 같이 선언해주자. delegate void MyDelegate(string txt); 이렇게 하면 MyDelegate 라는 타입이 만들어진다. 이 타입은 반환 형식이 void이고 string 타입을 매개변수로 받는 함수를 대리할 수 있다. 이제 이 타입에 say 함수를 넣어..

    [C# / 객체지향] 9. 추상 클래스 (Abstract Class)

    [C# / 객체지향] 9. 추상 클래스 (Abstract Class)

    객체지향 - 추상 클래스 (Abstract Class) 동물원 게임을 만들고 싶다고 하자. 동물원에는 포유류, 파충류, 어류 등 다양한 종류의 생명체들이 살고 있다. 이 생명체들을 구현하려면 단순히 포유류, 파충류, 어류 클래스를 각각 만들어버릴 수도 있다. 하지만 추상 클래스를 이용하면 더 명확하게 구현이 가능하다. 추상 클래스는 추상 메서드를 갖는 클래스다. 다만 반드시 추상 메서드를 가질 필요는 없다. (그러나 추상 메서드가 없는 클래스를 굳이 추상 클래스로 만들 필요가 있을까? 게다가 추상 메서드는 추상 클래스만 가질 수 있다.) 추상 클래스를 통해 생명체의 움직임을 구현해보자. 포유류는 걷고, 파충류는 기어다니고, 어류는 헤엄친다고 치자. 세 종류는 모두 생명체이다. 따라서 Life 클래스를 부..

    [C#] 은행 게임 코드 (수정본)

    Bank Class ( 환전 메서드 오버로드됨 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 12..

    [C# / 게임] 은행 게임 만들어보기 (객체지향 정리)

    [C# / 게임] 은행 게임 만들어보기 (객체지향 정리)

    은행 게임 만들어보기 간단한 은행 게임을 만들어 보려고 한다. 어떤 식으로 만들지는 전혀 정하지 않았다. 일단은 생각나는 대로 만들어 볼건데. 우선 Money 클래스를 정의하자. 간단한 생성자와 프로퍼티를 가진 Money 클래스이다. 이 클래스의 자식 클래스로 Gold, Silver, Bronze 를 정의한다. 이로써 돈의 단위 세가지를 만들었다. 이 단위들을 환전해주는 시스템을 구현해보자. 환전은 은행에서 이루어진다. 따라서 이번엔 은행 클래스를 만들어보자. 은행은 하나만 있으면 된다. 현실에서는 은행이 여러개이긴 하지만.. 은행이 여러개인 게임은 그리 흔하지 않다. 게임에서의 은행은 영리적 목적으로 운영되는게 아니라, 유저의 편의를 위해 운영되는 시스템이기 때문이다. 롤이나 메이플의 은행을 생각해보면..

    [C# / 객체지향] 8. 다형성 - 오버로드 (Method Overload)

    객체지향 : 다형성 - 오버로드 (Method Overload) 1. 메서드 오버로드 더하기를 하는 메서드를 구현해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { Console.WriteLine(Calculate.Plus(3, 5)); } } class Calculate { static public int Plus(int a, int b) { return a + b; } } } http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f..

    [C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override)

    [C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override)

    객체지향 : 다형성 - 메서드 오버라이드 (Method Override) 앞서 객체지향의 4대 특성 중 추상화, 캡슐화, 상속은 다루어 보았다. 이번에는 마지막으로 다형성에 대해 알아볼 것이다. 아래 예제를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 using System; namespace example4 { class Program { static void Main(string[] args) { Life life = new Life(); Human human = new Human(); Fish fish = new Fish(); l..

    [C# / 객체지향] 7.  클래스 상속 (class inheritance)

    [C# / 객체지향] 7. 클래스 상속 (class inheritance)

    객체지향 - 클래스 상속 (class inheritance) 사람, 물고기, 새. 이 세가지 대상들을 구현하고 싶을 때 상속을 사용하지 않는다면 이렇게 구현할 수 있을 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Human { void Eat() { } void Move() { } void Think() { } class Fish { void Eat() { } void Move() { } } class Bird { void Eat() { } void Move() { } } 그런데 겹치는 부분이 보인다. 중복되는 코드는 적을수록 좋다. 따라서 상속을 사용해 중복되는 코드를 없애보자. 상속이 무엇인지 잘 모르겠다면 재산 상속을 떠올려 보자. 다만 ..

    [C# / 객체지향] 6. 캡슐화와 정보 은닉

    [C# / 객체지향] 6. 캡슐화와 정보 은닉

    객체지향 - 캡슐화와 정보 은닉 캡슐화는 올바른 추상화와 정보 은닉을 통해 이루어진다. 추상화는 저번 포스팅에서 다뤄보았다 : 2019/12/12 - [프로그래밍/c#] - [C# / 객체지향] 2. 추상화는 무엇일까 [C# / 객체지향] 2. 추상화는 무엇일까 객체지향 - 추상화는 무엇일까 추상화는 클래스라는 기능을 통해 구현된다. 내가 프로그램 상에서 자동차라는 객체를 만들어보고 싶다면 어떻게 해야 할까? class Car { } 이렇게 클래스를 하나 만들면 된다. 이때.. lwamuhaji.tistory.com 간단히 말해 캡슐 안에는 관련된 정보가 들어 있어야 한다는 뜻이다. (감기약 캡슐 안에 소화제가 들어 있다면 쓰기가 매우 어려울 것이다.) 추상화가 잘 되고 나면, 남은 것은 정보 은닉인데 ..

    [C# / 객체지향] 5. 네임스페이스(namespace)

    객체지향 - 네임스페이스(namespace) 네임스페이스는 클래스에 비해 그 개념이 간단하다. 말 그대로 이름공간인데, 클래스들의 이름이 서로 충돌하는 것을 막기 위한 장치라고 보면 된다. 예를 들어 오토바이와 자동차를 생각해보자. 두 타입 모두 핸들을 가지고 있다. 이 경우 네임스페이스를 사용해 핸들 클래스를 구분할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 namespace Motorcycle { class Handle { } } namespace Car { class Handle { } } 물론 네임스페이스까지 같을 경우 충돌이 일어난다.

    [C# / 객체지향] 4. 정적(Static) 멤버

    객체지향 - 정적(Static) 멤버 정적 멤버를 설명하기 위해서는 먼저 인스턴스 멤버를 이해해야 한다. new 연산자를 통해 어떤 타입의 객체를 생성하면 그 객체는 인스턴스가 된다. 저번 포스팅에서의 예제를 가져와보자. Car mycar = new Car("가솔린", "방탄 유리"); 여기서 mycar는 new 연산자를 거쳤으므로 인스턴스가 된다. 인스턴스 멤버는, Car 클래스 내부에서 정의된 메서드와 필드를 가리킨다. 즉, 인스턴스 멤버는 인스턴스 필드와 인스턴스 메서드로 구성된다. 인스턴스 멤버가 new 연산자를 거쳐 메모리에 할당된 것들이라면, 정적 멤버는 new 연산자를 거치지 않을 것이다. 즉 new 연산자를 거치지 않고도 이미 메모리에 상주해 있는 멤버들을 가리켜 정적 멤버라고 하는 것이다..

    [C# / 객체지향] 3. 추상화와 클래스(Class)

    객체지향 - 추상화와 클래스(Class) 추상화는 클래스를 통해 실현된다고 했다. 그렇다면 클래스는 무엇일까 클래스는 추상화된 현실의 객체/개념을 잘 따라야 한다. 우선 클래스는 필드와 메서드로 이루어져 있다. 또한 클래스는 타입을 만드는데, 그래서 이렇게 설명할 수 있다. 필드는 어떤 타입의 속성이고, 메서드는 어떤 타입의 행동이다. class Car { } 클래스를 통해 Car 라는 타입을 만들었다. 자동차가 어떤 속성들을 가지고 있는지 생각해보자. (추상화해보자) 엔진, 문, 바퀴, 창문, 의자, 핸들, 브레이크, 엑셀,,, 등 매우 많다. 여기서는 엔진과 창문만 구현해보자. 일단 엔진과 창문 필드를 추가한다. class Car { string engine; string window; } 엔진과 창..

    [C# / 객체지향] 2. 추상화는 무엇일까

    객체지향 - 추상화는 무엇일까 추상화는 클래스라는 기능을 통해 구현된다. 내가 프로그램 상에서 자동차라는 객체를 만들어보고 싶다면 어떻게 해야 할까? class Car { } 이렇게 클래스를 하나 만들면 된다. 이때 자동차는 Car 라는 클래스로 추상화 되었다. 추상화의 힘으로, Car.move() 라는 명령어를 우리가 듣는 순간 우리는 자동차가 움직이는 것을 상상하게 된다. 추상화는 일관성이 있어야 한다. 또 현실을 추상화한 것이기 때문에 현실에서도 없는 것을 구현하기는 어렵다. 가령 Car.eat() 이라는 명령어는 듣는다고 해도 이해가 잘 가지 않을 것이다.

    [C#] FQDN 을 알아보자.

    [C#] FQDN 을 알아보자.

    FQDN 을 알아보자. FQDN 은 Fully Qualified Domain Name 의 약자이다. 그냥 전체 이름이라고 알고 있으면 된다. 분야마다 FQDN이 의미하는 바가 다르지만, 적어도 c#에서는 네임스페이스와 클래스를 포함한 이름을 말한다. 예를 들어 Book 클래스로부터 정의된 인스턴스 book이 있다고 가정하자. 그리고 Book 클래스는 네임스페이스 Stuff 에 속한다고 하면, 인스턴스 book의 FQDN은 Stuff.Book 이 된다. 예제를 통해 확인해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 using System; using Stuff; namespace example { class Program { static vo..

    [C#] ToString() 메서드의 기능

    [C#] ToString() 메서드의 기능

    ToString() 메서드의 기능 보통 ToString() 메서드는 숫자 값을 문자열 값으로 변환할 때 사용한다. 그러나 그런 기능만 있는 것은 아니다. 다음 예제를 통해 ToString() 이 어떻게 쓰이는지 살펴보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 using System; namespace example { class Program { static void Main(string[] args) { Program program = new Program(); Console.WriteLine(program.ToString()); } } } http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decorati..

    [C# / 객체지향] 1. 객체지향 살펴보기

    객체지향 살펴보기 객체 지향이 가지고 있는 대표적인 특성들과 반드시 지켜야 하는 원칙들이 있다. 1. 추상화 2. 캡슐화 (정보 은닉) 3. 상속 4. 다형성 1. 단일 책임 원칙 (Single Responsibility Principle) 2. 개방 폐쇠 원칙 (Open-Closed Principle) 3. 리스코프 치환 원칙 (Liskov Substitution Principle) 4. 인터페이스 분리 원칙 (Interface Segregation Principle) 5. 의존성 역전 원칙 (Dependency Inversion Principle) 이제부터 하나하나 알아가보자.