묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
59.세션_개요 강의 세션수 집계 방법 질문
안녕하세요.<59.세션_개요> 강의에서 아래 예시 1)의 경우 세션 1로 집계된다고 설명해주셨는데혹시 예시 2)와 같이 재방문 경로가 Direct가 아닌 경우는 세션 2로 집계되는지 궁금합니다.감사합니다. 예시 1) 11:50 pm Naver/cpc로 유입 > 11:55pm 주소창 입력 후 사이트 재방문예시 2) 11:50 pm Naver/cpc로 유입 > 11:55pm google/organic 으로 재방문
-
미해결모던 안드로이드 - Jetpack Compose 입문
ViewModel 사용 관련 질문
안녕하세요, 비만도 계산기 강의를 수강하면서 코드를 작성하고 말씀하신 내용들을 학습했는데요."bmi state를 통해 bmi값이 변경되면 설정한 콜백이 동작하며 결과화면이 recomposition되고, 네비게이션 컨트롤러로 해당 화면으로 이동한다" 라고 이해했는데요,navController.navigate("result")가 수행되면composable(route = Screen.Result.route) { ResultScreen( bmi = viewModel.bmi.value, onBackClick = { navController.popBackStack() } ) }부분이 실행되기 때문에 bmi가 State가 아니고 지역변수여도 원하는 화면이 나올것이라고 생각해서 코드를 변경했는데 실제로 기존과 동일하게 잘 동작하는것을 확인하였습니다. 본 강의에서는 지역변수를 활용해서도 동작이 되지만, UI와 로직을 분리하는 장점이 있으며 ViewModel이 많이 사용되니 사용하신것으로 이해하면 될까요?아래는 지역변수로 변경한 코드입니다package com.example.obesitymachine import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import kotlin.math.pow sealed class Screen(val route: String) { data object Home : Screen("home") data object Result: Screen("result") } class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { val navController = rememberNavController() var bmi = 0.0 NavHost(navController = navController, startDestination = Screen.Home.route) { composable(route = Screen.Home.route) { HomeScreen( onResultClick = {height, weight -> bmi = bmiCalculate(height, weight) navController.navigate(Screen.Result.route) } ) } composable(route = Screen.Result.route) { ResultScreen( bmi = bmi, onBackClick = { navController.popBackStack() } ) } } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen( modifier: Modifier = Modifier, onResultClick: (height: Double, weight: Double) -> Unit ) { val (height, setHeight) = rememberSaveable { mutableStateOf("") } val (weight, setWeight) = rememberSaveable { mutableStateOf("") } Scaffold( topBar = { TopAppBar( title = { Text("비만도 측정기") } ) } ) { Box( modifier.padding(it) ) { Column( modifier .fillMaxSize() .padding(8.dp) ) { OutlinedTextField( value = height, onValueChange = setHeight, label = { Text("키") }, keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Number ), modifier = Modifier.fillMaxWidth() ) OutlinedTextField( value = weight, onValueChange = setWeight, label = { Text("몸무게") }, keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Number ), modifier = Modifier.fillMaxWidth() ) Button( modifier = Modifier.align(Alignment.End), onClick = { onResultClick(height.toDouble(), weight.toDouble()) } ) { Text("결과") } } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun ResultScreen( bmi: Double, onBackClick: () -> Unit ) { val text = when { bmi > 25 -> "과체중" bmi > 18.5 -> "정상" else -> "저체중" } val icon = when { bmi > 25 -> R.drawable.baseline_sentiment_very_dissatisfied_24 bmi > 18.5 -> R.drawable.baseline_sentiment_satisfied_24 else -> R.drawable.baseline_sentiment_dissatisfied_24 } Scaffold( topBar = { TopAppBar( title = { Text("비만도 측정기") }, navigationIcon = { Icon( imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null, modifier = Modifier.clickable(onClick = onBackClick) ) } ) } ) { Box( modifier = Modifier.padding(it) ) { Column( modifier = Modifier .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text(text, fontSize = 30.sp) Spacer(modifier = Modifier.height(50.dp)) Image( painter = painterResource(id = icon), contentDescription = null, modifier = Modifier.size(100.dp), colorFilter = ColorFilter.tint( color = Color.Black ) ) } } } } fun bmiCalculate( height: Double, weight: Double ): Double { return weight / (height / 100).pow(2.0) }감사합니다!
-
미해결홍정모의 따라하며 배우는 C++
cstr직접구현
피드백 부탁드립니다.
-
해결됨비전공자도 이해할 수 있는 Docker 입문/실전
현업에서 MySQL은 RDS와 도커 볼륨 중 어떤 걸 사용하나요?
아니면 MySQL을 사용할 때 도커와 RDS를 조합해서 사용할 수도 있나요? 현업에서 어떤 식으로 사용하는지 궁금합니다.
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
실습을 따라하는데 데이터베이스가 보이지 않아요
강의 내용에 실습 영역을 따라 스크립트를 작성하였는데 데이터베이스가 보여지지 않습니다.맥, 윈도우 모두 동일한 상태라 별도로 db를 다운받아 워크벤치 넣어야되는 것인지 문의 드립니다. - 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.)- 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 24시간 내에 재검토하겠습니다.- 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~- 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결차량 사이버보안 위협 분석 및 위험 평가 (TARA)
Security Goal 도출 관련 문의 건.
Security Goal을 적으려면 Asset/Security Property에 맞는 방어를 위한 기능을 구현 또는 도입해야 할것 같은데, 방어 기능 또는 알고리즘을 정리해놓은 자료 같은게 있을까요?
-
미해결그림으로 쉽게 배우는 자료구조와 알고리즘 (심화편)
힙 삽입의 케이스 관련해서 질문이 있습니다.
안녕하세요. 감자님. 자료구조 입문편에 이어서 심화편에서 또 뵙습니다. 질문이 있어서 글을 남기겠습니다. // 3. lastInsertedNode가 부모노드의 오른쪽 자식인 경우 else if(this.lastInsertedNode.getParent().getRightSubTree() === this.lastInsertedNode){ let currentNode = this.lastInsertedNode; let firstRightSiblingNode = null; // 상위 노드 중에서 처음으로 존재하는 오른쪽 형제 노드 while(currentNode.getParent() !== this.root){ // 최대 루트노드의 자식 노드까지 반복 currentNode = currentNode.getParent(); firstRightSiblingNode = this.getRightSibling(currentNode); if(firstRightSiblingNode !== null){ // 처음으로 존재하는 오른쪽 형제 노드를 찾은 경우 break; } } // while문 탈출 시, firstRightSiblingNode가 존재하지 않거나 찾은 경우만 존재강의에서 while문은 루트노드의 자식까지만 반복하기 위해서 currentNode.getParent().getParent() !== null이라고 하셨는데 코드가 직관적으로 와닿지 않아서요. 그래서 직관적으로 currentNode.getParent() !== this.root 라고 적으면 포인터에 대한 접근도 적어지고 코드도 의미를 한번에 파악할 수 있어서 이렇게 작성했습니다. 혹시 이렇게 작성하고 코드를 실행했을 때 발생할 수 있는 잠재적 문제가 있을까요?좋은 강의 제공해주셔서 열심히 듣고 있습니다. 한 번 배웠던 내용들인데 다 잊어버려서 새롭게 배운다는 마음으로 꼭 완강하겠습니다. 감사합니다.
-
해결됨[CS 기술면접 2] 말이 트이는 운영체제
강의 설명 끊김
19강 3분 37초에 "페이지 테이블의 주소 변환 기법을 살펴보겠습니다."를 말하시고 끊긴 것처럼 해당 개념에 대한 설명없이 다음으로 넘어가는 것 같습니다.
-
미해결홍정모의 따라하며 배우는 C++
BubbleSort
문제되는게 있으면 알려주세요
-
해결됨전동킥보드로 배우는 임베디드 실전 프로젝트
리니어 레귤레이터 관련 질문입니다.
Vout이 낮아지면 VFB가 낮아져서 VFB<VREF가 돼서 오차 증폭기 출력이 high가 돼서 switch가 on이 돼서 Vout 전압값을 올린다 1.VFB<VREF인 상황이면 증폭기 출력은 0V가 나와야 하는거 아닌가요?증폭기의 +단자에 Vfb -단자에 Vref라서 V+<V-인 상황에서의 출력값은 0V인것으로 알고 있는데 이부분이 헷갈립니다.2. switch가 on이 되는것이 왜 Vout 전압값을 올리는 결과가 나오는 것인지 궁금합니다.
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지 (with 커서 AI)
슈퍼 클로드 코드 강의도 예정되어 있나요?
클로드 코드 관련해서 ‘슈퍼 클로드 코드’라는 것도 있는 것 같은데, 이와 관련된 강의를 만드실 계획은 없으신가요?
-
미해결C# WinForm 사용자 정의 컨트롤 활용. 실무 역량 키우기
안녕하세요
안녕하세요 kaburi님" C# 프로그래밍 기초부터 실전 활용까지 " 를 25% 강의 들은 상태에서 미리"C# WinForm 사용자 정의 컨트롤 활용. 실무 역량 키우기" 결제를 진행하였습니다. 혹시 강의에 관련 자료는 어디서 받을수 있을까요??
-
해결됨2. 유니티가 어려운 입문자를 위한 입문용 게임 제작
혹시 이 강의에서 제공된 애셋들의 저작권 사항은 어떻게 되나요?
"2. 유니티가 어려운 입문자를 위한 입문용 게임 제작" 강의의 내용과 제가 창작한 컨텐츠 (실드 등) 를 합쳐서 게임을 완성해봤는데, 애셋의 저작권 문제가 어떻게 될지가 신경이 쓰이네요.유료 배포는 안 할 거긴 한데 (그럴 퀄리티가 안 되기도 하니...) 혹시 애셋들 중 배타적 저작권이 걸려있는 게 있다면 무료 배포에도 태클이 걸릴 수 있다고 알고 있어서요.
-
미해결Adobe Lightroom Classic 2020의 입문 Part.1
USB를 못 찾을 때...?
27:37 위치에서 똑같이 import를 따라했는데 먼저 사진을 가져왔던 usb 이동식 디스크(F:)가 from 목록에 나타나지 않고, other source를 눌러도 보이지가 않습니다?????
-
미해결Adobe Lightroom Classic 2020의 입문 Part.1
나오는 과정이 다른 것도 버전 차이인가요?
new catalog - 가운데 click - 폴더명 입력 - create 하면 라이트룸이 다시 실행되면서 no photo selected 라고 나옵니다.
-
미해결Adobe Lightroom Classic 2020의 입문 Part.1
Lr CAT와 Lrc CAT? 버전차이인가요?
-
미해결[CS 기술면접 2] 말이 트이는 운영체제
메모리 최적화 다이어그램 검증
17강을 보고 제가 이해한대로 다이어그램을 그려보았는데 잘 이해했는지 검토해주시면 감사하겠습니다.
-
해결됨홍정모의 따라하며 배우는 C언어
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
void fit_str(char* str, unsigned int loc) { str[loc] = '\0'; for (; loc < strlen(str) ; loc++) str[loc] = '\0'; }int my_strcmp(char* str1, char* str2) { char* str1_ptr = str1; char* str2_ptr = str2; if (strlen(str1_ptr) > strlen(str2_ptr)) return 1; if (strlen(str1_ptr) < strlen(str2_ptr)) return -1; if (strlen(str1_ptr) == strlen(str2_ptr)) { int i = 0; while (i < strlen(str1_ptr)) { if ((char)str1_ptr[i] - (char)str2_ptr[i] > 0) return -1; else if ((char)str1_ptr[i] - (char)str2_ptr[i] < 0) return 1; i++; } return 0; } }int my_strncmp(char* str1, char* str2, unsigned int loc) { int compare = 0; char st1[sizeof(str1)] = { 0, }; char st2[sizeof(str2)] = { 0, }; for (int i = 0; i < strlen(str1); i++) st1[i] = str1[i]; for (int i = 0; i < strlen(str2); i++) st2[i] = str2[i]; fit_str(st1, loc); fit_str(st2, loc); compare = my_strcmp(st1, st2); return compare; }
-
미해결실리콘밸리 데이터 리더가 알려주는 Airflow 기초
자료 다운로드 하면 링크가 모두 클릭이 안됨
자료 다운로드 하면 링크가 모두 클릭이 안됩니다.모든 강의 자료 PDF로 다운로드되며, 하이퍼링크처럼 표시만 되고 클릭 불가합니다. 링크는 다른곳에 따로 올리시는 걸까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
안녕하세요, 강사님덕분에 많은 인사이트를 얻으며 성장중인 수강생입니다ㅎㅎ 다름이 아니라 이벤트 페이로드 타입의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다! 빌더 패턴의 장점은 생성자 오버로딩이 많을 때, 간편하게 사용할 수 있다는 장점이 있지만 필수인 필드에 null 이 들어갈 수 있다는 단점이 있다고 생각합니다.그래서, 저는 빌더 패턴을 해당 객체의 필드 중 null 이 들어갈 수 있는 필드가 많을 때 사용하는 걸 선호하다 보니, 이벤트 페이로드 타입을 생성 할 때 일부 필드에 null 이 들어가는 걸까? 란 궁금증으로 질문이 생기게 되었습니다.빌더 패턴에 대한 강사님의 의견이 궁금하며 이벤트에 기존에 사용하신 팩토리 메서드 대신 빌더 패턴을 사용하신 계기가 궁금합니다!감사합니다 :)