묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
NetworkManager의 tokenHeader 관련 질문 드립니다!
안녕하세요, 덤벨로퍼님! 좋은 강의 감사드립니다!덕분에 좋은 코드 많이 보고 배울 수 있었습니다. 복습 중에 API 헤더 관련해서 궁금한 점이 있어 질문드려요. 강의에서는 API에서 필요로 하는 헤더를 NetworkManager 클래스에서 정의하고 사용하고 있습니다. 규모가 있는 앱에서는 API가 많고 서로 다른 헤더를 필요로 할 거라고 예상이 되는데 NetworkManagerProtocol의 'fetchData()' 메서드에서 파라미터로 헤더를 같이 받아오는 것이 효율적인지 궁금합니다. userNetwork의 'fetchUser()' 메서드 내에서 url과 header를 같이 생성하고 networkManager의 메서드 파라미터로 넘겨주는 방법이 괜찮은 방법일까요?
-
해결됨오브젝트 - 기초편
5-4- 예제. 애플리케이션 객체 추가하기 강의내용 관련 질문이 있습니다. (DAO)
안녕하세요 🙂 5-4- 예제. 애플리케이션 객체 추가하기 강의내용 관련 질문이 있습니다. (DAO) 관련 예제 소스(https://github.com/eternity-oop/object-basic-05-04) 내에 보면 service 패키지에는 xxxDAO 인터페이스가 존재하고persistence 패키지 내에는 xxxDAO 의 구현체 (xxxJbcDAO 클래스)들이 존재하는것을 확인하였는데요 이렇게 service 패키지 및 persistence 패키지 로 분리한것이의존성을 제거하기 위함이라는 내용을 다른 질문내용으로 확인하였습니다 (https://www.inflearn.com/community/questions/1355997) 관련하여 이렇게 분리함으로써 service 패키지 내의 서비스 클래스는 DAO 의 역할만 확인하도록 하고 이에 대한 내부 구현은 신경안쓰겠다 라는것으로 이해하면 될까요 ? (역할 책임 분리)
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
closed 사용하는 이유
NormalCloseServer 할때 close()가 여러번 호출돼도 예방하는 코드가 있다고 했습니다. 그러면 V6SessionV6에서 closeAll() 하기전에 closed를 확인 안해도 되지 않나요?
-
미해결김영한의 실전 자바 - 중급 1편
강의 자료 그림
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 ~!강의 자료에서 처럼 이런 자료들을draw.io에서 만든다는 정보는 찾았는데요 !그 내부에서 어떤 템플릿을 사용하시는지 궁금합니다..!몇 시간 동안 여러가지 클릭 해봤는데 못 찾아서요 ㅠㅠ 크래파스로 그은듯한 네모와점선으로 연결된 화살표, dot 네모박스가 궁금합니다 !
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
[클린 아키텍쳐] 로컬 Json 파싱
안녕하세요! 클린 아키텍쳐 관련 질문있습니다.API 통신이 아니라 로컬에 저장된 json 파일에서 앱 실행시 한번 FileManager로 파싱하고자 하는데, 클린 아키텍쳐 구조로 진행하려면 어떤 구조로 될까요? Domain > Entity 영역에 City 모델을 만든 상태입니다.기능은 크게 2가지로 load하고 search하는 기능이 있습니다. load 한 이후에는 변수를 통해 search하면 되서 search는 뷰 모델에 정의하는게 맞는지, load의 경우 UseCaseProtocol 로 해야하는지 어떤 방식이 적합한지 여쭤봅니다. 추가로 API 통신하는 경우에도 로딩한 후 모델로 가공해서 보여주는 기능만 있는데, 그럴 경우에는 어떻게 진행하는걸 추천하시나요? API 로 선택한 항목에 대한 정보를 로딩하고 데이터 가공해서 UI에 보여주는 경우입니다.. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
컨테이너에 등록된 모든 빈 조회 질문
ROLE_ APPLICATION으로 등록한 빈만 출력했는데 ROLE_INFRASTRUCTURE 의 결과가 나옵니다김영한 강사님은 bean에 직접등록한 아래 5줄만 출력이 됩니다. 저는 왜 추가로 위에 5줄이 뜨는건지 궁금합니다ㅠㅠ
-
미해결김영한의 실전 자바 - 중급 2편
stack구조관련질문
package collection.deque.test.stack; import java.util.ArrayDeque; import java.util.Deque; public class BrowserHistory { private Deque<String> history = new ArrayDeque<>(); private String currentPage = null; public void visitPage(String s) { if(currentPage != null){ history.push(currentPage); } currentPage = s; System.out.println("방문 : "+s); } @Override public String toString() { return "BrowserHistory{" + "stack=" + history + '}'; } public String goBack() { if(!history.isEmpty()){ currentPage = history.pop(); System.out.println("뒤로가기 : "+currentPage); return currentPage; } return null; } public void pop(){ System.out.println(history.pop()); } } 문제와풀이3 -stack시간 수업에관한 질문입니다 stack구조의 경우 마지막에 넣은 입력이 pop()을 하면 나오는데 이경우는 마지막 전에 입력한것이 나옵니다 이유가뭘까요??
-
미해결김영한의 실전 자바 - 중급 2편
컬렉션프레임워크 Stack 관련질문
package collection.deque.test.stack; import java.util.ArrayDeque; import java.util.Deque; public class BrowserHistory { private Deque<String> history = new ArrayDeque<>(); private String currentPage = null; public void visitPage(String s) { if(currentPage != null){ history.push(currentPage); } currentPage = s; System.out.println("방문 : "+s); } @Override public String toString() { return "BrowserHistory{" + "stack=" + history + '}'; } public String goBack() { if(!history.isEmpty()){ currentPage = history.pop(); System.out.println("뒤로가기 : "+currentPage); return currentPage; } return null; } } ////////////////////// package collection.deque.test.stack; public class BrowserHistoryTest { public static void main(String[] args) { BrowserHistory browser = new BrowserHistory(); // 사용자가 웹페이지를 방문하는 시나리오 browser.visitPage("youtube.com"); browser.visitPage("google.com"); browser.visitPage("facebook.com"); // 뒤로 가기 기능을 사용하는 시나리오 String currentPage1 = browser.goBack(); System.out.println("currentPage1 = " + currentPage1); String currentPage2 = browser.goBack(); System.out.println("currentPage2 = " + currentPage2); System.out.println(browser); } } 위의 goBack 메서드 실행코드가 Pop()인데 currentPage1 에서 facebook이 출력이되지않고 google이 출력되는 이유가 궁금합니다 스택구조는 마지막에 입력한것이 나오게 되어있는데 그 전에 입력한것이 왜 나오는 이유가 궁금합니다
-
해결됨오브젝트 - 기초편
ReservationService 구현에서 SRP에 대해서 질문이 있습니다.
안녕하세요. 좋은 강의 만들어주셔서 감사합니다.강의를 보다가 마침 평소에 고민하던 내용이 있어서 질문 드리게 됐습니다. 5-4. 애플리케이션 객체 추가하기 강의를 보던 중 외부에서 직접적으로 각각의 도메인을 호출하지 않고 ReservationService를 만들고 외부에서는 reserveScreening()를 호출해서 예약을 하는거로 이해했습니다. reserveScreening()에서 customer 조회, screening 조회, 예약 등록 등의 작업을 하고 있는데 이 경우에 SRP를 위반하는게 아닌가 하는 의문이 있었습니다.헷갈리는 부분은 함수 하나에 여러 가지 동작이 있고 변경 될 여지가 많으니까 SRP에 위반 되는게 아닌가? 싶다가도 ‘예약을 하는 하나의 역할’이니까 SRP를 위반하는게 아니지 않나? 라는 생각으로 머리속에서 빙글빙글 돌고 있습니다. 평소 개발을 할 때 Service layer의 역할에 대해서 애매한 부분이 많았는데 SRP를 준수하려고 하나의 기능만 넣어야 된다고 생각하면서 개발을 하다보면 Controller의 역할이 많아지고 Service는 깔끔해졌지만 막상 보면 Service에서 하나의 기능을 구현한다기보다는 각각의 Service의 함수를 Controller에서 조합 해야 사용할 수 있고 비즈니스 로직을 Controller에서 파악할 수 있는 등의 문제가 있었습니다. reserveScreening()의 역할처럼 어떤 범위까지가 Service 하나하나의 기능으로 정의하는게 맞는지 궁금합니다. 또 다른 고민은 Respository에서 데이터를 조회할 때 Controller에서 Repository를 바로 조회하지 않도록 항상 Controller->Service->Repository의 순서로 호출을 하려고 하다보니까 간단하게 id로 데이터를 조회할 때에도 Service에 함수를 생성하고 함수 내부에는 Repository를 호출해서 그대로 return 하는 정도의 함수를 생성하게 되는데 이런 역할도 Service에서 가지고 가는게 맞는지 궁금합니다. 조금 추상적인 질문이 될 수도 있을 것 같은데 영호님이 생각하시는 Service layer의 역할에 대해서도 조금 알려주시면 좋을 것 같습니다. 다시한번 좋은 강의 만들어주셔서 감사하고 다음 강의 기다리고 있겠습니다.감사합니다!
-
해결됨남박사의 파이썬으로 봇 만들기 with ChatGPT
한국 수출입 은행 API 가져올시 오류 발생
Requests 모듈을 이용하여 HTTPS 사이트 방문시 나타나는 오류인거 같아 r = requests.get(url, verify=False) 위와같이 verify=False 를 추가해줘야 오류를 무시하고 가져오는것으로 보입니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
BlockingQueue의 offer, poll 질문 드립니다.
안녕하세요! 너무 알찬강의 잘 듣고 있습니다! 강의에서 BlockingQueue의 offer와 poll은 일정시간만큼 대기하신다고 하셨는데요,이때 이들이 기다리는 영역은 어디가 되는건가요..?ReentrantLock을 획득하기 위한 대기wait()을 위한 대기 아니면 그 어느것도 상관없이 항상 대기 Queue가 된 후 2초인걸까요?! 그리고 만약 어떤 상황이든 2초만을 기다리고 종료시키는 방법이라면, Lock을 획득하고, 생산자나 소비자가 무언가 데이터를 처리하는 과정에서 2초가 지났을 때 이 작업을 강제 종료해 버리면 동일하게 동시성 문제가 발생할 수 있지 않을까요?(실제 처리하지 않았지만 실패로 결과가 나타난다던가..)
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
싱글턴 적용된 클래스가 현재 씬을 재로드하면 이상해요
싱글턴이 적용된 클래스는 사라지지 않고또 한 개만 존재해야 할 텐데가끔식 씬을 재로드시 한 개가 더 생깁니다
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
Executor 스레드 풀 관리 - 분석 에서 BlockingQueue
1. 강의 내용과 관련된 질문인가요?예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]쓰레드 풀 core사이즈와 max사이즈가 어떻게 관리 되는지는 어느정도 이해한 것 같은데, 이 예제에서 BlockingQueue안에서 쓰레드들이 스레드 대기 집합, 락 대기 집합에 어떻게 관리되는 것 까지 이해해보려고 하니 매우 어렵네요..ai야 도와줘~!
-
해결됨김영한의 실전 자바 - 중급 1편
LocalDateTime.now() 관련해서 질문있습니다
LocalDateTime.now()로 현재 시간을 출력하면 소수점 아래 단위는 9자리(ns)까지 출력이 됐습니다. 근데 Windows에서 시스템 시계(?) 클럭(?)의 정밀도는 ms까지 보장한다고 알고 있는데 LocalDateTime.now()의 정밀도는 ns(소수점 아래 9자리)까지 보장하나요 ms(소수점 아래 3자리)까지 보장하나요??
-
미해결김영한의 실전 자바 - 기본편
스택 영역과 힙 영역 강의 내용 중 질문이 있습니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. package memory; public class JavaMemoryMain2 { public static void main(String[] args) { System.out.println("main start"); method1(); System.out.println("main end"); } static void method1() { System.out.println("method1 start"); Data data1 = new Data(10); method2(data1); System.out.println("method1 end"); } static void method2(Data data2) { System.out.println("method2 start"); System.out.println("data.value=" + data2.getValue()); System.out.println("method2 end"); }} 다음과 같은 코드로 자바 프로그램을 1번 실행했다가 종료하면, 강의 내용에선 x001(예를 들어서) 참조값을 가진 Data 인스턴스를 참조하는 곳이 더이상 없기에 GC의 제거 대상이 된다고 하셨는데요,그렇다면 어떤 자바 프로그램이든 한 번 실행했다가 종료된 직후에는 자바 메모리 힙 영역에 한 번 실행될 때 사용했던 객체들이 남아있게 되고 전부 참조하는 곳이 더 이상 없기에 전부 GC의 제거 대상이 된다고 생각하면 될까요? 마치 콘서트 한 번 진행하고 나서 발생한 쓰레기들을 청소한다고 생각하면 될지 궁금해서 여쭤봅니다~
-
미해결김영한의 실전 자바 - 중급 2편
변수 작명하신 부분에 궁금증이 있습니다!
<섹션 2 - 제네릭이 필요한 이유>부분인데요. IntegerBox 클래스는 set 메서드에 변수가 value로 작명 되어있습니다. 그러나,StringBox 클래스는 set 메서드에 변수가 object로 작명 되어 있습니다.StringBox에 set 함수 매개변수에, String str이 아니라, String object라고 하신 이유가 혹시 있는걸까요? String str이라고 해도 물론 되겠지만, 혹시 "String object"로 매개변수를 받도록 하신 특별한 의도가 있는건가 싶어서요.
-
미해결스프링 핵심 원리 - 기본편
충돌문제 강의실습과 다른 결과가 나타납니다.
06:03 부터 @SpringBootApplication어노테이션으로 스프링구동을 진행함으로서앞서 AutoAppConfigTest 를 했을 때 replace되어 정상구동되는 현상과 반대되는 결과를 보여주시고 계십니다. 스프링부트는 오류를 발생시키는 것을 저도 똑같이 확인하기 위해 실습을 했는데요. 결과메세지가 달랐습니다. Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\Users\eh\Desktop\Source\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]강의에서는 AutoAppConfig에 작성한 수동빈과 @Compoent로 등록된 자동빈의 충돌을 다뤘으나, 저의 경우 AppConfig가 등장했습니다. 강사님도 AppConfig를 건들지 않으신것으로 알고있습니다. 다음과 같습니다.@Configuration public class AppConfig { public AppConfig() { System.out.println("AppConfig 생성자호출"); } // 서비스단 @Bean public MemberService memberService(){ System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ System.out.println("call AppConfig.orderService"); return new OrderServiceImpl( memberRepository(), discountPolicy()); } // Repository @Bean public MemberRepository memberRepository(){ System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy(){ System.out.println("call AppConfig.discountPolicy"); return new RateDiscountPolicy();//return new FixDiscountPolicy(); } } 다음은 자동구성입니다.@ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { public AutoAppConfig() { System.out.println("AutoAppConfig의 생성자호출"); } // [수동빈등록] // 자동등록 된 빈과 충돌이 발생하지 않으며 아래 수동등록 빈으로 덮어써짐 @Bean(name = "memoryMemberRepository") public MemberRepository memberRepository() { return new MemoryMemberRepository(); } }@Component public class MemoryMemberRepository implements MemberRepository{...} 총 3개의 코드가 충돌을 일으킬 후보를 추려봤습니다.AppConfig의 MemberRepository 수동등록 코드(name = "memberRepository")AutoAppConfig의 MemberRepository 수동등록 코드(name = "memoryMemberRepository")MemoryMemberRepository 자동등록 코드(name = "memoryMemberRepository") 강사님은 2,3이 충돌했는데저는 왜 1,3이 충돌한 걸까요ㅠㅠ
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
확장 프로퍼티 질문
안녕하세요, 확장 프로퍼티 관련하여 질문이 있습니다! 확장 프로퍼티를 생성자에 추가하는건 어려운 것 같고 내부프로퍼티로 활용하는 정도로 사용하는 것 같은데..이렇다면 확장 프로퍼티를 주로 사용하는게 isAdult같은 특정 프로퍼티를 이용해 새로운 값을 반환해주는 용도의 프로퍼티를 만드는것 위주로 사용하게 될까요?? 사용처가 와닿는게 없어서 실무에서 사용하는경우가 어떤게 있는지 알려주시면 감사하겠습니다!그리고 추가로 제가 KMan이라는 Person을 상속받는 클래스를 임의로 만들어서 거기에 test2라는 확장 프로퍼티를 만들었는데요,코드를 찍어보니 아래처럼 KMan에 받아온 value를 대입해주는 것 같은데 KMan이라는 클래스에는 test2라는 프로퍼티가 선언되있는게 없으니 역시나 에러가 나더라구요커스텀 프로퍼티에서 setter를 만들 수 있는건 그냥 ide에서 대응을 못할 뿐 사실상 불가능한게 맞는건가요? @_@.. public static final void setTest2(@NotNull KMan $this$test2, @NotNull String value) { Intrinsics.checkNotNullParameter($this$test2, "<this>"); Intrinsics.checkNotNullParameter(value, "value"); setTest2($this$test2, value); }
-
미해결김영한의 실전 자바 - 기본편
자바 메모리 구조 관련 질문입니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. "자바 메모리 구조"라는 게, 자바 프로그램이 실행될 때 JVM이라는 가상 컴퓨터에서 항상 실행되고, 그 컴퓨터의 메모리 구조가 메서드영역 / 스택 영역 / 힙 영역 이렇게 구분된다고 받아드리면 될까요?그러면 이 JVM은 실제 컴퓨터의 물리적인 메모리의 일부를 할당받아서 사용한다고 보면 될까요?그리고 실제 컴퓨터의 메모리는 메서드영역 / 스택 영역 / 힙 영역 이렇게 구분되는 건 아닌거라고 생각하면 될까요?
-
미해결김영한의 실전 자바 - 중급 2편
arrayList 다운 캐스팅 오버헤드에 대한 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 영한님 강의 잘 수강하고 있습니다 😀 수강중 한가지 궁금한 점이 생겨 질문드립니다.arrayList에서 제너릭을 사용시 타입 이레이지에 의해 컴파일시 Obejct로 타입이 변경된다고 알고 있습니다. 당연히 그과정에서 값을 꺼내면 (예를들어 String을 꺼낸다고 가정) Object -> String으로 다운 캐스팅이 되어야 한다고 이해하고 있습니다.이렇게 되면 개발자의 의도와 다른 다운 캐스팅이 발생하게 되고 이런 캐스팅은 리스트와 같은 복수개의 데이터를 다루는 컬렉션에서 오버헤드를 크게 발생시킬수도 있겠다는 생각을 하게 되었습니다. 혹시 이러한 질문에 대한 내용이 맞는지와 맞다면 어떤방식으로 개선할 수 있을지 의견을 구할 수 있을까요??