묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
image1.setOnClickListener { }
image1.setOnClickListener { } 여기서 괄호에 엔터 치시면 it: view! 가 회색으로 바뀌시던대 저는 엔터쳐도 아무 반응이 아무것도 안뜨네요 .. 제가 임의로 it: view!를 쳐넣어도 회색으로 바뀌지도 않고요.. 어찌해야하나요
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
projectRepository assertion 오류 질문입니다.
projectRepositoryTest.kt 파일을 아래와 같이 작성했는데 assertion 오류가 나서 원인을 모르겠어서 해당 파일 코드 첨부합니다. 94줄과 111줄 오류인 걸로 보아 skills를 assert할 때 뭐가 잘못된 것 같은데 어떻게 고쳐야 하는지 잘 모르겠습니다..!package com.yewon.portfolio.domain.repository import com.yewon.portfolio.domain.constant.SkillType import com.yewon.portfolio.domain.entity.Project import com.yewon.portfolio.domain.entity.ProjectDetail import com.yewon.portfolio.domain.entity.ProjectSkill import com.yewon.portfolio.domain.entity.Skill import org.assertj.core.api.Assertions import org.assertj.core.api.Assertions.* //import com.yewon.portfolio.domain.entity.* //import org.assertj.core.api.Assertions.* import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest @DataJpaTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) class ProjectRepositoryTest( @Autowired val projectRepository: ProjectRepository, @Autowired val skillRepository: SkillRepository ) { val DATA_SIZE = 10 private fun createProject(n: Int): Project { val project = Project( name = "${n}", description = "테스트 설명 {n}", startYear = 2023, startMonth = 9, endYear = 2023, endMonth = 9, isActive = true ) val details = mutableListOf<ProjectDetail>() for (i in 1..n) { val projectDetail = ProjectDetail(content = "테스트 ${i}", url = null, isActive = true) details.add(projectDetail) } project.addDetails(details) val skills = skillRepository.findAll() val skillsUsedInProject = skills.subList(0, n) for (skill in skillsUsedInProject) { val projectSkill = ProjectSkill(project = project, skill = skill) project.skills.add(projectSkill) } return project } @BeforeAll fun beforeAll() { println("----- 스킬 데이터 초기화 시작 -----") val skills = mutableListOf<Skill>() for (i in 1..DATA_SIZE) { val skillTypes = SkillType.values() val skill = Skill(name = "테스트 ${i}", type = skillTypes[i%skillTypes.size].name, isActive = true) skills.add(skill) } skillRepository.saveAll(skills) println("----- 스킬 데이터 초기화 종료 -----") // println("----- 데이터 초기화 이전 조회 시작 -----") // val beforeInsert = projectRepository.findAll() // assertThat(beforeInsert).hasSize(0) // println("----- 데이터 초기화 이전 조회 종료 -----") println("----- 테스트 데이터 초기화 시작 -----") val projects = mutableListOf<Project>() for (i in 1..DATA_SIZE) { val project = createProject(i) projects.add(project) } projectRepository.saveAll(projects) println("----- 테스트 데이터 초기화 종료 -----") } @Test fun testFindAll() { println("----- findAll 테스트 시작 -----") val projects = projectRepository.findAll() assertThat(projects).hasSize(DATA_SIZE) println("projects.size: ${projects.size}") for (project in projects) { assertThat(project.details).hasSize(project.name.toInt()) println("project.details.size: ${project.details.size}") assertThat(project.skills).hasSize(project.name.toInt()) println("project.skills.size: ${project.skills.size}") } println("----- findAll 테스트 종료 -----") } @Test fun testFindAllByIsActive() { println("----- findAllByIsActive 테스트 시작 -----") val projects = projectRepository.findAllByIsActive(true) assertThat(projects).hasSize(DATA_SIZE) println("projects.size: ${projects.size}") for (project in projects) { assertThat(project.details).hasSize(project.name.toInt()) println("project.details.size: ${project.details.size}") assertThat(project.skills).hasSize(project.name.toInt()) println("project.skills.size: ${project.skills.size}") } println("----- findAllByIsActive 테스트 종료 -----") } }
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
테스트코드 실행중 오류와 경고에 관한 질문 입니다.
현재 강의는 ExperienceRepository코드를 테스트하는 코드인데 interface HttpInterfaceRepository : JpaRepository<HttpInterface, Long>{ fun countAllByCreatedDateTimeBetween(start: LocalDateTime, end: LocalDateTime): Long }제가 이런식으로 HttpInterfaceRepoistory에 사용자 정의 메서드이름을 잘못 설정했어서테스트 코드 실행중에 오류가 발생하여이런식으로 실행이 안되었습니다.HttpInterfaceRepository와 관려 없는 코드 같은데 왜 오류가 발생하는 건가요?그리고 저 오류를 발견해서 HttpInterfaceRepository 를 수정하고 실행을 하니 정상적으로 실행은 되었는데이 경고가 뜹니다 이건 어떤건가요?프로젝트 리포지토리 테스트가 계속 실패하는데 왜 그런건가요? https://drive.google.com/file/d/1s2JngsdGhN_iOUf6llkkcUwwISIuCTUp/view?usp=sharing구글 드라이브에 소스코드 압축해서 업로드 했습니다
-
미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
[룸DB 관련 에러] can't open offline database '/data/data/ ...
에러재현Intro를 통해서 DB를 최초 저장하는 것은 성공앱을 재빌드 또는 재실행하면 App Inspection 의 coin_database (closed) 라고 나오는 현상 있음Database Inspector 관련 에러창도 뜹니다. 시도해본 에러 처리시뮬레이터 디바이스 변경시뮬레이터 디바이스 wipe data 실기기에서 [에러재현]과 동일한 방식의 빌드테스트App Inspector의 [Keep Data Connections Open] 활성화[프로젝트파일 구글드라이브 링크]https://drive.google.com/file/d/1a7nJ6Zik7Plpx2UEs7nBKDemQ40qZvpJ/view?usp=sharing 왠만하면 검색하여 해결해보려했는데 도저히 이유를 모르겠네요.. 혹시 어떤 문제인지 알고 계신가요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
리턴타입 사용시 any를 사용해도 괜찮은가요?
코틀린으로 스프링을 개발해 보고 있습니다.리턴할떄 ResponseEntity<Any> 이런식으로 Any를 사용해도 괜찮을까요?
-
해결됨코틀린 코루틴 완전 정복
Coroutine과 VirtualThread의 차이점에 대해질문드립니다
안녕하세요 Coroutine 강의 잘듣고있는 수강생입니다 (_ _)최근 JDK21의 VirtualThread관련해 찾아보게 되었는데요 Coroutine과 유사하게 Os단의 Thread를 점유하지 않고 Software적으로(?) 쓰레드에 작업분배를 하는점이 유사하다고 느꼈습니다 (잘못이해했다면 첨삭부탁드립니다 ㅠㅠ)만약 제 이해가 맞다면, JVM레벨에서 제공하게되는 VirtualThread가 더 범용성이 높아보이는데 Coroutine의 사용이 유지가 될까요? 남아있게 된다면 Kotlin 언어차원에서의 사용성이 좋아서 일정도일지... 아니면 Coroutine이 VirtualThread와 다르게 차별화된 장점이 있을지 궁금합니다감사합니다!
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
@PostCunstructer 를 사용하는 이유가 뭔가요?
DataIntialize 클래스에서 메서드에 포스트 컨스트럭터를 사용하셨는데 어떤 기능인지 잘 이해하지 못했습니다.해당 클래스를 빈으로 등록하면서 같이 초기화가 이루어 지게 하는건 안되는건가요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
프로젝스 생성 충돌 에러
프로젝트를 만들었는데 코드와 파일들에 빨간 줄이 그어져있습니다.버전이 안 맞아 안드로이드 스튜디오를 3번 정도 재 설치 한 것 빼고는 영상 그대로 따라했습니다
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
환경변수 설정을 yml 아니라 properties로 해도 상관 없나요?
yml과 properties의 차이가 계층구조 표현의 차이만 있는거 같은데 properties로 적용해서 강의를 진행하여도 상관이 없나요?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
-
-
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
git 사용 오류 질문 드립니다
강의 내용대로 진행 후 commit 창과 git 창을 열었을 때 제가 이전에 작업했던 파일들 (D: 루트 디렉토리 안에 있는 이전에 git에 업로드한 적 있는 모든 파일들)이 함께 보입니다파일 경로를 모두 열어보면 선택해서 진행할 수는 있지만 해당 프로젝트의 git 시작 디렉토리가 제대로 설정되지 않은 것 같아 어떻게 해결하는지 질문 드립니다
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
4:28 build.gradle 수정 시 kotlin-reflect관련 implementation 추가 해야할까요?
build.gradle에 plugin만 추가하니 오류나고 아래 내용이 추가되니 오류가 사라지고 정상 동작하였습니다.implementation "org.jetbrains.kotlin:kotlin-reflect"정확한 원인은 모르겠는데 contextLoads할때 부터 error가 나서 kotlin으로 만든 Book을 Entity로 인식하지 못하는 것 같았습니다. 이렇게 해결하는게 맞는건지 궁금합니다. windows10 / java11 / intellij 사용중입니다! [오류원문]Failed to resolve parameter [com.group.libraryapp.service.book.BookService bookService] in constructor [public com.group.libraryapp.service.book.BookServiceTest(com.group.libraryapp.service.book.BookService,com.group.libraryapp.domain.book.BookRepository,com.group.libraryapp.domain.user.UserRepository,com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository)]: Failed to load ApplicationContext org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [com.group.libraryapp.service.book.BookService bookService] in constructor [public com.group.libraryapp.service.book.BookServiceTest(com.group.libraryapp.service.book.BookService,com.group.libraryapp.domain.book.BookRepository,com.group.libraryapp.domain.user.UserRepository,com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository)]: Failed to load ApplicationContext at app//org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:239) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:183) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:74) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:355) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:302) at app//org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:79) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:280) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272) at java.base@11.0.24/java.util.Optional.orElseGet(Optional.java:369) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271) at app//org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) 이하 생략..
-
미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
강의명: 코인 선택화면 Adapater 세팅 (RecyclerView) 에서
RecyclerView의 Adapter를 선언할 때,context는 어떤 용도로 생성자로 받게되는건가요? 의문포인트context를 생성자로 받지않더라도 RecyclerView의 구현에는 문제없이 되는 부분이 의아했습니다.context를 생성자로 받는것과 받지 않는것과는 어떤 차이가 있나요?[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin) 강의의 RecyclerViewAdapter를 구현하실 때에는 context를 별도로 생성시 인자로 받지 않았던 것으로 기억하거든요.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
에뮬레이터 자체가 2021년 강의 것이랑 다른거같아요..
에뮬레이터 실행하는 것좀 새로 2024년 형으로 찍어서 올려주세요... 실행을 해도 만든게 적용이 안되고 그냥 핸드폰만 실행됩니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
ActivityMainBinding 문제 건
class MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) binding = setContentView(this, R.layout.activity_main)e: file:///C:/Users/break/AndroidStudioProjects/Databinding_ex/app/src/main/java/com/example/databinding_ex/MainActivity.kt:16:36 Unresolved reference: ActivityMainBinding라고 오류메세지가 발생합니다..ChatGPT는 ActivityMainBinding 클래스가 제대로 생성되지 않는 이유는 주로 View Binding이 활성화되지 않았거나, 캐시 문제 또는 Gradle 동기화 문제가 있을 수 있습니다. 위의 단계를 통해 문제를 해결할 수 있을 것입니다. 라고 설명하긴 하는데, 얘가 말한대로 적어봐도 해결되지가 않네요..
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
LinearLayout 오류
7분 40초 쯤에 알려주신대로 맨 윗줄과 맨 밑에 줄 내용을LinearLayout 으로 바꿨는데빨간색깔 오류가 뜹니다. 어떤 차이로 오류가 뜨는거죠??
-
해결됨2시간으로 끝내는 코루틴
CoroutineScope & Dispatcher 질문
안녕하세요.제가 복습을 하다가 궁금한 부분이 생겨 질문드립니다. section1 아래 코드를 다시 보니까 조금 혼란이 옵니다. fun main(): Unit = runBlocking { val job1 = CoroutineScope(Dispatchers.Default).launch() { ... } val job2 = CoroutineScope(Dispatchers.Default).launch() { ... } } 위 코드는 같은 Dispatchers.Default를 사용하는 것으로 보이는데, 질문.두 CoroutineScope가 공통된 Dispatchers.Default를 공유하니까 한 코루틴에서 예외가 발생하면 다른 코루틴에서 예외가 발생할 것 같은데, 따로 처리되는 이유가 무엇인지 궁금합니다.예를 들어, job1에 대한 CoroutineScope에서 예외가 발생하면 Dispatchers.Default에 job1에 대한 id를 주고, 해당 코루틴(ex. job1 내부 delay 상태로 된 내부 코루틴)에 대한 코루틴을 전부 지워라이런 식으로 작동해서 독립적으로 실행되는건가요? 코루틴을 스레드에 배정하는 역할이 Dispatchers.Default, IO, Main 등이 있는데, 이름이 같은데 따로 예외처리되고 하니까 헷갈려서 질문드립니다. 제가 Dispatchers와 CoroutineScope 관계에 대해서 잘 이해를 못해서 또 이렇게 질문 올립니다.. 감사합니다.
-
해결됨[입문] 누구나 배울 수 있는 코틀린(Kotlin)
따로 안드로이드 앱 개발을 안해도 들어도 괜찮죠?
입문만 배워가는 단계로 사용해도 되나요?
-
해결됨2시간으로 끝내는 코루틴
async await 관련 질문
안녕하세요.val job1 = async { apiCall1() } val job2 = async { apiCall2(job1.await()) } printWithThread(job1.await() + job2.await())만약, job1에 대한 결과를 메인 코루틴과 job2 코루틴 각각에서 사용하고 싶으면 위와 같이 작성하면 되나요?제가 실제로 apiCall1에 print문을 넣어 보니까 1번만 출력이 되는 것을 확인했습니다. 만약, 위에 질문이 맞다면 코루틴 job을 생성하고 해당 결과를 받을 때는 항상 await() 함수를 호출하면 되나요?여기서 궁금한 점은 만약 서버와 통신하는 api라고 한다면, 새롭게 호출하고 싶을 때도 있을 텐데 이럴 때는 어떻게 기존 값이 아닌 새로운 값을 받을 수 있는지도 궁금합니다. 감사합니다.
-
해결됨2시간으로 끝내는 코루틴
코루틴 실행 순서 궁금합니다.
안녕하세요.먼저 선생님 강의가 도움 많이 되고 있습니다.감사합니다. 질문이 두 가지 있습니다.질문 1.fun main() = runBlocking { println("START") launch { println("1") } launch { println("2") } launch { println("3") } launch { println("4") } yield() println("END") }이런식으로 되어 있다면yield실행 후에 1~4번 중 어떤게 출력될지는 랜덤인건가요?실제 실행 시에는 순서대로 되는걸 확인 했는데, 이게 항상 launch가 호출된 순서대로 출력되는건가요?질문 2.fun main() = runBlocking { println("START") launch { println("1") } launch { println("2") } launch { yield() println("3") } launch { println("4") } yield() println("END") }만약 3번에 yield 가 있다면, 어떻게 되는건가요?3번에 들어온 순간 끝나지 않은 Coroutine 중에서 랜덤하게 호출되는건가요?아니면 main으로 가서 END가 출력되는건가요?감사합니다.