본문 바로가기
우아한테크코스 5기/정리

우아한테크코스 5기 모바일 레벨1 총정리

by 코드 이야기 2023. 4. 8.
728x90

서론 

(이라 쓰고 변명이라 읽는다. 뒤늦게 몰아 쓰는 것에 대한 변명...)

 

하나의 미션에서 처음으로 기법, 개념 등의 존재를 알게 된다.

이것들을 해당 미션이나 다음 미션에 적용시켜보며 궁금한 것을 알아본다. 알아본 것을 적용시킨다.

이런 과정을 반복하며 알게된 것들이다. 그래서 명확하게 각 미션을 통해 얻게된 지식은 아니다. 그래도 나름 정리해 보았다.

 

레벨1 

레벨1 과정을 진행하며 주된 학습 목표라고 느꼈던 것은 코틀린과 객체지향 프로그래밍이다.

  • 학습 (레벨1의 교육 목표라고 생각되는 것)
    • 객체지향 프로그래밍 (OOP, Object-Oriented Programming)
    • 코틀린
  • 객체지향 생활 체조 원칙
    1. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다.
    2. else 예약어를 쓰지 않는다.
    3. 모든 원시값과 문자열을 포장한다.
    4. 한 줄에 점을 하나만 찍는다.
    5. 줄여쓰지 않는다(축약 금지).
    6. 모든 엔티티를 작게 유지한다.
    7. 규칙 7: 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
    8. 일급 콜렉션을 쓴다.
    9. 게터/세터/프로퍼티를 쓰지 않는다.
  •  객체지향 5원칙 (SOLID)
  • SRP (단일책임의 원칙: Single Responsibility Principle)
    • 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임(변화의 축: axis of change)을 수행하는 데 집중되어 있어야 한다
  • OCP (개방폐쇄의 원칙: Open Close Principle)
    • 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다.
  • LSP (리스코브 치환의 원칙: The Liskov Substitution Principle)
    • 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다. 즉, 서브 타입은 언제나 기반 타입과 호환될 수 있어야 한다.
  • ISP (인터페이스 분리의 원칙: Interface Segregation Principle)
    • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
  • DIP (의존성역전의 원칙: Dependency Inversion Principle)
    • 구조적 디자인에서 발생하던 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는 의미의 역전 원칙이다.

 

미션 

자동차 경주

프리코스를 다시 상기시키는 것 같았다.

  • 자동차 경주 깃헙 링크 (레벨1 수료 후 5시간 동안 구현한 코드의 branch)
  • 테스트
    • 테스트 주도 개발 (TDD, Test Driven Development):
      테스트 코드를 먼저 작성 후 작성된 테스트코드에 맞춰 제품 코드를 작성하는 프로그래밍 방법 
    • 단위 테스트 (Unit Test): 테스트 가능한 가장 작은 기능(메서드)을 실행하여 예상대로 동작하는지 확인하는 테스트 
    • 학습 테스트: 새로운 API, 라이브러리, 프레임워크가 어떻게 동작하는지를 검증하기 위한 테스트 (연습용 테스트)
  • 효과적인 이름 짓기
    • 축약형을 사용하지 말 것: 오해의 소지가 생길 수 있다.
    • 외부와 관련짓지 말 것: 
      ex1. 자동차의 전진 여부는 랜덤으로 결정된다. 자동차는 랜덤 값을 받아 값에 따라 전진한다.
      이 때 자동차는 랜덤 값이라는 것을 알 필요 없다. 그저 값 하나가 넘어온다는 것만 알면 된다.
      ex2. 게임의 진행 상태를 DB에 저장한다. 진행 상태를 저장할 때 DB에 저장한다는 것을 알 필요 없다.
      저장한다는 것만 알면 된다.
  • 컨벤션프로퍼티, 초기화 블록, 부 생성자, 함수, 동반 객체 순으로 작성
  • 주 생성자와 부 생성자
    • 주 생성자 (primary constructor): 생성자 파라미터를 지정. 초기화 블록은 프로퍼티 선언에 포함시킬 수 있어 생략 가능.
    • 부 생성자 (secondary constructor): 생성 방법이 여럿 존재하는 경우, 부 생성자를 두어 부 생성자가 주 생성자를 호출하도록 한다.
  • 스마트 캐스트: 프로그래머 대신 컴파일러가 캐스팅을 해 주는 기능
  • require() check()
    • require(): 조건을 만족하지 않으면 IllegalArgumentException 발생
    •  check(): 조건 만족하지 않으면 IllegalStateException 발생
  • 역컴파일(Decompile)
    • kotlin은 자바 코드로 변환되어 컴파일하기 때문에 자바로 변경해 확인해보는 것이 좋을 때가 있다.
    • 인텔리제이에서 다음과 같이 역컴파일할 수 있다. (Menu > Tools > Kotlin > Show Kotlin Bytecode)
  • MVC(Model View Controller)

 

