묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
뭘 하위타입으로 지정할수있다는건가요?
(사진)
-
미해결스프링 핵심 원리 - 기본편
혹시 지금까지 제가 이해한 내용이 올바른건지 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 💡 DI (Dependency Injection) - 의존관계 주입 의존하는 객체를 직접 생성하는 것이 아니라, 외부에서 생성한 후 주입하는 것. 3가지 조건이 필요 클래스 모델이나 코드에는 런타임(실행) 시점의 의존관계가 드러나지 않는다. (= 정적인 클래스 의존관계가 아니다)(= 동적인 객체 인스턴스 의존관계이다) => 인터페이스에만 의존하고 있어야 한다 런타임 시점의 의존관계는 외부에서 결정한다 외부에서 실제 구현 객체(사용할 오브젝트에 대한 레퍼런스)를 생성하고 클라이언트(사용할 오브젝트)에 전달(주입)함으로써 의존관계가 연결되는 것이다 예를 들어 private Car myCar = new 벤츠(); => Car가 인터페이스고 벤츠가 구현 객체라면, 런타임 이전에, 즉 코드상으로 벤츠 클래스를 의존하는 것을 알 수 있다 private Car myCar; => 이러면 Car에 대해 무슨 차가 들어올지 알 수 없다.(런타임 시점의 의존관계가 드러나지 않으므로) => 즉 이렇게 인터페이스에만 의존하고 의존관계 주입이 발생할 수 있다. 💡 IoC (Inversion of Control) - 제어의 역전 프로그램의 제어 흐름(ex:메소드나 객체의 호출작업)을 개발자가 결정하는 것이 아니라, 외부에서 결정(관리)하는 것. 즉 객체를 개발자가 Member member = new Member(); 이런식으로 만드는 것이 아니라, 스프링이 스스로 객체를 생성해서, 필요한 곳에 사용할 수 있게 해줌! 1 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); cs 위 코드 단 하나만 실행했을 뿐인데, 우리는 ac.getBean을 통해, 원하는 객체를 사용할 수 있음!!!!! 참고로 DI도 제어의 역전에 포함되는 기술이며, IoC는 좀더 광범위하게 쓰인다! 🧾 부분 정리 스프링은 IoC, DI와 같은 기술을 사용함으로써 자바만으로는 DIP(의존관계 역전 원칙)와 OCP(계방-폐쇠 원칙)을 지켜가며 객체지향적으로 설계하는데 어려움이 있었는데, 이를 해결. 즉 스프링을 사용하면 좋은 객체 지향 애플리케이션을 개발하기 편해지며, 스프링은 이를 도와주는 프레임워크. 스프링이 좋은 객체 지향 애플리케이션을 개발하는데 도움을 주는 프레임워크인 것 처럼, 스프링 부트는 스프링의 기술들을 좀 더 편리하게 사용하는데 도움을 주는 프레임워크. 제가 정리한 내용들인데, 혹시 맞게 이해한건지요.. 너무 어려워서 여러차례 강의 반복하여 들으며 정리했습니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Service 클래스에 대해 궁금합니다.
Service 클래스를 ClientService와 ServerService로 역할을 나누는 의도는 강사님의 친절한 설명덕에 이해했으나, Service안에 있는 netAddress, IocpCore와 CreateSessionFunc 변수 같은 멤버들을 그냥 Listener안에 넣어두고 생성자로 ServerService를 초기화하는 것처럼 초기화 한 후에, GameServer에서 Listener로 바로 StartAccept 하는 식으로 사용 하는 것은 비추천 하시는지 여쭤보고 싶습니다. 또한 Session도 ClientService을 사용하지않고, 클라이언트에서 ServerSession 객체를 만들어서 생성자에 IocpCore 등을 넣어서 초기화 후에 그냥 바로 DummyClient에서 ServerSession->Connect()를 하는 방안 또한 잘 못된 것인지 여쭤보고 싶습니다.
-
미해결스프링 핵심 원리 - 기본편
Member는 스프링빈이 아닌데 왜 setnoBean2,3은 호출이 되는건가요?
@Nullable인경우와 Optional<Member>인 경우는 예외로 스프링빈으로 등록되어있지 않더라도 메서드를 실행시켜주는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 직렬화 부분
▶ 패킷 구조를 다음과 같이 만들었습니다. ▶ 강의에서는 C_PlayerInfoReq클래스 List용 내부클래스에 매개변수로 string이나 byte를 사용하지 않아서 한번 넣어서 사용해 봤습니다. ▶ 그런데 string이나 byte는 write 자동화 부분을 만들때 ArraySegment<byte> Segment를 사용하여 이렇게 만들고 있는데 List용 write메서드는 매개변수로 Span만을 받아서 사용하고 있더라구요 ▶ 그래서 그냥 ArraySegment<byte>로 매개변수를 통일하고 그안에서 다시 Span변수를 만들고 사용하고 있습니다. ↓ ▶ 일단 작동하는 데에는 문제가 없는듯한데 string의 길이를 받아오는 부분을 Span을 사용해서 만들 수 있을까요? (마지막 이미지의 마지막줄 부분) 감사합니다.
-
미해결기술적 분석 어디까지 알아보고 왔니?
다들 하시길래... 저도 강의 교재 부탁드려봅니다
greenbeatle@naver.com 으로 강의 교재 부탁드려봅니다...??
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
버퍼와 스트림의 차이
버퍼가 일정한 크기로 모아뒀다가 다 채워지면 전송하는 방식이고, 스트림은 일정한 크기의 데이터를 지속적으로 전달하는 방식이라고 이해했습니다. 그렇다면, 버퍼의 크기를 작게하면 스트림의 기능을 하고 스트림의 highWaterMark를 크게하면 버퍼와 같은 기능을 하는건가요??
-
미해결iOS AutoLayout 완벽 가이드 - 실무 프로젝트를 위한 실전강의
Calc_StackView_1에서 equal Widths 질문이요
안녕하세요. 강의를 따라하던중 안되는 부분이 있어서 질문드립니다. 하단 오른쪽 버튼을 위쪽 버튼과 equal Widths했는데 크기가 안변하네요...윗쪽은 "="표시가 있는데 아래쪽은 표시가 없습니다... 몇번을 지웠다해도 똑같은 현상이네요. 왜 그럴까요???
-
해결됨iOS SwiftUI AR 증강현실
질문 드립니다.
https://drive.google.com/file/d/17TZ5oyKx1O81byrwC4XHzO8guNewWIsz/view?usp=sharing *설명이 어려울 것 같아 해당 프로젝트 파일 링크로 첨부했습니다. 너무 모호한 질문인 것 같아 며칠 고민하다가 질문 드립니다... [3D 모델 실제 환경에 위치 시키기] 강의와 [얼굴 인식하여 모델 위치 시키기] 강의를 종합해 프로젝트를 만들고자 합니다. 스크롤 뷰에서 버튼을 눌렀을 때 3D 모델이 불러와지지 않는데 어떻게 고쳐야 제대로 실행이 될지 잘 모르겠습니다. 확인 후 답변 주시면 감사하겠습니다.
-
미해결PHP 7+ 프로그래밍: 객체지향
똑같이 실습을 같이 하고 싶은데...
VScode 사용중 터미널 창이.. 일단.. 다른것은 이해하겠는데요. 결과화면을 강사님은 직접 확인할수 있는거 같은데.. 똑같이 실행결과 화면을 보려면 어떻게 vscode를 세팅해야 하나요? 이런부분이 사전에 따로 설명이 없으니.. 실습을 직접하면서 코딩을 해보려면.. 답답한 부분이 좀 있습니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Vitis설치
Vitis Install중 Final Processing... Optimize Disk Usage에서 멈춰 있는데 진행되는건가요? 너무 오래동안 진행이 되지 않습니다.
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 가 아닌 백앤드 통신 방식 문의
강의 잘듣고 있습니다. 궁금한 점이 강의 내용은 파이어베이스 를 이용해서 구현 하고 있는데 파이어 베이스를 사용안하고 인증이나 DB(Oracle) 같은 것 백앤드 구성했다 치고 앱개발 하려면 데이터 통신 이나 인증은 어떤 방식으로 하나요? 앱개발은 처음이라 문의 드립니다. * 추가로 파이어 베이스 가 아닌 인증과 DB 구현해서 앱개발하는 강좌 오픈하실 생각은 있으신가요 ?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
EntityManager, 트랜잭션, 쓰레드풀 사이의 관계 및 작동순서에 대해 질문드립니다.
안녕하세요! 제가 이해한 내용을 간단하게 설명하고, 궁금한 점을 여쭤보고 싶어요. 지적과 답변 해주시면 감사하겠습니다. 1. EntityManager는 트랜잭션 단위로 생성됐다가 반환(삭제)됩니다. 2. 사용자의 요청 1개에 대해 1개의 트랜잭션을 사용합니다. 3. 1과 2의 내용으로 짐작해보면, 사용자로부터 N개의 (DB접근이 필요한) 요청이 들어왔을 때, "EntityManager 생성 -> 트랜잭션 시작 -> 트랜잭션 커밋 -> EntityManager 종료" 과정을 N번 반복하는 것이 맞나요? 또한 이 과정이 톰캣 내부 쓰레드 풀의 쓰레드 1개를 꺼내와서 실행한 후 요청이 끝나면 반납하는 형식이 맞나요? 영한님, 서포터즈님들 감사합니다.
-
미해결Svelte 입문 강의 - A부터 Z까지
컴포넌트 이벤트
강의내용에 보면 Parent.svelte 파일에서 dispatch('message', event.text) 라고 되어있는데 event 객체에서 detail에 {text: hello}가 담겨있으니 dispatch('message', event.detail)로 App.svelte에 넘겨주는게 맞는것 아닌가요? 이 부분이 헷갈리네요
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
파일로드관련
안녕하세요. 강의 잘보고 있습니다. 가르쳐주신대로 해보는중인데 파일로드가 제대로 안된것같은데 어떤점이 잘못된건지 궁급합니다..
-
미해결스프링 핵심 원리 - 기본편
ThreadLocal 사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 StatefulService에서 ThreadLocal을 어떻게 사용해야 할지 여쭤봐도 될까요..? 혼자서 해보니까 안되서요..! 쓰는법을 잘 모르겠어요..!
-
미해결홍정모의 따라하며 배우는 C++
cout<<mon 질문
#include "monster.h" using namespace std; int main(int argc, const char * argv[]) { Monster mon1("sanson",position2D(0,0)); cout<<mon1<<endl; mon1.moveTo(position2D(1,1)); cout<<mon1<<endl; return 0; } 지금과 같이 cout<<mon1할때 location의 멤버변수들이 다 출력되는 것이 궁금합니다. mon1의 friend std::ostream& operator << (std::ostream &out, const Monster& mon){ //out << mon.m_name << " " << mon.m_x << " " << mon.m_y << std::endl; out<<mon.m_name<<" "<<mon.m_location<<std::endl; return out; }를 보면 m_location을 출력시키는 거잔항요 location을 출력하면 location의 멤버변수도 출력된다는게 어디있는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷조립순서
강의도 보고 다른분들 질문도 보고 있습니다. void RegisterRecv() { _recvBuffer.Clean(); ArraySegment<byte> segment = _recvBuffer.WriteSegment; _recvArgs.SetBuffer(segment.Array, segment.Offset, segment.Count); ... } 불완전한 패킷은 조립가능할때까지 기다렸다가 조립해서 해석하는 것까지는 알겠는데, 어디서 모아놓는지 헷갈려서 복습을 하면서 찾아보았습니다.위의 RegisterRecv메소드의 _recvArgs.SetBuffer에서 Recv데이터를 모아놓는게 맞나요?①여기서 처리가능하면 처리후 _recvBuffer.Clean()을 통해 위치를 처음으로 돌려주고 ②처리가 불가능하다면 계속 기다리다가 다음 패킷이 오면 현재의 _readPos, _writePos 기준으로 다음 데이터를 받아서 처리- 맞게 이해했을까요? 그리고 만약에지금 RecvBuffer의 크기가 1024인데 800짜리 패킷이 400만 도착해서 대기중입니다.그때 다음 패킷이 잘린 400+새 패킷 800 해서 1200이 들어와 버리면 => 400짜리 패킷(a-1)+400짜리 패킷(a-2)+800짜리 새 패킷(b)이렇게 될텐데,1024를 넘어 버리게 들어오면 어떻게 되나요? 애초에 이렇게 들어올 수 있을지는 모르겠지만;;(잘린 패킷이 다음패킷에 붙어서 올수가 없나요?)
-
미해결스프링 핵심 원리 - 기본편
@Component는 구현체에만 붙인다?
인터페이스에는 안붙이고 구현체에만 @Component를 붙이는 이유는뭔가요?
-
미해결웹 게임을 만들며 배우는 React
hooks에서 state가 변하게 되면 리렌더링되는 부분 질문 있습니다!
강의 정말 잘 듣고 있는 수강생입니다!!! 로또 추첨기 부분을 들으며 궁금한 부분이 있어 질문 드립니다! 다음 캡처 화면에서, winBalls의 이전 state 값을 바탕으로 하나씩 추가해 나갈 때마다 전체 코드(렌더링부터 함수 선언문까지)가 다시 실행되는 문제가 hooks에서 발생하는 것은 이해했습니다(아직 최적화를 진행하지 않은 시점입니다). 그래서 실제로 위의 getWinNumbers 함수가 불필요하게 실행이 되는 것을 콘솔을 통해 확인할 수 있었습니다. 문제는 여기서 궁금한게, state 선언문의 const [winNumbers, setWinNumbers] = useState(getWinNumbers()); 가 다시 실행이 되는 데에 있는데요, 기존 처음의 winNumbers 배열을 가지고서 setTimeout을 이용해 하나 하나 6개까지 push를 하고 있는 상황인데, push를 하면서 state 변경을 감지해 다시 const [winNumbers, setWinNumbers] = useState(getWinNumbers()); 가 실행되어 버리면 셔플된 배열을 다시 winNumbers가 갖게 되는 상황이 생기게 되는 것 아닌가요?! 예를 들어, 처음 winNumbers 배열이 [1, 2, 3, 4, 5, 6 ... ] 이렇게 되어 있었다 가정하면, winBalls state 변수에 1을 push한 후에 (for문의 i는 0) 변경을 감지하여 다시 const [winNumbers, setWinNumbers] = useState(getWinNumbers()); 가 실행되어 winNumbers가 [2, 1, 3, 4, 5, 6 ...] 이런 배열을 갖게 된다면 for문의 i=1에서 이전과 똑같은 1을 push하게 되어 중복이 발생하지 않을까요? 하지만 그런 문제는 일어나지 않고 있긴 합니다. 왜 그런지 이유를 잘 모르겠습니다 ㅠㅠ