오늘 계획
나머지는 다했는데.. 실습코드 복습이 너무 오래걸려서 개인과제는 Lv 0 까지만 함
⏲️ 공부시간 09 : 00 ~ 10 : 30
오늘은 36번을 풀었당 처음 다 풀기 까지는 한 15분? 20분? 이 정도로 그렇게 오래안걸렸는데 풀고나서
다른 사람 풀이 훑어보고
Regex 에 대해 더 검색해보고 하니까 갑자기 10시 30분이 되었었음 ;;
아직 Regex 표현식을 외우지못해서 혼자서 못쓰겠음..근데 이걸 어케 외워~
⏲️ 공부시간
10 : 30 ~ 13 : 20
13 : 50 ~ 16 : 40
17 : 00 ~ 20 : 00
공부한 이유
실습 코드 중 어떤 함수에 반환타입을 Any? 로 해놓은 이유를 모르겠어서
공부 방법
구글에 검색함
이해한 내용
모든 타입의 최상위 클래스에 있는 타입으로 모든 타입으로 바뀔 수 있음
실습 코드 처럼 반환 타입을 Any? 로 해두면 null을 포함한 모든 데이터타입을 다 반환 가능하게 할 수 있다.
공부한 이유
try catch 문으로 예외 처리한 코드를 스스로한테 명확하게 설명할 수 없어서
공부 방법 / 이해한 내용
예외 종류는 뭐가있지?
-> 엄청 많음 진짜 개많음
예외 종류를 다외워야하나?
→ 놉 못외워도된다고함 그냥 일단 Exception으로 해놓고 무슨 종류의 예외인지 확인해보라고함 심지어 코틀린에서 정의하지 않은 예외는 따로 예외클래스만들어서 내가 정의도 가능
??근데 예외종류를 어떻게 확인하지?
→ 먼가 저 e 그 로그? 에서 보는거인가???
⇒ 해당 함수에 들어가서 어떤 예외들이 발생할 수 있는지 확인해도되고 그냥 Exception으로 모든 예외를 받아도된다.
e:java.lang.NumberFormatException 이런거대신 그냥 e:메롱 뭐가틀렸게 라고 쓰면안되는것?
-> 위에 찾으면서 보니까 안되나봄
예외를 던진다? 라는 거의 정확한 의미?
개발자가 일부러 예외를 발생시키는거?
→ 애초에 일부러 예외상황을 만들어놔서 예외 처리를 강요? 하는거? 잘 이해한게 맞나?
⇒ 예외상황일 때 리턴값을 -999이런식으로 해놓고 처리하는거보다 예외를 내가 설정해놓는게 협업이나 유지보수측면에서 좋기 때문에 예외를 던지는것
try -catch 와 관련된건아니지만 왜 코틀린 으로 검색하는데 다 자바랑 비교해서 설명해주는거임?
→ 아니 코틀린이 자바 기반으로 만들고 뭐 호환이 다 되는건 알겠는데 왜 코틀린 검색하는데 자바랑 비교해서 알려주는거임? 더 어려운데?
⇒ 코틀린은 자바를 업그레이드 시킨 언어인데 자바가 Database가 더 많이 쌓여있어서 검색하면 java관련 자료가 많이 나올 수밖에없다.. 그렇다고 java 공부를 따로 할필요는 없음
공부한 이유
실습 코드를 보는데 늦은 초기화를 활용한 코드에서 부생성자를 사용한 부분에서 뭘 설명해줬었는데 그게 생각이 안났음
공부 방법
해당 강의를 다시 찾아서 봄
이해한 내용
그냥 부생성자 사용할 때
변수를 사용하는 시점을 변수가 초기화 된 다음으로 해야된다는 거였음
공부한 이유
실습 코드 중 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!!
}
}
궁금했던 것들
공부 과정
→ companion object가 뭔지 개념은 알겠는데 왜쓰는지 모름
싱글톤 패턴은 자주쓴다.
내가 이해한 내용
companion object
→ 클래스가 객체를 만들기위한 틀인 것처럼 오브젝트는 객체 그 자체를 클래스 없이도 생성할 수 있게 해주는 키워드고, 어떤 클래스 내에서 오브젝트를 생성하고 싶을 때 companion object를 사용한다.
→ 어차피 클래스내에 companion object는 하나밖에 못만들고, 다른데에서 호출할 때는 해당 클래스의 이름으로 호출하기때문에 이름을 굳이 안만들어줘도된다? 근데 원하면 이름 붙여줘도 된다. 이름 안만들면 그냥 Companion이라는 이름을 알아서 가짐
→클래스의 모든 인스턴스가 공유하는 객체를 만들고싶을 때 사용한다.
@Volatile
→ 어노테이션 종류 중 하나로 멀티쓰레딩 환경에서 변수의 값을 항상 메인 메모리에서 읽고 쓰게함으로써 모든 쓰레드가 변수의 최신 상태를 받을 수 있게함.
컴파일러 지시자 : 컴파일러에게 특정한 처리를 하도록 지시
Ex) @Override : 메서드가 슈퍼클래스의 메서드를 오버라이드하는 것임을 컴파일러에 알림
런타임 처리 : 런타임에 반영되는 동작 정의
메타데이터 제공 : 코드 요소에 대한 부가 정보 제공
Ex) @Deprecated : 특정요소가 더이상 사용되지 않음을 나타냄
getInstance()
→ 모르겟음 뭐하는애지??????
synchronized
synchronized(잠금할 오브젝트){
한번에 하나의 쓰레드만 사용하게할 코드
}
→ 괄호안에 지정된 오브젝트에 락을 걸어서 블록 내의 코드를 한번에 하나의 쓰레드만 실행 할 수 있게해줌
→ 뭐하는 앤지는 알겠는데 getInstance()를 이해못해서그런가 이게 저기 왜 들어가는지 모르겠음
튜터님한테 가서 질문하고옴
싱글 톤 패턴 :
오브젝트를 한개만 생성해서 어디서든 접근 가능할 수 있게 만들어주는 것
companion object 로 싱글 톤 패턴을 만들어줌
instance 라는 캐시샵 클래스를 인스턴스로만들어서 넣어둘 변수를 선언하고 null 처리
만약에 누가 처음으로 instance를 생성하면 아직 instance가 아직 null일거니까 instance 변수에 Cashshop()을 넣어주고, 이미 누가 한번 instance를 생성한적이 있는데 다른애가 instance를 만들려고하면, 이미 만들어져있던 instance를 반환해줌
→ 이렇게 하면 인스턴스를 하나만 만들어서 여러군데에서 접근하게 할 수 있다.
@Volatile 여러군데서 접근할때 변수가 잘 업데이트 되게 해주는 역할
synchronized는 혹시 동시에 해당 함수에 접근했을 때 동시에 처리되지 않도록 생성되는 걸 막아주는 역할
튜터님한테 질문하니까 혼자 몇시간 머리싸매던게 한순간에 정리됨 속이 뻥!!!!
ㅎㅎ... 증말 제송한일이지만 튜터님을 많이 괴롭혀야겠다…
공부한 이유
전에 한번 스코프 함수 공부한 적 있는데 그 때 어려워서 뭔말인지 이해못하고 일단 넘겨놨는데
또 등장하고 자주 쓰이는 것 같아서 이번엔 진짜로 짚고넘어가서 이해하고 넘어갈려고
공부방법
일단 전에 정리해둔 자료, 강의 자료 다시 읽으면서 합쳐서 정리하고
내 머리에 입력 안된부분 체크
구글링
⏲️ 공부시간 20 : 10 ~ 21 : 10
내용
⏲️ 공부시간 21 : 30 ~ 21 : 50
본격적으로 과제 시작 전에 어떤 기능이 필요할지 살펴보고 어떻게 구현할지 생각해봄..
지금 시간이 늦어서 피곤해서 그런가.. 막 머리가 잘 안돌아감
원래 Lv 1까지 오늘 하려고했는데 일단 당장은 쉬어야겠당 ㅎㅎ
쉬다가.. 잠안오고 공부 더하고 싶으면 또 와서 Lv 1 구현 시작하던가..
아니면 자고 내일 하던가 해야겠음~!
밥먹기가 너무 귀찮다.....
누가 그냥 밥을 차려서 대령해줬으면 좋겠어..
근데 배달음식은 싫엉..
먹고싶은게 없어버림...
현지님! Regex 표현식은 저도.. 못외웠답니다😁
사실 코딩은 외울 필요가 없죠! 자주 사용하다보면 익숙해질 뿐! 사용법만 알고 있으면 되니까요~
마찬가지로 배우신 이론적인 내용은 앞으로 직접 실습을 하시면서 점점 터득하시게 될거에요!
지금 이렇게 이론 정리 해놓으신 것들은 뒤에 가면 분명 빛을 발하게 될테니 너무 잘해주고 계신 것 같습니다! 과제 제출까지 파이팅해봅시다!👍