Post

KDT Unity 2주차~4주차 - 개인학습1

해당 내용의 전부는 학원에서 배우는 것이기 때문에 공개가 어렵습니다.

해당 내용의 자세한 강의가 필요하신 분들은 이곳에서 확인하시면 됩니다.

2023-11-06 TIL

프로젝트가 끝나고 새로운 주차에 왔습니다. 이번주차에서는 C# 문법을 다시 복습하고 사용하여 텍스트 게임을 만들 예정입니다.

C#을 다시 하는 과정에서 어려웠던 부분을 다시 한번 복습할 예정입니다.

특히나 상속과 다형성은 자바언어를 사용할 때도 많이 헷갈렸던 내용입니다. 이번에 확실하게 알아갈 수 있도록 하려합니다. Desktop View

알고리즘 문제

오늘의 알고리즘 문제 : 나머지가 1이 되는 수 찾기

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

1
2
3
4
5
6
7
8
using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

Desktop View

해결

제가 사용한 방법은 for문을 사용하는 방법이였습니다.
int answer = n-1; => 나머지 값을 뺀 값입니다.

for(int i=2; i < n/2+1;i++)

  1. int i=2 => i는 2부터 시작합니다. 1로 나눈 값은 무조건 나머지가 0이 나오기 때문입니다.
  2. i < n/2+1 => 결국 약수란 해당 값의 절반을 넘지 못합니다.
  3. i++ => i는 1씩 증가합니다.

if ((n - 1) % i == 0) return i; => i로 나눈 값의 나머지가 0이 나오면 해당 i을 바로 return하고 메서드를 종료합니다.

1
2
3
4
5
6
7
8
9
10
11
12
using System;

public class Solution {
    public int solution(int n) {
        int answer = n-1;
        for(int i=2; i < n/2+1;i++)
        {
             if ((n - 1) % i == 0) return i;
        }
        return answer;
    }
}

Desktop View

상속과 다형성

상속이란 기존의 클래스를 확장하거나 재사용하여 새로운 클래스를 생성하는 것입니다.

하위 클래스는 상위 클래스의 멤버를 상속받아 사용할수 있습니다.
또한 상속하면서 상위 클래스의 기능을 확장하거나 수정하여 새로운 클래스를 정의할 수 있습니다.

  • 장점

    1. 재사용성 : 상속을 통하여 해당 클래스의 코드를 사용하여 반복적인 코드의 작성을 줄일 수 있습니다.
    2. 계층 구조 표현 : 클래스간의 계층 구조를 표현하여 구조를 좀 더 명확하게 표현이 가능합니다.
    3. 유지보수의 용이 : 상속하고 있는 상위 클래스의 코드만 수정하여 상속받고 있는 하위 클래스들의 코드들을 한번에 수정할수 있습니다.
  • 종류

    1. 단일 상속 : 하나의 하위클래스가 하나의 상위 클래스만을 상속받는 것을 말합니다. C#에서는 단일 상속만 지원합니다
    2. 다중 상속 : 하나의 하위 클래스가 여러개의 상위 클래스를 동시에 상속 받는 것을 말합니다
    3. 인터페이스 상속 : 클래스가 인터페이스를 상속받는 것을 말합니다. 다중상속을 지원하며, 클래스는 하나의 클래스와 여러개의 인터페이스를 동시에 상속 받을 수 있습니다.
  • 특징

  1. 상위 클래스의 멤버에 접근 : 하위 클래스는 상속받은 상위의 클래스 멤버에 접근할 수 있습니다. 이를 통해 상위클래스의 기능을 재사용할 수 있습니다.
  2. 재정의 : 하위 클래스는 상위 클래스의 매서드를 재정의 하여 자신에게 맞게 수정, 사용이 가능합니다 이를 다형성이라고 합니다.
  3. 깊이 : 상위클래스도 상속을 받을 수 있습니다. 이로 인해 계층구조를 형성합니다.
    상속이 깊어질수록 관계가 복잡해지므로 적절히 사용해야합니다.
  • 접근 제한자와 상속
    1. 상위 멤버의 접근 제한자는 중요한 역할을 합니다. 상위 멤버의 접근 제한자에 따라 하위 클래스에서 접근할수 있는 멤버가 달라집니다. 이를 사용해 캡슐화와 정보 은닉을 구현합니다.

