묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨C개발자를 위한 최소한의 C++
C++ 파일 구조 질문
헤더1개 Cpp파일 1개 코드를 여러 개의 파일로 모듈화하는 방법에 대해 질문드립니다.함수 모듈화, 헤더파일 디자인, 파일 구조 설계, 순환참조 방지 등에 대한 지식이 없어서 어떻게 파일을 속성에 따라 나누고, include해야 원래 코드와 동일하게 동작하게 만들 수 있는지 모르겠습니다. gpt 한테물어보니 디자인패턴을 공부하라고 하는데, 디자인 패턴은 이미 파일 구조가 짜여진 내에서 클래스를 세분화하거나 코드 재사용성을 위한 상속에 관한 내용 같았습니다. 위 경우 어떤 내용을 공부하거나 참고하면 좋을까요? 정말 고민되어서 여쭤봅니다. ㅎㅎ
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
signal을 받은 스레드의 대기큐에서 우선순위
안녕하세요 영한님. 스레드의 대기 강의에서 질문이 있습니다. BoundedQueueV5를 사용하여 [소비자 먼저 실행] 때 질문입니다. 제가 이해한 것을 쭉 요약해볼테니 어디에서 틀렸는지, 왜 아닌지 답변을 부탁드립니다. ReentrantLock을 사용하게 되면 대기 큐와 producerCond, consumerCond가 있습니다. 소비자1,2,3은 현재 consumerCond에 있는 상황이고 이제 [생산자 시작]으로 넘어가게 됩니다. 생산자1이 락을 획득하였다고 가정하겠습니다. 그럼 생산자1이 락을 획득하여 생산을 시작하겠고, 생산자2와 3은 대기 큐에 등록되어 WAITING 상태로 락을 기다리고 있다고 생각했습니다. 생산자1이 생산을 하고 consumerCond.signal();을 호출하여 consumerCond에 있는 소비자1,2,3 중 하나를 깨웁니다. (소비자 1을 깨웠다고 가정)소비자1은 consumerCond에서 대기 큐로 이동하여 락을 받을 준비를 합니다. 생산자1이 종료되면서 락을 넘겨줍니다.이때 락을 받기 위해 대기중인 스레드가 소비자1, 생산자2, 생산자3이 있는데 왜 항상 소비자1이 우선적으로 락을 획득할까요? signal()을 통해 깨어난 스레드는 락을 우선적으로 획득할 수 있는 무언가가 주어지는건가요?? 답변을 기다리겠습니다. 감사합니다
-
해결됨C개발자를 위한 최소한의 C++
빈 포인터에 멤버함수 호출
class A{public:int foo(int num) { return num; }};int main(){A* a = nullptr;int pa = a->foo(10);return 0;}이 코드를 실행하면 문제가 나지 않았습니다. 멤버 함수 호출이라는 것이 결국에 함수에 this포인터만 넣어주는 형태이기 멤버를 건드리지 않는 이상 런타임상에서 크래시가 나지 않는 걸로 생각은 하는데 이 생각이 맞을까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
생산자 소비자 대기 공간 분리 예제5 분석 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예.2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예.3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예.[질문 내용] 안녕하세요 영한님. 자바 고급편1 생산자 소비자 대기 공간 분리 - 예제5 분석 강의를 듣고 질문이 있어서 질문 올립니다. 소비자 먼저 시작 상황에서 질문이 있습니다.소비자 1,2,3이 대기상태에 들어가면서 consumerCond.await() 에서 대기를 하고 있습니다. 그 다음으로 생산자1이 락을 받고 실행이 되지요? 생산자가 생산을 하고 consumerCond에 signal을 주게 됩니다. consumerCond.await()에서 대기하고 있던 소비자를 깨우게 되겠죠. 그럼 대기하고 있던 소비자 중 하나가(소비자1)이 와서 락을 받고 소비를 한 뒤에 producerCond에 signal을 보냅니다. 여기서 제가 궁금한게 나옵니다. 대기상태에 있던 소비자1이 깨어나서 소비를 하고 producerCond에 signal을 줄때 producerCond에 대기중인 생산자가 하나도 없지 않습니까? 그럼 이때 생산자가 락을 받는다는 100%의 보장이 어떻게 이루어지는지 그게 궁금합니다. 질문을 요약해서 적겠습니다. 대기상태에서 깨어난 소비자가 producerCond에 signal을 보낼때 producerCond에 대기하고 있던 생산자가 하나도 없는데 어떻게 생산자가 그 락을 받는다는 100%의 보장을 할 수 있는지?대기상태에서 깨어난 소비자가 producerCond에 signal을 보낼때 producerCond에 대기하고 있던 생산자가 하나도 없는데 이럴때 소비자가 보낸 producerCond.signal(); 은 어떻게 처리가 되는지?감사합니다.
-
미해결스프링 핵심 원리 - 기본편
빈 등록 초기화, 소멸 메서드 지정 질문
안녕하세요. 섹션 9의 빈 등록 초기화, 소멸 메서드편에서 질문 드립니다.인터페이스(InitializingBean, DisposableBean)설정 정보에 초기화 메서드, 종료 메서드 지정@PostConstruct, @PreDestroy 애노테이션 지원위 3가지 방법 중 2번째 방법에서요. init, close 같은 초기화, 소멸 메서드가 미리 구현이 되어있으면 그걸 @Bean 설정할 때 지정함으로써 초기화가 가능한 것은 이해했습니다. 그런데 만약 init, close같은 초기화, 소멸 메서드가 외부 라이브러리 클래스 내에 미리 구현되어있지 않다면 해당 클래스를 수정할 수는 없으므로 초기화가 불가능한게 맞나요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
src가 안떠요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.강의에서는 src가 뜨는데 제 화면에는 src가 안떠요
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
SocketException: Connection reset 에러가 뜨지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java.net.SocketException: Connection reset네트워크 예외4- 강제종료 강의 중 위 에러가 뜨질 않습니다. 혹시나 서버에서 close() 호출 후 FIN packet을 보내는 것이 오래걸리나 싶어 Thread.sleep()도 3초에서 5초 가량으로 늘려보기도 했는데, "read = -1" 이라고 콘솔에 뜹니다. 반면, "java.net.SocketException: Broken pipe" 에러는 잘 뜹니다. 무슨 문제인지 잘 모르겠습니다.
-
미해결유니티 시스템 프로그래밍 Pt.2 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
안녕하세요 구글로그인 SDK 적용하고 빌드문제가있어 질문드립니다.
영상처럼구글 SDK 를 적용하고 MinimumAPI Api23targetApiLevel 34로 선택하고빌드를진행하면 이렇게 오류가뜨는데 어떻게 해결할까요..어제 부터 계속 구글링하며 찾고있는데 못찾아서.. 질문드립니다.. Starting a Gradle Daemon, 1 incompatible and 4 stopped Daemons could not be reused, use --status for details> Configure project :launcherWARNING:The option setting 'android.bundle.enableUncompressedNativeLibs=false' is deprecated.The current default is 'true'.It will be removed in version 8.0 of the Android Gradle plugin.You can add the following to your build.gradle instead:android {packagingOptions {jniLibs {useLegacyPackaging = true}}}WARNING:We recommend using a newer Android Gradle plugin to use compileSdk = 34This Android Gradle plugin (7.1.2) was tested up to compileSdk = 32This warning can be suppressed by addingandroid.suppressUnsupportedCompileSdk=34to this project's gradle.propertiesThe build will continue, but you are strongly encouraged to update your project touse a newer Android Gradle Plugin that has been tested with compileSdk = 34> Task :unityLibrary:FirebaseApp.androidlib:preBuild UP-TO-DATE> Task :unityLibrary:preBuild UP-TO-DATE> Task :unityLibrary:preReleaseBuild UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:preReleaseBuild UP-TO-DATE> Task :unityLibrary:packageReleaseRenderscript NO-SOURCE> Task :unityLibrary:FirebaseApp.androidlib:packageReleaseRenderscript NO-SOURCE> Task :unityLibrary:FirebaseApp.androidlib:compileReleaseRenderscript NO-SOURCE> Task :unityLibrary:compileReleaseRenderscript NO-SOURCE> Task :unityLibrary:generateReleaseResValues UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:generateReleaseResValues UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:generateReleaseResources UP-TO-DATE> Task :unityLibrary:generateReleaseResources UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:packageReleaseResources UP-TO-DATE> Task :unityLibrary:packageReleaseResources UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:extractDeepLinksRelease UP-TO-DATE> Task :unityLibrary:extractDeepLinksRelease UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:processReleaseManifest UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:compileReleaseLibraryResources UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:compileReleaseAidl NO-SOURCE> Task :launcher:preBuild UP-TO-DATE> Task :launcher:preReleaseBuild UP-TO-DATE> Task :launcher:compileReleaseRenderscript NO-SOURCE> Task :launcher:generateReleaseResValues UP-TO-DATE> Task :launcher:generateReleaseResources UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:generateReleaseBuildConfig UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:javaPreCompileRelease UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:writeReleaseAarMetadata UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:mergeReleaseShaders UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:compileReleaseShaders NO-SOURCE> Task :unityLibrary:FirebaseApp.androidlib:generateReleaseAssets UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:packageReleaseAssets UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:processReleaseJavaRes NO-SOURCE> Task :unityLibrary:FirebaseApp.androidlib:bundleLibResRelease NO-SOURCE> Task :unityLibrary:FirebaseApp.androidlib:mergeReleaseJniLibFolders UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:mergeReleaseNativeLibs NO-SOURCE> Task :unityLibrary:compileReleaseLibraryResources UP-TO-DATE> Task :unityLibrary:compileReleaseAidl NO-SOURCE> Task :unityLibrary:generateReleaseBuildConfig UP-TO-DATE> Task :unityLibrary:javaPreCompileRelease UP-TO-DATE> Task :unityLibrary:writeReleaseAarMetadata UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:copyReleaseJniLibsProjectOnly UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:prepareReleaseArtProfile UP-TO-DATE> Task :unityLibrary:mergeReleaseShaders UP-TO-DATE> Task :unityLibrary:compileReleaseShaders NO-SOURCE> Task :unityLibrary:generateReleaseAssets UP-TO-DATE> Task :launcher:mergeReleaseResources UP-TO-DATE> Task :launcher:createReleaseCompatibleScreenManifests UP-TO-DATE> Task :launcher:extractDeepLinksRelease UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:parseReleaseLocalResources> Task :unityLibrary:parseReleaseLocalResources> Task :unityLibrary:FirebaseApp.androidlib:generateReleaseRFile> Task :unityLibrary:processReleaseManifest> Task :launcher:checkReleaseDuplicateClasses UP-TO-DATE> Task :launcher:compileReleaseAidl NO-SOURCE> Task :launcher:generateReleaseBuildConfig UP-TO-DATE> Task :launcher:javaPreCompileRelease UP-TO-DATE> Task :launcher:checkReleaseAarMetadata UP-TO-DATE> Task :launcher:mergeReleaseShaders UP-TO-DATE> Task :launcher:compileReleaseShaders NO-SOURCE> Task :launcher:generateReleaseAssets UP-TO-DATE> Task :launcher:processReleaseJavaRes NO-SOURCE> Task :launcher:mergeReleaseJniLibFolders UP-TO-DATE> Task :launcher:collectReleaseDependencies UP-TO-DATE> Task :launcher:configureReleaseDependencies UP-TO-DATE> Task :launcher:parseReleaseIntegrityConfig UP-TO-DATE> Task :launcher:writeReleaseAppMetadata UP-TO-DATE> Task :launcher:validateSigningRelease UP-TO-DATE> Task :unityLibrary:packageReleaseAssets> Task :unityLibrary:FirebaseApp.androidlib:compileReleaseJavaWithJavac> Task :unityLibrary:FirebaseApp.androidlib:bundleLibCompileToJarRelease UP-TO-DATE> Task :unityLibrary:FirebaseApp.androidlib:bundleLibRuntimeToJarRelease UP-TO-DATE> Task :launcher:processReleaseMainManifest> Task :launcher:processReleaseManifest UP-TO-DATE> Task :launcher:processApplicationManifestReleaseForBundle UP-TO-DATE> Task :launcher:bundleReleaseResources UP-TO-DATE> Task :launcher:processReleaseManifestForPackage UP-TO-DATE> Task :launcher:mergeReleaseAssets> Task :unityLibrary:processReleaseJavaRes UP-TO-DATE> Task :unityLibrary:bundleLibResRelease UP-TO-DATE> Task :unityLibrary:mergeReleaseJniLibFolders UP-TO-DATE> Task :unityLibrary:mergeReleaseNativeLibs UP-TO-DATE> Task :unityLibrary:copyReleaseJniLibsProjectOnly UP-TO-DATE> Task :unityLibrary:prepareReleaseArtProfile UP-TO-DATE> Task :launcher:mergeReleaseJavaResource UP-TO-DATE> Task :launcher:mergeReleaseNativeLibs UP-TO-DATE> Task :launcher:stripReleaseDebugSymbols UP-TO-DATE> Task :launcher:mergeReleaseArtProfile UP-TO-DATE> Task :unityLibrary:generateReleaseRFile> Task :launcher:extractReleaseNativeSymbolTables UP-TO-DATE> Task :unityLibrary:compileReleaseJavaWithJavac UP-TO-DATE> Task :launcher:processReleaseResources UP-TO-DATE> Task :unityLibrary:bundleLibRuntimeToJarRelease UP-TO-DATE> Task :unityLibrary:bundleLibCompileToJarRelease UP-TO-DATE> Task :launcher:compileReleaseJavaWithJavac UP-TO-DATE> Task :launcher:dexBuilderRelease UP-TO-DATE> Task :launcher:desugarReleaseFileDependencies> Task :launcher:mergeExtDexRelease UP-TO-DATE> Task :launcher:mergeDexRelease FAILEDDeprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.See https://docs.gradle.org/7.6/userguide/command_line_interface.html#sec:command_line_warnings71 actionable tasks: 11 executed, 60 up-to-dateUnityEditor.BuildPipeline:BuildPlayer (UnityEditor.BuildPlayerOptions)BuildManager:StartAOSBuild () (at Assets/02.Scripts/Editor/BuildManager.cs:89)
-
미해결김영한의 실전 자바 - 중급 1편
try-with-resources질문
마지막 강의의 2: 10에서 close()메서드에서 예외가 안터진다 한들, 굳이 throws Exception을 "꼭" 제거해야하는 이유가 있나요? 어차피 안 없애도 문제는 없지 않나요? 메서드 옆에 throws Exception이거 적어주는 것은 단지 Exception예외가 일어났을때, 이 메서드에서 처리하지 않고 , 호출한 곳으로 예외를 던진다는 뜻인데.. 왜 꼭 제거하라고 한 건지 이해가 안갑니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
자바 병렬 처리
안녕하세요 영한님 ^^ 1기 인프콘때 뵈고, 오랜만에 강의를 보게되어서 반갑습니다 ㅎㅎ 다름이 아니라, 주문 체결 시스템을 개발하여서 병렬 처리 관련해서 공부 및 개발중인데 혹시 아래 링크책을 예전에 공부하신적 있으신가요? https://product.kyobobook.co.kr/detail/S000007668255아니면 다른 책 추천해주실만한게 있으실까요 ? ㅎㅎ아니면 이 강의 다보면 제가원하는 주문 체결 시스템을 만들기위한 기본 베이스는 이해가 될 수 있을까요?설날 잘보내시고 새해 복 많이받으세요 !
-
해결됨오브젝트 - 기초편
예제코드 github
안녕하세요. 혹시 예제 코드들을 github에서 볼 수 있을까요?감사합니다
-
미해결김영한의 실전 자바 - 기본편
상속 생성자 super과 this 사용
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예안녕하세요상속 생성자의 super 사용에 대해 궁금한 점이 생겨 질문을 남깁니다. 생성자를 사용 시 this를 사용해도 상위의 생성자를 만들기 위해 super();을 한 번은 호출해야 한다고 이해했는데, 하위 클래스에서 하나의 생성자 안에 this와 super();을 함께 사용하지는 못할까요 ? 만약 하나의 생성자 안에 this와 super을 함께 사용이 가능하다면 super을 먼저 쓰는지 this를 먼저 쓰는지에 따라 상위와 하위 생성자 할당 순서가 달라질텐데 무엇을 먼저 써주어야하는지가 궁금합니다. 좋은 강의 항상 감사드립니다 !
-
미해결TS/JS 디자인 패턴 with Canvas: 제로초에게 제대로 배우기
팩토리 메서드에 대해서 궁금증이 생겨서 질문드려봅니다!
심플 팩토리에서 chrome, safari 등등 if문을 통해서 브라우저환경에 맞는 그림판 인스턴스를 가져올 수 있도록 한 코드가 있었는데, 팩토리 메서드가 그 역할을 대신한다고 이해했습니다. 궁금한점은 결국 크롬이든 사파리든 브라우저환경을 알아내서 main함수에 넘겨줄 수 있어야하는데 그 분기는 어디서 해야하는걸까요?function clientCode(creator: Creator) { creator.someOperation() } clientCode(new ConcreteCreator1())아래의 코드라면 new ConcreteCreator1()를 판단할 수 있는 조건 분기를 결국 어디서는 해야하지 않는가에 대한 고민입니다!
-
미해결코틀린 함수형 프로그래밍 - 입문편
[문제집] 6_함수를 응답으로 받기 - 1번문제 오류
안녕하세요, [문제집] 6_함수를 응답으로 받기 1번문제에 오류가 있습니다. createMultiplier 함수 파라미터로 factor가 되어야 하는데 2로 들어와있네요. 문제집 해설 영상 보면 알 수 있지만 잘못되어 있어서 제보드립니다. 감사합니다.
-
미해결김영한의 실전 자바 - 중급 1편
basic,gold,diamond에 왜 new ClassGrade로 인스턴트 생성하나요? 그냥 선언만 하면 안되나여??
package enumeration.ex2;public class ClassGrade {public static final ClassGrade BASIC = new ClassGrade();public static final ClassGrade GOLD = new ClassGrade();public static final ClassGrade DIAMOND = new ClassGrade(); } =>public static final ClassGrade BASIC;public static final ClassGrade GOLD ;public static final ClassGrade DIAMOND ; 이로면 안되나여?new를 왜햇는지 모르겟어요
-
미해결김영한의 실전 자바 - 중급 1편
discount 메서드에서 타입을 String 타입이 아닌 StringGrade타입으로 받으면 되지않나여??
package enumeration.ex1; public class DiscountService { public int discount(StringGrade grade,int price){ int discountPercent=0; if(grade.equals(StringGrade.BASIC)) { discountPercent=10; }else if(grade.equals(StringGrade.GOLD)){ discountPercent=20; }else if(grade.equals(StringGrade.DIAMOND)){ discountPercent=30; }else{ System.out.println(grade+":할인 x"); } return price*discountPercent/100; } } discount 메서드에서 타입을 String 타입이 아닌 StringGrade타입으로 받으면 아래 예제가 다 에러 표시가 나면서 개발자들이 실수 하지않게 되는데? 왜 굳이 enum을 쓰나여?StringGrade타입으로 하면되자나여package enumeration.ex1; import enumeration.ex1.DiscountService; public class StringGradeEx1_2 { public static void main(String[] args) { int price=100000; DiscountService discountService=new DiscountService(); //존재하지 않는 등급 int VIP =discountService.discount("VIP",price); System.out.println("VIP = " + VIP); //오타 int diamoddd= discountService.discount("diamoddd",price); System.out.println("diamoddd = " + diamoddd); //소문자 입력 int gold= discountService.discount("gold",price); System.out.println("gold = " + gold); } }
-
미해결김영한의 실전 자바 - 중급 2편
UnitPrinter.printV2 와일드카드 작성 시
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]public static void printV2(Shuttle<? extends BioUnit> shuttle) { shuttle.showInfo(); } 이 부분에 와일드카드가 BioUnit 을 extends 해야 한다고 명시적으로 작성해 주고 있는데 Shuttle 클래스에서 이미 <T extends BioUnit> 을 하고 있기 때문에 와일드카드는 단순하게 ? 만 사용해도 괜찮은 걸까요?다른 개발자가 사용할 경우에 좀 더 명시적으로 확인시켜주기 위해 적은거라고 이해해도 되는 건지 궁금합니다. public static void printV2(Shuttle<?> shuttle) { shuttle.showInfo(); }이렇게 코드를 작성한 이후에 여러 테스트를 해봤는데 Shuttle 클래스를 만들때 <T extends BioUnit> 에 걸려서 Integer나 Object 등 다른 타입은 사용할 수 없더라구요.
-
미해결스프링 핵심 원리 - 기본편
테스트 두개를 동시에 돌렸을 경우 왜 밸류값이 달라지는 건가요??
public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name = " + beanDefinitionName + " Object = " + bean); } } @Test @DisplayName("모든 빈 출력하기") void findApplicationAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name = " + beanDefinitionName + " Object = " + bean); } } } }테스트 코드를 이렇게 짠 후 같이 돌리면 오브젝트로 나오는 애들 코드가 각각 다르게 나옵니다.스프링 컨테이너는 초기에 한 번만 생성/등록되고 각각의 테스트에서 같은 것을 가져오는 건줄 알았는데 아닌가요..??
-
해결됨김영한의 실전 자바 - 중급 2편
[수정 건의] NodeMain3의 add(Node node, String param) 메서드에 대한 수정 건의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]대상 강의록: 4. 컬렉션 프레임워크 - LinkedList.pdf의 p.12대상 소스 파일: NodeMain3add(Node node, String param) 메서드건의 내용:해당 부분은 아직 LinkedList에 대한 제네릭 도입 전이므로 Node 클래스에서도 item의 타입을 Object로 사용하고 있습니다.public class Node { Object item; Node next; public Node(Object item) { this.item = item; } ... }따라서 add 메서드 또한 추가할 데이터인 param을 String이 아닌, Object 타입으로 설정해야 수강생들의 이해가 쉬울 것이라고 생각합니다.// 기존 강의록 코드 private static void add(Node node, String param) { Node lastNode = getLastNode(node); lastNode.next = new Node(param); } // 수정 제안 코드 <<수정부분: String -> Object>> private static void add(Node node, Object param) { Node lastNode = getLastNode(node); lastNode.next = new Node(param); }
-
해결됨김영한의 실전 자바 - 중급 2편
강의록 오타 제보
[질문 내용]파일: 4. 컬렉션 프레임워크 - LinkedList.pdf페이지/위치: 4페이지/NodeMain1 코드11페이지/NodeMain3 코드오타 내용: System.out.println("모든 노트 탐색하기");수정 내용: System.out.println("모든 노드 탐색하기");