[내배캠 Android 4기] TIL 0612

오리너구리·2024년 6월 12일
0

TIL

목록 보기
31/48
post-thumbnail

오늘 계획

  • 코드카타 36번
  • 코틀린 문법 강의 실습 코드 중에 이해 못한 부분 복습
  • 저번주 과제 피드백 온거 확인
  • 개인과제 Lv 1 까지 구현

나머지는 다했는데.. 실습코드 복습이 너무 오래걸려서 개인과제는 Lv 0 까지만 함


코드카타

⏲️ 공부시간 09 : 00 ~ 10 : 30

오늘은 36번을 풀었당 처음 다 풀기 까지는 한 15분? 20분? 이 정도로 그렇게 오래안걸렸는데 풀고나서
다른 사람 풀이 훑어보고
Regex 에 대해 더 검색해보고 하니까 갑자기 10시 30분이 되었었음 ;;

https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-36-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0

아직 Regex 표현식을 외우지못해서 혼자서 못쓰겠음..근데 이걸 어케 외워~


코틀린 문법 강의 실습 코드 복습

⏲️ 공부시간

10 : 30 ~ 13 : 20

13 : 50 ~ 16 : 40

17 : 00 ~ 20 : 00

어제 체크한 내가 아직 잘 모르는 부분

  1. Any 타입을 스스로 설명못하겠음
  2. 예외처리 하는 try catch 문 이렇게 넘기면 나중에 써야할 때 활용 못할 거같음
  3. 늦은 초기화 개념 자체는 알고있는데, 활용을 못할 거같음
  4. companion object 개념 이해 부족한듯 이거 진짜 주석조차 이해못함
  5. getInstance()함수가 왜 있어야되는건지 이유를 모름
  6. 스코프 함수도 이해못함
  7. 쓰레드쪽도 모르겠음

1. Any 타입

공부한 이유

실습 코드 중 어떤 함수에 반환타입을 Any? 로 해놓은 이유를 모르겠어서

공부 방법

구글에 검색함

이해한 내용

모든 타입의 최상위 클래스에 있는 타입으로 모든 타입으로 바뀔 수 있음

실습 코드 처럼 반환 타입을 Any? 로 해두면 null을 포함한 모든 데이터타입을 다 반환 가능하게 할 수 있다.

2. try-catch 문

공부한 이유

try catch 문으로 예외 처리한 코드를 스스로한테 명확하게 설명할 수 없어서

공부 방법 / 이해한 내용

  1. 제공된 강의의 예외 처리에 관련된 강의를 한번 다시 보면서 정리함
  2. 강의를 보면서 해소되지 않았던 의문들을 구글링함 → 튜터님한테 질문하러가기
    1. 예외 종류는 뭐가있지?
      -> 엄청 많음 진짜 개많음

    2. 예외 종류를 다외워야하나?

      → 놉 못외워도된다고함 그냥 일단 Exception으로 해놓고 무슨 종류의 예외인지 확인해보라고함 심지어 코틀린에서 정의하지 않은 예외는 따로 예외클래스만들어서 내가 정의도 가능

      ??근데 예외종류를 어떻게 확인하지?

      → 먼가 저 e 그 로그? 에서 보는거인가???

      ⇒ 해당 함수에 들어가서 어떤 예외들이 발생할 수 있는지 확인해도되고 그냥 Exception으로 모든 예외를 받아도된다.

    3. e:java.lang.NumberFormatException 이런거대신 그냥 e:메롱 뭐가틀렸게 라고 쓰면안되는것?

      -> 위에 찾으면서 보니까 안되나봄

    4. 예외를 던진다? 라는 거의 정확한 의미?

      개발자가 일부러 예외를 발생시키는거?

      → 애초에 일부러 예외상황을 만들어놔서 예외 처리를 강요? 하는거? 잘 이해한게 맞나?

      ⇒ 예외상황일 때 리턴값을 -999이런식으로 해놓고 처리하는거보다 예외를 내가 설정해놓는게 협업이나 유지보수측면에서 좋기 때문에 예외를 던지는것

    5. try -catch 와 관련된건아니지만 왜 코틀린 으로 검색하는데 다 자바랑 비교해서 설명해주는거임?

      → 아니 코틀린이 자바 기반으로 만들고 뭐 호환이 다 되는건 알겠는데 왜 코틀린 검색하는데 자바랑 비교해서 알려주는거임? 더 어려운데?

      ⇒ 코틀린은 자바를 업그레이드 시킨 언어인데 자바가 Database가 더 많이 쌓여있어서 검색하면 java관련 자료가 많이 나올 수밖에없다.. 그렇다고 java 공부를 따로 할필요는 없음

3. 늦은 초기화 활용

공부한 이유

실습 코드를 보는데 늦은 초기화를 활용한 코드에서 부생성자를 사용한 부분에서 뭘 설명해줬었는데 그게 생각이 안났음

공부 방법