Desktop View

다형성이란 같은 타입이짐나 다양한 동작을 수행할 수 있는 기능입니다.

  • 가상Virtual 메서드

    1. 가상 메서드는 기본적으로 상위 클래스에서 정의 되고 하위 클래스에서 재정의 할수 있는 메서드입니다.
    2. 가상 메서드는 virtual키워드를 이용하여 선언되고, 하위 클래스에서 필요에 따라 재정의 될수 있습니다.
    3. 이를 이용하여 하위 클래스에서 상위 클래스의 메서드를 변경, 확장이 가능합니다.
  • 추상Abstract 클래스와 메서드

    1. 직접적으로 인스턴스를 생성할 수 없습니다.
    2. 주로 상속을 위한 베이스 클래스입니다.
    3. 추상 클래스는 abstract키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있습니다.
    4. 추상 메서드는 구현부가 없으므로 하위 클래스에서 반드시 구현되어야 합니다.

오버라이딩과 오버로딩

오버라이딩Overriding과 오버로딩Overloading은 객체 지향 프로그래밍에서 다른 개념을 나타내는 두 용어입니다.

  • 오버라이딩Overriding

    1. 상위 클래스에서 이미 정의된 메서드를 하위 클래스에서 재정의하는 것을 의미합니다.
    2. 이는 상속 관계에 있는 클래스 간에 발생하며, 메서드의 이름, 매개변수 및 반환타입이 동일해야 합니다.
    3. 오버라이딩을 통해 하위 클래스는 상위 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현할 수 있습니다.
  • 오버로딩Overloading

  1. 동일한 메서드 이름을 가지고 있지만, 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것을 의미합니다.
  2. 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.

Desktop View

오늘의 정리

자바를 배울 때에도 상속과 다형성 그리고 오버라이딩 오버로딩을 많이 헷갈려했다.

하지만 이번에 다시 공부하면서 내가 헷갈려하는 부분을 알아내었고 잘 정리 할수 있었다.

Desktop View

상속 정리

자바를 배울 때에도 헷갈렸던 부분이였다.
상속이란 무엇인가? 그냥 using 을 사용하면되는거 아닌가? 라는 생각을 했었다. 하지만 상속이란 상위 클래스가 가지고 있는 함수와 멤버를 그대로 사용 할수 있을 뿐더러 상속 관계에서만 사용이 가능하겠끔 할 수 있는 제한자가 있기 때문에 상속이 꼭 필요한 경우가 있다.

Desktop View

다형성 정리

가장 귀찮고 어려웠던 구간이였다.
아마 내가 이해를 안하려 했던 걸수도… 실상은 뜯어보니 쉬웠다. 상위에서 가져온 함수더라도 하위클래서에서 재정의해서 하위클래스만의 함수로서 사용이 가능하다는 것이다. 단 추상메서드의 경우에는 꼭 하위클래스에서 구현해줘야한다.

Desktop View

오버라이딩과 오버로딩

오버로딩은 자바에서 자주 사용했기에 지금까지도 무슨 내용인지 알고있다. 하지만 오버라이딩은 그렇게 많이 사용은 안했기에 자세하게 알고 공부하게 된건 이번이다. 오버로딩과 오버라이딩의 차이라면 매개변수의 차이가 있다. 오버로딩은 받는 매개변수에 따라 동일한 이름의 다른 메서드를 만들수 있다.

하지만 오버라이딩이란 오버로딩과 다르게 하위클래스에서 상위 클래스의 매서드를 이용할 때 같은 매개변수와 같은 이름의 메서드를 하위 매개변수에 맞게 고치는 것이였다.

즉 오버로딩은 같은 이름의 매서드를 매개변수에 따라 나눈것이고 오버라이딩은 상위 클래스의 메서드를 하위 클래스가 본인에게 맞게 재정의 한것이라고 볼수 있다.

Desktop View

This post is licensed under CC BY 4.0 by the author.