로또

  • 로또 깃헙 링크 (step2... 우웩... 얼른 재구현 해서 기억 미화 해야지...)
  • 원시값 포장
  • 일급 컬렉션: 원시값 포장과 비슷한 개념. 컬렉션 하나만을 포장하였을 때 사용하는 용어.
  • 래스
    • 객체의 팩토리(factory)이며, 객체를 만들고, 추적하고, 적절한 시점에 파괴한다.
    • 클래스가 객체를 생성하는 것을 '인스턴스화한다(instantiate)'라고 표현한다. 
  • 클래스 간의 의존 관계 연결 (코드 재사용의 수단)
    • 상속: 기존 클래스를 확장
    • 조합: 기존 클래스의 인스턴스를 참조
  • 가변 객체와 불변 객체
    • 모든 클래스를 상태를 변경할 수 없는 불변 클래스(immutable class)로 만들면 유지 보수성이 크게 향상된다.
    • 불변 객체를 사용할 시 시간적 결합(temporal coupling)을 없앨 수 있고, 스레드 안정성, 단순성(simplicity) 등의 이점이 있다.
  • 방어적 복사
    • A클래스의 변수를 B클래스의 생성자로 넘겨 인스턴스화하였을 때 A클래스의 변수와 B클래스의 생성자인 변수는 같은 주소를 가진다. 이로 인해 발생할 수 있는 사이드 이펙트가 발생하지 않도록 두 주소를 다르게 관리하는 방법
  • 점진적 리펙터링

 

블랙잭

  • 블랙잭 깃헙 링크 (step2... 우웩... 얼른 재구현 해서 기억 미화 해야지...)
  • 코틀린 DSL (Domain-specific language): 범용 언어(= 코틀린)로 작성된 프로그램의 일부
  • 확장 함수 (Extension functions): 기존 클래스에 새로운 함수를 추가하는 기능
  • 중위 표기 (Infix notation): 두 값 사이에 특정한 표현식을 넣는 것
  • 연산자 오버로딩 (Operator overloading): 기존에 정의된 연산자의 동작을 재정의하는 것
  • 함수형 프로그래밍
  • 상태 패턴

 

오목

  • 객체 지향 패러다임 관점에서 핵심
    • 책임(responsibility): 객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대한 개략적으로 서술한 문장
      ex. 아는 것(차의 위치를 알고 있다, 길의 각 위치가 이동할 수 있는 위치인기 알고 있다), 하는 것(차를 이동한다, 앞의 길이 차가 이동할 수 있는 길인지 확인한다, 차가 움직일 수 있는 상태인지 확인한다) 등
    • 역할(role): 객체가 협력 안에서 수행하는 책임의 집합. 다른 것으로 교체할 수 있는 책임의 집합.
      ex. 차를 이동한다. (1. 차가 움직일 수 있는 상태인지 확인한다. 2. 앞의 길이 차가 이동할 수 있는 길인지 확인한다. 3. 차를 이동한다)
    • 협력(collaboration): 객체간의 상호작용 등
  • 책임 주도 설계

 

글쓰기 (한 달 생활기)

 


그 외 알게된 것

 


부족한 점

  • 스마트 캐스트는 무엇이지? (잘 이해하지 못했다.) (레벨2 3주차쯤 이해했다! 이것도 얼른 추가로 글 써야지...!) 
  • 블랙잭 미션에서 이해하지 못했거나, 의식하고 사용해보지 못한 부분이 많다... 
    DSL, 중위 표기 등 ...

 

 

 

 

728x90

댓글