해당 강의를 다시 찾아서 봄

이해한 내용

그냥 부생성자 사용할 때

변수를 사용하는 시점을 변수가 초기화 된 다음으로 해야된다는 거였음

4. companion object

공부한 이유

실습 코드 중 Cashshop 에 있는 companion object 가 왜 있어야되는지 무슨 역할을 하는지 이해가 안됐음

companion object {
        @Volatile private var instance: CashShop? = null
        @Volatile private var lottoStatus: String? = null
        @Volatile private var isFinish: Boolean? = null

        fun getInstance(): CashShop {
            // 외부에서 요청왔을때 instance가 null인지 검증
            if(instance == null) {
                synchronized(this) {
                    instance = CashShop()
                }
            }
            return instance!!
        }
    }

궁금했던 것들

  1. companion object 뭐였는지 기억안남
  2. @Volatile 이 뭐하는앤지 모름
  3. getInstance() 는 왜 있는건지 모르겠음
  4. synchronized도 이해안됨

공부 과정

  1. 전에 object 에대해서 이해는 다 못했지만 공부를 한번 한적있어서 정리해놓은 문서 확인

Object(오브젝트)

→ companion object가 뭔지 개념은 알겠는데 왜쓰는지 모름

  1. 강의 다시 확인
  2. 구글링
  3. 튜터님께 질문

싱글톤 패턴은 자주쓴다.

내가 이해한 내용

  1. companion object

    → 클래스가 객체를 만들기위한 틀인 것처럼 오브젝트는 객체 그 자체를 클래스 없이도 생성할 수 있게 해주는 키워드고, 어떤 클래스 내에서 오브젝트를 생성하고 싶을 때 companion object를 사용한다.

    → 어차피 클래스내에 companion object는 하나밖에 못만들고, 다른데에서 호출할 때는 해당 클래스의 이름으로 호출하기때문에 이름을 굳이 안만들어줘도된다? 근데 원하면 이름 붙여줘도 된다. 이름 안만들면 그냥 Companion이라는 이름을 알아서 가짐

    →클래스의 모든 인스턴스가 공유하는 객체를 만들고싶을 때 사용한다.

  2. @Volatile

    → 어노테이션 종류 중 하나로 멀티쓰레딩 환경에서 변수의 값을 항상 메인 메모리에서 읽고 쓰게함으로써 모든 쓰레드가 변수의 최신 상태를 받을 수 있게함.

    • *어노테이션 ‘@’ 기호로 시작하는 코드에 메타데이터를 추가하는 방법 코드의 특정 부분에 추가적인 정보를 제공해서 코드의 의미를 확장하거나 런타임 동작을 제어하는데 사용한다. 주요 용도
      1. 컴파일러 지시자 : 컴파일러에게 특정한 처리를 하도록 지시

        Ex) @Override : 메서드가 슈퍼클래스의 메서드를 오버라이드하는 것임을 컴파일러에 알림

      2. 런타임 처리 : 런타임에 반영되는 동작 정의

      3. 메타데이터 제공 : 코드 요소에 대한 부가 정보 제공

        Ex) @Deprecated : 특정요소가 더이상 사용되지 않음을 나타냄

  3. getInstance()

    → 모르겟음 뭐하는애지??????

  4. synchronized

    synchronized(잠금할 오브젝트){
    한번에 하나의 쓰레드만 사용하게할 코드
    }

    → 괄호안에 지정된 오브젝트에 락을 걸어서 블록 내의 코드를 한번에 하나의 쓰레드만 실행 할 수 있게해줌

    → 뭐하는 앤지는 알겠는데 getInstance()를 이해못해서그런가 이게 저기 왜 들어가는지 모르겠음

튜터님한테 가서 질문하고옴

싱글 톤 패턴 :

오브젝트를 한개만 생성해서 어디서든 접근 가능할 수 있게 만들어주는 것

companion object 로 싱글 톤 패턴을 만들어줌

instance 라는 캐시샵 클래스를 인스턴스로만들어서 넣어둘 변수를 선언하고 null 처리

만약에 누가 처음으로 instance를 생성하면 아직 instance가 아직 null일거니까 instance 변수에 Cashshop()을 넣어주고, 이미 누가 한번 instance를 생성한적이 있는데 다른애가 instance를 만들려고하면, 이미 만들어져있던 instance를 반환해줌

→ 이렇게 하면 인스턴스를 하나만 만들어서 여러군데에서 접근하게 할 수 있다.

@Volatile 여러군데서 접근할때 변수가 잘 업데이트 되게 해주는 역할

synchronized는 혹시 동시에 해당 함수에 접근했을 때 동시에 처리되지 않도록 생성되는 걸 막아주는 역할

튜터님한테 질문하니까 혼자 몇시간 머리싸매던게 한순간에 정리됨 속이 뻥!!!!

ㅎㅎ... 증말 제송한일이지만 튜터님을 많이 괴롭혀야겠다…

5. Scope function

