val superTypeToken = object:SuperTypeToken<List<GoldFish>>(){} val superTypeSafeCage = SuperTypeSafeCage(); superTypeSafeCage.putOne(superTypeToken,listOf(GoldFish("금붕어1"),Carp("새"))) superTypeSafeCage.getOne(superTypeToken).forEach(::println) superTypeToken은 List<GoldFish> 전용토큰인데 실제 Carp를 putOne 하여도 데이터가 삽입이 됩니다. 또한 superTypeSafeCage.getOne(superTypeToken) 입력 시 Carp까지 조회되네요. 해당 부분에 대한 유효성 검사를 각각 진행해야 되는건가요?
안녕하세요, 선생님! 좋은 강의 감사합니다. 사이드 프로젝트를 진행하기 위해 이 강의를 신청해서 열심히 듣고 있습니다. 강의를 들으면서 궁금한 점이 생겨서 질문 드립니다. 제가 예매 시스템 을 개발하려고 하는데, 다음과 같은 여러 기능들을 구현해야 합니다: 채팅 기능 (강의에서 다루신 Chat API) AI 추천 기능 (Spring AI에서 제공하는 API) 데이터 수집 기능 (크롤링 API) 기타 예매 관련 API들 이런 상황에서 모듈 구조 설계 에 대해 고민이 됩니다. 방법 1: 모든 API 기능들을 하나의 API 모듈에서 관리 방법 2: 기능별로 모듈을 나누고, 각 모듈 내에서 해당 기능의 API들을 그룹화 어떤 방식이 더 적절한 설계일까요? 혹시 이런 다중 기능을 가진 시스템에서의 모듈 설계에 대한 조언을 해주실 수 있을까요? 감사합니다!
태현님! 안녕하세요, 먼저 이런 좋은 강의를 만들어 주셔서 감사드립니다 🙂 다만, 듣다가 또 하나의 질문이 있어서 말씀드리고 싶습니다! 바로 널 아님 단언 관련입니다! 예제 코드에서는 아래와 같이 작성을 해주셨는데요! fun startsWith(str: String?): Boolean { return str!!.startsWith("A") } 이런 경우 str 파라미터가 null이 들어올 가능성이 있지만 해당 코드를 실행할때 null이 절대 아니야라고 명시적으로 표현하기 위하여 !!를 붙여준다고 이해했습니다! 다만, 이런 경우는 굳이 널 아님 단언을 사용하는게 아니라 파라미터의 String?타입을 String으로 두면 어떨까 싶은 생각이 들어서요! 이렇게 된다면 굳이 널 아님 단언을 사용할 필요가 없어 보이는데 다른 곳에서 사용하는 예시가 따로 있는지 궁금하여 질문을 드리게 되었습니다!
안녕하세요 강의 수강 중 궁금한 것이 생겨서 질문 드립니다. 강의에서 Claude에게 우리 로컬에 있는 스프링(인텔리제이) 파일 구조를 묻고 Claude는 권한을 물은 뒤 구조를 분석해줬는데 여기에서 Claude에도 제트브레인 관련 플러그인(JSON 파일)을 설정해주어서 Claude에게 질문을 했을 때 Claude MCP 서버가 제트브레인 MCP로 요청을 해서 내용을 받은 것이라고 이해했고 제트브레인 MCP 서버는 강의에서 인텔리제이에 MCP 서버 플러그인을 설치해서 내 로컬의 파일 구조를 상호작용을 통해 알 수 있을 거라고 추측하고 있는데(맞게 이해했는 지는 잘 모르겠네요ㅎ..) 그러면 제트브레인의 MCP는 Claude MCP 서버가 주는 요청이 내 로컬의 인텔리제이 IDE의 내용이라는 것을 어떻게 알 수 있는 걸까요? 강의 내용과는 무관할 수 있는데 궁금해서 질문 남깁니다. 감사합니다!
안녕하세요 코틀린 강의 초급, 고급 다 잘 들었습니다. 저는 웹 백앤드 개발자인데요. MVC 패턴 등으로 여러 코드들을 공부 & 회사에 적용시키고 싶은데, 좋은 코드 예시들은 어디서, 어떻게 찾아볼 수 있을까요!? github 에서 검색한다면 키워드는 보통 어떤식으로 찾아볼 수 있을까요? 등등 팁 같은 것 알려주시면 감사하겠습니다. 감사합니다!
태현님 안녕하세요. 강의 잘 수강하고 있습니다. 다만, 궁금한 점이 존재하여 질문을 드리게 되었습니다! 연산자 오버로딩에 operator 키워드를 이용하여 연산자 오버로딩을 하여 객체끼리 연산자 +를 이용하여 해당 메서드가 호출되었는데 이런 연산자 오버로딩은 메서드명으로 추론을 하는걸까요? 메서드 명을 다르게 변경하니 아예 operator 키워드에서 컴파일 에러가 발생하더라구요! 갑자기 이런 부분이 궁금해져서 질문드립니다!
by lazy 위임 프로퍼티 강의에서 by 키워드를 사용하려면 getValue 함수와 setValue 함수가 필요하다고 하셨는데 val 키워드로 변수 선언 시 setValue가 존재할수 없지 않나요? var 키워드 -> getValue(),setValue() val 키워드 -> getValue() 로 by 키워드를 사용할 수 있는것같아 질문드립니다.
안녕하세요. 좋은 강의 감사드립니다. 코루틴에 대한 설명을 듣고 보니, 자바 21에 등장한 Virtual Thread와 그 개념이 매우 비슷하다고 생각이 들었습니다. 코루틴을 실행시키는 스레드는 어찌보면 Virtual Thread 의 carrier thread로 생각할 수 있고, 코루틴 자체를 virtual thread 라고 생각해보면, 결국 두 개념이 용어만 다를 뿐 결과적으로는 동일한 기능(?)을 수행하는 것으로 보입니다. 제가 궁금한 것은 자바에서 Virtual Thread로 작성된 코드가 100퍼센트 코틀린 - 코루틴으로 변환 가능한지, 그리고 그 역도 성립하는 것인지 궁금합니다. 감사합니다.
안녕하세요! 강의를 보면 콘솔 창에 DB 연결된 부분이 나오는데 처는 아래처럼 나오는데 어떻게 해결하면 좋을까요? 이 부분부터 막히니 다음으로 넘어갈 수가 없습니다 답변 기다리겠습니다! 감사합니다 Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 8.0.42 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown
37강 5분 11초에서 "처음에는 null로 되어있지만 값을 한 번 세팅할 수 있게 해주고 싶다."라고 하셨는데 처음부터 null을 할당하지 않으면 lateinit을 사용 안 할 수도 있는 거 아닌가요? 테스트코드에 대한 이해가 하나도 없어서 고른 강의인지라 질문의 깊이가 너무 없지만 답변주시면 감사합니다!!
앱을 만들고 싶어 강의를 시작했습니다. 이해하기 쉽도록 강의가 되어 있어서 좋네요 그런데 강의에서 보여지는 안드로이드스튜디오 소스 스타일과 제가 다운받은 android-studio-2024.3.2.15-windows.exe 버전이 상이해서 문의 드립니다. new project->empty project로 만들고 나면 layout에는 activitymain도 없고, mainactivity의 소스 내용도 상이합니다. 안드로이드스튜디오를 이제 처음 켜보니 어떻게 해야할지 모르겠어요..ㅠㅠ 안드로이드스튜디오 버전을 강의에서 사용한 버전으로 바꿔야 하는지... 아님 현재 버전을 이용할 경우 어떻게 하면 강의를 잘 따라갈수 있는지...난관에 붙혀서 문의 드립니다.
안녕하세요. 범위를 비교하는 방식의 성능차이에 대해서 궁금한데요. 1번 1<=x && 3>=x 2번 x in 1..3 1번방식에 비해 2번방식은 수열을 순회하면서 수열에 포함 여부를 확인하게 되는 방식일거 같은데, 제 예상이 맞을까요? 그렇다면 성능상 더 좋지 않을거 같아서요. 감사합니다.
강의를 보니 viewModel 에서 Room 에 CRUD 를 하기 위해서는 비동기 처리를 해야 하고, 1. 이를 위해 viewModelScope.launch 를 사용하는 것 같은데 맞을까요? viewModel 의 CRUD 함수를 suspend fun 으로 만들면 viewModelScope.launch 를 안써도 되는 건가요?