묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결모던 안드로이드 - 코틀린과 Jetpack 활용
안녕하세요.
안녕하세요. 질문드릴게 있어서 글 올립니다.다름이 아니라 힐트 버전을 올리게 되면 Modlule에서 오류가 납니다. ※기존사용@Module@InstallIn(ApplicationComponent::class) 공식문서에서는 힐트버전이 업데이트(2.28.1이상) 되면 아래와 같이 사용해야 한다는데, 계속 에러가 나네요.관련 참고자료가 많이 없어 질문드립니다. ※공식문서 변경@Module@InstallIn(SingletonComponent::class)또는(ActivityComponent::class)현재 힐트버전implementation 'com.google.dagger:hilt-android:2.31-alpha'※에러내용error: [Hilt] @DefineComponent dagger.hilt.components.SingletonComponent is missing a parent declaration. Please declare the parent, for example: @DefineComponent(parent = ApplicationComponent.class) [Hilt] Processing did not complete. See error above for details.error: [Hilt] @DefineComponent dagger.hilt.components.SingletonComponent is missing a parent declaration. ---유튜브 강의를 듣다가 힐트 사용을 위해 본 강좌를 수강하게 되었으며, 바쁘시더라도 내용한번 검토하여 주시기 바랍니다. 항상 강의 감사히 잘 듣고 있습니다. 감사합니다.
-
미해결모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
Variable Scope 예제 3번
# Ex3 c = 40 def foobar(): # c = c + 10 # UnboundLocalError # c = 10 # c += 100 print('Ex3 > ', c) foobar() 이 코드에서 '# c = 10' 주석에 해당하는 부분은 오류가 생기지 않았고, Ex2와 동일한 부분인 것 같습니다. 항상 좋은 답변 감사드립니다.
-
미해결실전 리액트 프로그래밍
질문있습니다
//tileList : 초기값 배열 export function makeTile(tileList) { console.log(tileList); let tile; //타일이 없으면 만든다 //여기서 "undefined의 반대는 true " while (!tile || checkCollistion(tileList,tile)) { tile = { x: getRandomInteger(1, MAX_POS), y: getRandomInteger(1, MAX_POS), value: 2, }; } return tile; } 해당코드에서 타일 리스트를 찍어본결과로 값이 있는 tile로 매번 생성이되는데, 처음 초기화할때는 빈배열인 상태로 들어와야하는 거 아닌가요 ?
-
해결됨반응형 웹사이트 포트폴리오(Architecture Agency)
강의와는 다른내용이긴한데..
이 강의에서 제작한 작업물을 취업시 제 입맛에 맞게 조금씩 변경해서 포트폴리오에 사용하셔도 된다고 하셨는데 만약에 회사에서 이 포트폴리오를 직접 디자인 한거냐고 물어보면 어떻게하죠? 제가 디자인 능력이 좀 떨어지는데 포트폴리오 디자인을 보고 저의 디자인능력을 과대평가해서 고용했다가 저의 진짜 디자인 능력을 알고 실망할까봐 좀 걱정되네요.. 물론 디자인 공부를 하는게 베스트이겠지만 코딩만 공부해도 벅차네요
-
해결됨뉴욕 프로덕트 디자이너가 알려주는, 입문자를 위한 UX디자인 개론
UI 디자인 원리 - 과제
1) 유사성의 원리 위 네비게이션바 중앙 메인 배너( 강조하고 싶은 제품들) 상위 카테고리 영역 그리고 그 안에 있는 하위 제품들이 하나의 덩어리로 보여졌어요. 2) 근접성의 원리 컨텐츠들 사이에 여백과 함께 각 영역의 컨텐츠들이 가깝게 있어 이 제품을 누르면 해당 제품으로 넘어가겠구나 라는 생각을 했습니다. 3) 와디즈 사이트를 캡쳐한 이유가 이것 때문이기도 했는데요. 예로 휴라스틱 평가 1번째 시스템 상태 가시성 펀딩이 성공인지 실패인지를 사용자들이 한눈에 알아볼 수 있도록 상태 안내를 통해서 표현해줬더라구요. 4) CTA CTA의 경우 제품이 관심이 있어 눌렀을때, 펀딩하기 버튼이 브랜딩컬러로 들어가 눈에띄어서 이 제품이 마음에 들면 펀딩하기 버튼을 누르면 되구나 라는 생각이 들어 사용자로 하여금 다음단계를 어떻게 해야할지 학습시켜 주었습니다. +) 의도치 않았는데 저 하트 아래에 설명부분이 나오면서 안내 해주는 것이 나왔네요. 이건 휴라스틱의 6번째에 해당하는 부분인가요? 인식할 수 있도록 작은 상자를 써준 것 같다는 생각을 했네요. 5) 휴라스틱 평가 - 3번째 사용자 제어 및 자유 실수로 펀딩하기를 의도치 않게 눌렀을 경우 스토리로 다시 돌아 갈 수 있도록 exit 기능을 할 수 있는 버튼을 제공했더라구요. 언제든지 실수로 누른 것을 취소할 수 있는 기능인 것 같아 가져왔습니다.^^ 아쉬웠던 부분 메인페이지 메인 페이지에서 맨 위에 상단바로 이 사이트는 펀딩도할 수 있고 투자도 가능하구나, 스타트업 회사들의 정보도 알려주네? 그리고 더 정보가 궁금하면 더보기로 제공해준게 좋았고 (휴라스틱 8. 심미적이고 미니멀한 디자인) 기본 정보만 보여주고 더 보고싶으면 누를 수 있도록 해준 것이 마음에 들었다. 그다음 메인 배너로 제품을 소개해준거는 좋았는데 투자하는 내용도 넣어주면 어땟을까라는 생각을 했어요. 사용자 중에는 투자하기하는 사람이 한명이라도 있지 않을까 물론 대부분 펀딩하러 들어오겠지만요. 그리고 이프로젝트 어때요? 실시간랭킹 회원님이 좋아할 프로젝트 에서 글자가 차이가 나서 일관성이 보이지 않았는데요. 이게 의도적으로 제품이 아래 짤려서 보이지 않을까봐 일부러 좋아할 프로젝트는 줄였는지 모르겠지만 일관성이 느껴지지는 않았어요. 그리고 근접성으로 사이사이 간격 여백이 조금 좁다고 생각했어요. 안그래도 각각의 설명 정보가 많은데 여백을 조금 더 줘도 되지 않을까? 정보가 많아서 그 예시로 들어주셨던 디씨갤러리 처럼은 아니지만 조금만 더 띄어주면 어떨까 생각했어요. 메인 배너에서 휴라스틱 시스템 상태 가시성이 잘 사용되었네요. 좋아할 프로젝트 추천해줌으로써 인식하게 해줌으로써 제가 봤던 제품들을 바탕으로 추천해주는 부분이 6번에 해당하는 부분이라는 걸 알았습니다. 배운걸로 일단 여기까지는 알았는데.. 부족한 부분있으면 알려주세요!
-
미해결스프링 핵심 원리 - 기본편
Provider 관련해서 질문있습니다
그러면 clientBean1과 clientBean2는 같은 clientBean 객체를 사용(공유?)하고 있으나 각자 prototypeBean에 대한 의존관계 주입은 다르다고 이해하면 되나요??
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
연산자 == ===
js를 배웠을 때, ==라는 연산자도 있었던 것 같은데 ==와 ===의 차이가 있을까요?
-
미해결자바 기본을 위한 강의 1부
팩토리 질문입니다.
2 * factorial(1) =2 3 * factorial(2) =6 4 * factorial(3) =24 5 * factorial(4) =120 앞에 one 이 2 ->3 ->4 -> 5 로 어떻게 변화하는지 궁금합니다. ++ 기호가 들어간것도 아닌데요 . 스택개념으로 5 * factorial(4) =120가 마지막에 찍히는건 알고 있습니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
안녕하세요! 계속 이런 오류가 뜨는데 무슨 문제일까요 ? ㅜㅜ
리듀서 문제 인 것 같은데, 어떤 문제 때문에 생기는 걸까요 ? ㅠ [reducers - index.js] import { HYDRATE } from 'next-redux-wrapper'; import { combineReducers } from 'redux'; import user from './user'; import post from './post'; const rootReducer = combineReducers({ //서버 사이드 렌더링을 위해서 index를 한거다. index: (state = {}, action) => { switch (action.type) { case HYDRATE: console.log('HYDRATE', action); return {...state, ...action.payload}; default: return state; } }, user, post, }); export default rootReducer;
-
미해결Vue.js 시작하기 - Age of Vue.js
이벤트 전달에 관하여
$ emit을 이용하여 하위 컴포넌트에서 상위 컴포넌트로 이벤트를 전달할 수 있다고 말씀해주셨습니다. 그렇다면 반대로 전달될 수는 없는건가요? 상위 컴포넌트에서는 하위 컴포넌트로 이벤트를 전달하여 함수를 실행하도록 유도할 수는 없는건가요?
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
deprecated 워닝
실제 프로젝트 작업할 때는 deprecated 나는 라이브러리 관리는 어떻게 하나요?
-
미해결하울의 안드로이드 인스타그램 클론 만들기
상세화면 챕터 후 로그인 시 튕깁니다. 누구든 부탁드립니다. 도와주세요.
storage에 업로드하는 강의까지 아무 오류없이 로그인도 잘되고 잘됐습니다. 근데 이번 강의를 모두 작성한 후 로그인시 화면이 튕깁니다. 코드에 오류는 전혀 없고 3일동안 프로젝트랑 파이어베이스랑 전부 다 5번 지우고 다시 똑같이 따라써서 한글자도 하나의 설정도 틀린 것이 없습니다. 또한 하울님의 github 코드를 복붙해도 완전히 똑같은 오류가 납니다. Migrate to AndroidX , clean, rebuild, restart 백번했습니다. MainActivity.kt에 Oncreate에서 상세화면 페이지를 부르는 이 코드를 지우면 로그인을 해도 화면이 튕기지 않습니다. bottom_navigation.selectedItemId = R.id.action_home Run 창에 E/AndroidRuntime: FATAL EXCEPTION: grpc-default-executor-0 Process: com.example.jbstagram_try1, PID: 30258 java.lang.AssertionError at io.grpc.internal.DnsNameResolver.getResourceResolver(DnsNameResolver.java:536) at io.grpc.internal.DnsNameResolver.access$500(DnsNameResolver.java:60) at io.grpc.internal.DnsNameResolver$1.run(DnsNameResolver.java:211) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:764) 이 오류가 뜨면서 로그인시 메인화면이 뜨자마자 튕기며 제 DetailViewFragment.kt의 코드는 이렇습니다. package com.example.jbstagram_try1.navigationimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport androidx.fragment.app.Fragmentimport androidx.recyclerview.widget.LinearLayoutManagerimport androidx.recyclerview.widget.RecyclerViewimport com.bumptech.glide.Glideimport com.example.jbstagram_try1.Rimport com.example.jbstagram_try1.navigation.model.ContentDTOimport com.google.firebase.firestore.FirebaseFirestoreimport kotlinx.android.synthetic.main.item_detail.view.*import kotlinx.android.synthetic.main.fragment_detail.view.*//class DetailViewFragment : Fragment(){ var firestore : FirebaseFirestore? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { var view = LayoutInflater.from(activity).inflate(R.layout.fragment_detail,container,false) firestore = FirebaseFirestore.getInstance() view.detailviewfragment_recyclerview.adapter = DetailViewRecyclerViewAdapter() view.detailviewfragment_recyclerview.layoutManager = LinearLayoutManager(activity) return view } inner class DetailViewRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>(){ var contentDTOs : ArrayList<ContentDTO> = arrayListOf() var contentUidList : ArrayList<String> = arrayListOf() init { firestore?.collection("images")?.orderBy("timestamp")?.addSnapshotListener { querySnapshot, firebaseFirestoreException -> contentDTOs.clear() contentUidList.clear() for (snapshot in querySnapshot!!.documents){ var item = snapshot.toObject(ContentDTO::class.java) contentDTOs.add(item!!) contentUidList.add(snapshot.id) } notifyDataSetChanged() } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { var view = LayoutInflater.from(parent.context).inflate(R.layout.item_detail,parent,false) return CustomViewHolder(view) } inner class CustomViewHolder(view: View) : RecyclerView.ViewHolder(view) { } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { var viewholder = (holder as CustomViewHolder).itemView viewholder.detailviewitem_profile_textview.text = contentDTOs!![position].userId Glide.with(holder.itemView.context).load(contentDTOs!![position].imageUrl).into(viewholder.detailviewitem_imageview_content) viewholder.detailviewitem_explain_textview.text = contentDTOs!![position].explain viewholder.detailviewitem_favoritecounter_textview.text = "Likes" + contentDTOs!![position].favoriteCount Glide.with(holder.itemView.context).load(contentDTOs!![position].imageUrl).into(viewholder.detailviewitem_profile_image) } override fun getItemCount(): Int { return contentDTOs.size } }} 이건 MainActivity.kt 코드입니다. package com.example.jbstagram_try1import android.content.Intentimport android.content.pm.PackageManagerimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.view.MenuItemimport androidx.core.app.ActivityCompatimport androidx.core.content.ContextCompatimport com.example.jbstagram_try1.navigation.*import com.example.jbstagram_try1.Rimport com.example.jbstagram_try1.navigation.*import com.google.android.material.bottomnavigation.BottomNavigationViewimport kotlinx.android.synthetic.main.activity_main.*import java.util.jar.Manifestclass MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener { override fun onNavigationItemSelected(p0: MenuItem): Boolean { when (p0.itemId) { R.id.action_home -> { var detailViewFragment = DetailViewFragment() supportFragmentManager.beginTransaction() .replace(R.id.main_content, detailViewFragment).commit() return true } R.id.action_search -> { var gridFragment = GridFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, gridFragment) .commit() return true } R.id.action_add_photo -> { if (ContextCompat.checkSelfPermission( this, android.Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED ) { startActivity(Intent(this, AddPhotoActivity::class.java)) } return true } R.id.action_favorite_alarm -> { var alarmFragment = AlarmFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, alarmFragment) .commit() return true } R.id.action_account -> { var userFragment = UserFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, userFragment) .commit() return true } } return false } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) bottom_navigation.setOnNavigationItemSelectedListener(this) ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), 1) bottom_navigation.selectedItemId = R.id.action_home }}
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
안녕하세요. 저의 앞으로의 로드맵에대해 질문이있습니다.
좋은 양질의 강의를 제공해주셔서 정말 너무 감사합니다. 로드맵을 다시 수정하고있는데, 많은 도움이 되고있습니다. 저는 '자바와파이썬활용 빅데이터 개발자과정' 국비지원학원을 다니고있는데요. 강의에서 말씀해주신데로 너무 진도가 빨라서.. 다 흡수를 못하고 그냥 넘어가는 느낌이에요. 아시다피시 자바,jsp&servlet,html, ajax json, js 그리고 스프링 rest api 등 (자바와 jsp&servlet 말고는 정말 다시 다 공부해야될 것같습니다.) 저는 하루에 시간을 학원 9시간 뺀다고하면 적어도 5시간정도는 따로 복습을 한다던가 하고있는데요. 그냥 훑고 지나가는 느낌이고 안채워지는느낌이라서요... 현재 과정이 팀프로젝트 포함 2달쫌 넘게 남았거든요. 그래서 지금부터라도 알려주신 깃허브 포트폴리오 관리와 , 코딩테스트를 준비해서 취업전까지 꾸준히 하고, (여기서 중요) 원래계획은 국비과정이 끝나고, 2-3 달 정도 더 투자해서 배웠던거 정리도 할겸 개인프로젝트2-3개 만들어보면서 혼자 공부하고싶은데요. (취업했는데도 회사가 원하는 기능 구현에 너무 못하거나 민폐가될까봐 혹은 취업을 못할까봐 하는마음이 커서요. ) 예를들어 면접을 볼 때 학원끝나고 2-3달동안 뭐하셨어요? 하면.. 위에처럼 말하면 괜찮을까요? 아니면 , 그냥 바로 준비가 다 될수 없다는걸 아니까. 바로 취업 준비하는게 더 좋을까요? (저는 우선은 2-3달정도는 혼자 공부하고싶은 마음이 더 큽니다.) 혹시 이부분에 대해서는 어떻게 생각하시는지 조언을 구하고싶습니다. 머릿속이 복잡해서 너무 구구절절 늘어놓았네요. 바쁘실텐데 읽어주셔서 정말 감사합니다.
-
미해결Vue.js 시작하기 - Age of Vue.js
왜 hello world가 안나오는건가요?
(사진)
-
미해결Redux vs MobX (둘 다 배우자!)
함수형 액션 만드는거 질문이요 !
원래 액션 보통, export function updateCartInfo(cartInfo) { return { type: UPDATE_CART_INFO, payload: cartInfo } } 이런식으로 만들어서 쓰다가, 액션에서 axios사용하면서, 자연스럽게 async와 await를 붙여서 사용했었거든요, export async function loginUser(dataToSubmit) { const request = await axios.post('/api/user/login', dataToSubmit) .then(res => res.data ); return { type: LOGIN_USER, payload: request } } 그런데 이 수업을 듣고 의문이 생긴게 만약 제가 async와 await를 사용하지 않았었다면 함수형으로 만들었어야 비동기 처리가 되는건가요? 아니면 지금도 async와 await는 사용하고 있지만 내부적으로는 제대로 디스패치가 안되고 있는 걸까요? 설정은 const createStoreWithMiddleware = applyMiddleware( promiseMiddleware, ReduxThunk )(createStore); ReactDOM.render( <Provider store = {createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() )} > <BrowserRouter> <App /> </BrowserRouter> </Provider>, document.getElementById('root') ); 이렇게 해서 사용하고 있습니다. 저도 지금 머릿속이 막 헷갈려서 질문 내용을 잘 정리했는지 모르겠는데 ... 그러니까.. 1. 객체로 만들어 보낼땐 아무 문제 없음 ok 2. 그런데 액션안에서 axios를 쓰면서 비동기 고민을 하게 됨 3.ReduxThunk는 함수형을 비동기 처리해주는 미들웨어인데 나는 여태까지 객체를 리턴하고 있었음 4.그런데 나름 async와 await는 붙여서 사용함, 그러니 문제 없는 것인가???????? 5.만약 async와 await가 없었다면 함수형으로 만들었어야 문제없이 잘 데이터들이 들어가는것인가???? 질문이 두서없지만 답변 부탁드립니다...ㅜ_ㅜ
-
파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
강사님과 다르게 풀어봤는데 이 코드로 풀 수 있는 방법이 있을까요?
삭제된 글입니다
-
미해결시스템엔지니어가 알려주는 리눅스 실전편 Bash Shell Script
2-1강 vagrantfile 오타 & 설치 안 되는 부분 확인 부탁드립니다.
vagrantfile에서 cent1: dailog -> dialog로 수정 필요cent2: ip주소 10.18.1.92로 수정 필요.ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ cent1의 vagrantfile 실행시 nginx가 설치가 안되서 sudo dnf -y install stress sudo dnf -y install nginx // 이 부분 한줄 추가했습니다.cent2의 마리아디비 설치가 안 되서 #sudo dnf -y install MariaDB-server MariaDB-client MariaDB-backup --disablerepo=AppStream sudo dnf -y install mariadb-server --disablerepo=AppStream sudo dnf -y install mariadb-client --disablerepo=AppStream sudo dnf -y install mariadb-backup --disablerepo=AppStream이렇게 변경해 설치했습니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
제로초님
제가 제로초님 강의 들으면서 개인 포트폴리오(블로그형태)를 같이 진행하고있는데요 제로초님 다음달에 slack 클론코딩 강좌를 진행하신다고 들었습니다. slack 클론 코딩강좌에서는 백단을 nest typeorm mysql 쓰신다고하셔서 저도 개인 포폴의 백단은 그 강좌로 공부해서 nest typeorm으로 하려고 하는데요 앞단은 이 노드버드 강좌에 나온것처럼 react next redux styled-component antd로 되어있습니다. 백단을 노드버드 강좌와 다르게 express sequelize로 하지 않아도 크게 무리나 문제가 없을까요? 이번 강좌에서 redux로 데이터 관리할 때 sequelize 때문에 initialState에 대소문자를 구별한다고 하셔서 질문드립니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
int ch[10] 과 char a[101]
ch[10] 은 왜 int 이고 a[101]은 char 인가요 char a[101]은 한칸한칸에 숫자 넣으니 char 인건 이해가 가는데 int ch[10] 을 char ch[10] 해도 돌아가긴 돌아가는데 제가 너무 이상한거를 파고들며 공부하는건가요..?
-
해결됨프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
for 문을 이용한 구구단 작성 문의 - 흐름이 이해가 가지 않습니다.
Chapter 4-2에서 for 문을 이용한 구구단 작성하는 법 이 아래 처럼 나왔습니다. . for i in range (2, 10): for j in range (1, 10): print('{:4d}'.format(i*j), end = '') print() . 그런데 마지막 줄 print() 이 있고 없고가 차이가 큽니다.. 처음 세 줄만 돌리면 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 . . . print() 추가 하면 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 이렇게 나옵니다.. 왜 저렇게 되는지 알 수 있을까요...? . . 질문 하나더 print()을 들여쓰기 해서 for i in range (2, 10): for j in range (1, 10): print('{:4d}'.format(i*j), end = '') print() 이렇게 해서 돌리면 결과가 이렇게 나옵니다. . 2 4 6 8 10 12 14 16 왜 이렇게 되는지 잘 와닿지가 않습니다.. 설명 부탁드려도 될까요?