공부한 이유

전에 한번 스코프 함수 공부한 적 있는데 그 때 어려워서 뭔말인지 이해못하고 일단 넘겨놨는데

또 등장하고 자주 쓰이는 것 같아서 이번엔 진짜로 짚고넘어가서 이해하고 넘어갈려고

공부방법

  1. 일단 전에 정리해둔 자료, 강의 자료 다시 읽으면서 합쳐서 정리하고

    내 머리에 입력 안된부분 체크

    • scope 함수는 특정 객체의 컨텍스트 내에서 특정 동작을 실행하기위한 목적만 가진 함수 → 컨텍스트의 정확한 개념이 뭐지? 한번 짚고 넘어가기
    • 람다식을 사용함
    • 객체를 참조하는 방법으로 it 과 this 가 있음 → 근데 이거 많이 써봤는데 정확한 개념이 안서있는거같음
    • run, let, apply, also, with 다섯가지가 있다. → 내가 알기로 다 비슷비슷한데 살짝씩 다른걸로암. it을 쓰는지 this를 쓰는지 / 반환값이 어떤 형태? 인지에 따라 분류 하는듯
  2. 구글링

  • 컨텍스트 : 객체의 속성과 메서드에 접근할 수 있는 환경
  • it , this 차이 → lamda Receiver → this / lamda Argument → it 인데 이 두개 차이가 뭔지를 모르겠음 → it을 사용하는게 객체 외부에서 접근한다는 인상을 더 강하게 준다 ? (근데 이게 실질적으로 무슨 소용임???) → 일단은 그냥 it과 this가 사용되는 용도가? 각각 있어서 그런거라고만 알고 넘어가기!
  • apply , also 는 그 앞에 붙은 객체자체를 변화하게 해주는데, run , with, let은 그렇게는 안해줌..?(이렇게 개떡같이설명하면 누가알아들을까..)

제출 과제 피드백 반영

⏲️ 공부시간 20 : 10 ~ 21 : 10

내용

  • 피드백 받은 내용 확인하고 정리
  • 피드백 반영해서 코드 수정
    • ctl + alt + L 전부 적용 완료
    • Calculator 클래스 오픈없애줌
    • 사용하지 않는 import 삭제 완료
  • 아직 수정 못한 부분
    • try - catch 를 사용한 예외 처리
    • 수정 도전해봤는데…
    • 아직 try catch를 정확히 익히지 못해서 어디에 try catch 코드를 넣어줘야 내가 원하는 예외처리를 할 수 있을지 잘 모르겠음.
    • 내일 질문하기!

이번주 과제 진행

⏲️ 공부시간 21 : 30 ~ 21 : 50

본격적으로 과제 시작 전에 어떤 기능이 필요할지 살펴보고 어떻게 구현할지 생각해봄..

Lv 0

  • 과제 시작 전 어떻게 구현할 것인지에 그려 보는 과정입니다.
    • 요구 사항별로 상세 기능을 생각합니다.
    • 사용하면서 발생할 수 있는 예외 사항들을 고려합니다.
/icons/crayon_gray.svg 구현해야할 기능
  • 메뉴를 보여주는 기능
    • fun displayMenu → 메뉴 대분류를 먼저 보여주고 선택하면 대분류 안의 세부 메뉴를 볼수 있도록 구현
  • 메뉴를 선택/ 종료 기능 →( 잘못된 것을 입력했을 때 예외처리 되도록 구현)
  • 메뉴별 클래스 작성 → (메뉴이름 , 가격 , 세트메뉴로 업그레이드하는 함수 )
  • 회원가입(?) 기능 → 고객 클래스를 만들어서 들어오면 무조건 가입하고 결제할 금액을 충전하는식?

지금 시간이 늦어서 피곤해서 그런가.. 막 머리가 잘 안돌아감

원래 Lv 1까지 오늘 하려고했는데 일단 당장은 쉬어야겠당 ㅎㅎ

쉬다가.. 잠안오고 공부 더하고 싶으면 또 와서 Lv 1 구현 시작하던가..

아니면 자고 내일 하던가 해야겠음~!


TMI

밥먹기가 너무 귀찮다.....
누가 그냥 밥을 차려서 대령해줬으면 좋겠어..
근데 배달음식은 싫엉..
먹고싶은게 없어버림...

profile
오리너구리입니다

2개의 댓글

현지님! Regex 표현식은 저도.. 못외웠답니다😁
사실 코딩은 외울 필요가 없죠! 자주 사용하다보면 익숙해질 뿐! 사용법만 알고 있으면 되니까요~

마찬가지로 배우신 이론적인 내용은 앞으로 직접 실습을 하시면서 점점 터득하시게 될거에요!
지금 이렇게 이론 정리 해놓으신 것들은 뒤에 가면 분명 빛을 발하게 될테니 너무 잘해주고 계신 것 같습니다! 과제 제출까지 파이팅해봅시다!👍

1개의 답글