Post

KDT Unity 2주차~4주차 - 객체지향 프로그램이란

23-11-28 TIL

알고리즘 문제

오늘의 알고리즘 문제 : 수박수박수박수박수박수?

길이가 n이고, “수박수박수박수….”와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 “수박수박”을 리턴하고 3이라면 “수박수”를 리턴하면 됩니다.

1
2
3
4
5
6
public class Solution {
    public string solution(int n) {
        string answer = "";
        return answer;
    }
}

Desktop View

해결

1
2
3
4
5
6
7
8
9
10
11
public class Solution {
    public string solution(int n) {
        string answer = "";
        for(int i = 0 ; i < n/2; i++)
        {
            answer += "수박";
        }
        if(n %2==1) answer += "수";
        return answer;
    }
}

오늘은 매우 간단한 문제였습니다.

for(int i = 0 ; i < n/2; i++){answer += "수박";}해당 for문을 이용하여 2글자인 수박을 문자열에 더해줍니다.

또한 홀수일때 수를 더해야하므로 if(n %2==1) answer += "수";을 사용하여 나머지 연산을 해 홀수인지 판별후 를더해줍니다!

Desktop View

객체지향 프로그래밍이란?

오늘을 객체지향을 다시 한번 정리해보려고 합니다.

이번에 정리하는 내용은 제가 알고있는 내용과 모르는 내용을 나누어 정리하려고합니다.

알고 있던 내용들

  1. 객체지향이 나오기 전 프로그래밍

    객체지향이란 프로그래밍이 나오기 전에는 절차지향이라는 프로그래밍을 사용하였습니다.

  2. 객체는 다른 객체를 상속합니다.

    각 객체를 다른 객체를 상속받아 사용할 수 있습니다.
    상속 받은 객체는 상속해준 객체를 사용할 수 있습니다.
    확장성을 이 주된 목적입니다.

  3. 다양성이란

    다양성이란 상속받은 같은 클래스를 상속받았어도 객체에따라 다른 기능을 하겠끔 바꾸는것을 말합니다.

  4. 추상화란

    추상화란 어떠한 객체가 가져야할 핵심적인 특징들을 가지는 모델을 말합니다.
    즉 객체를 만들 때 해당 객체가 가져야할 것들을 명시해줍니다.

  5. 캡슐화란

    캡슐화란 하나의 데이터 집합입니다. 하지만 데이터의 접근을 쉽게하지 못하게 해줍니다.

모르고 있던 내용들

  1. 객체지향프로그래밍 언어란

    언어자체가 객체지향프로그래밍을 나타내는 것이 아닙니다.

    객체 지향 프로그래밍 언어란 객체지향 프로그래밍의 성격을 가진 기능들을 제공하는 것이지 언어 자체가 객체지향은 아닙니다.

  2. 객체지향 프로그래밍의 창시자

    언어는 알고 있을 망정 누구에 의해 어떻게 탄생했는지는 모르고 있었습니다. 실제 객체지향 프록그래밍언어의 시조는 시뮬라67입니다.
    하지만 실질적 원조는 엘런 케이스몰토크입니다.
    시뮬라67에서 고안했지만 실제는 가장 순수한 객체지향 프로그래밍입니다.

  3. S, O, L, I, D 원칙

    SRP(Single Responsibility Principle): 단일 책임 원칙

    • 클래스(객체)는 단 하나의 기능만 담당해야합니다.

    OCP(Open Closed Priciple): 개방 폐쇄 원칙

    • 확장에 열려있어야 하며, 수정에는 닫혀있어야 합니다.

    LSP(Listov Substitution Priciple): 리스코프 치환 원칙

    • 업캐스팅된 상태에서 부모의 메서드를 사용해도 동작이 의도대로 흘러가야 하는 것을 의미합니다.

    ISP(Interface Segregation Principle): 인터페이스 분리 원칙

    • 인터페이스를 각각 사용에 맞게 끔 잘게 분리해야하며 인터페이스의 단일 책임을 강조합니다.

    DIP(Dependency Inversion Principle): 의존 역전 원칙

    • 대상의 상위 요소(추상 클래스 or 인터페이스)로 참조하라는 원칙입니다.

알고는 있었지만 정확하게 알지는 못하는 내용들

  1. 절차지향이란

    • 내가 알던 내용

      객체지향이 하나의 객체 즉 하나의 코드조각들을 여러 개 만들어 사용한다고 한다면 절차지향이란 하나의 코드만을 작성해 작성 순서에 따라 실행되는 프로그래밍입니다.

    • 새롭게 알게된 내용

      절차지향에도 함수는 존재합니다. 하지만 해당 함수를 사용하기위해서는 포인터로 이어주어야 합니다.

      그래서 해당 함수를 연결하는것에 많이 어려움이 있었고 그로인해 큰 프로그래밍은 하지 못했습니다.

  2. 객체란

    • 내가 알던 내용

      각 객체는 데이터와 함수의 집합입니다.

    • 새롭게 알게된 내용

      객체와 객체는 서로에게 의존합니다

객체지향의 특징

  1. 집합, 의존

  2. 추상화, 상속, 다양성, 캡슐화

오늘의 정리

객체지향프로그래밍이란 다양한 의견이 있다.

하지만 정확한 정답이라는 것은 존재하지 않는 것 같다는 느낌이 들었다.

결국은 객체지향이란 해당 프로그래밍이 원하는 방향을 가지고 내가 직접 해당 프로그래밍에대한 철학을 얻는 것이라고 생각한다.

또한 다시한번 객체지향을 정리하면서 그동안 내가 너무 나를 과신했다는 생각이 들었다.

코드도 지금보다는 훨씬 더 많이 짜봐야겠다는 생각이 들었으며 S, O, L, I, D 원칙은 그 무엇보다 확실히 알아가야한다고 생각한다. 그래서 C#뿐 아니라 여러가지 객체지향을 접해볼 예정이다.

조금더 나를 다듬고 나만의 객체지향의 정의를 다듬어 가려고 한다.

Desktop View

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