묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
DIP 설명 후반부에 IOC에 대한 질문 드립니다.
안녕하세요.스프링 프레임웍에서 IOC 개념을 설명 해주시면서 항상 들었던 궁금한 점을 질문드립니다.IOC는 개발자가 짠 프로그램이 아닌, 프레임워크에 의해 객체가 관리(생성, 소멸)되는 것이라고 설명 주셨습니다. 저도 스프링 컨테이너의 BEAN를 인스턴스로 활용하는 것으로 대략 알고 있는데요. 그렇다면 IOC에 의해 주입되는 BEAN은 하나의 형태의 구현체 일텐데,, 스프링은 앞서 DIP에서 설명 주신 추상화된 인터페이스가 하나의 고정된 구현체만 BEAN으로 만들어 생성하는 걸까요?스프링 IOC의 장점을 설명하라고 하면 제어의 역전이 되면서 구현 인스턴스 변경에 유연해진다라고 들었는데,, 하나의 인스턴스로만 고정된다면 그것이 유연한 것일까 항상 궁금했습니다. 아니면 주입될 객체만 바꿔끼면 되니 유연하다는 표현을 하는걸까요?질문을 해보니 약간 스프링의 질문인데.. 항상 이해가 잘 되게 설명을 해주셔서.. 실례를 무릅쓰고 여쭈어봅니다. ㅠㅠ
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
[MyString 실습 인스턴스 중복 생성 문의] MyString.setString(String param)
선생님 안녕하십니까public void setString(String param) { string = param.getBytes().clone(); }getBytes() 메서드 호출 시점에 [] bytes 인스턴스가 새로 생성 되었으나 이후에 clone() 메서드를 호출하는 것은 getBytes()로 새로 생성한 인스턴스에 대한 또 다른 인스턴스를 생성하는 것이므로 이는 중복 생성이 아닌가.. 하는 생각이 들어 여쭙고자 합니다.제 생각에는 매개변수의 타입이 [] bytes 임을 전제로 하시고 말씀하신것 같습니다만 말씀하시는 내용과 코드가 달라 혹여 수강생들에게 혼란을 주지 않을까 싶어 질문으로 남깁니다.혹여나 제가 잘못 생각한 부분이 있다면 따끔히 지적 부탁드립니다.항상 좋은 상의 만들어주셔서 감사합니다 (꾸벅)
-
해결됨김영한의 실전 자바 - 중급 1편
지역 클래스 예제3 지역변수 질문
[질문 내용]지역 클래스 예제3 의 LocalPrinter 인스턴스 생성 직후 메모리 그림인데 이때 스택 영역에서 이미지에 질문이 있습니다.process 메소드가 끝나면서 x002 를 리턴하는데 이를 받는 변수가 main 메소드 내에 printer 지역변수가 있어야 되지않나요?더해서 localOuter 의 변수또한 가져야 된다고 생각해서 스택 프레임이 사라지면 printer 변수에 담긴 객체는 '어떻게 지역변수와 파라미터를 기억하냐?' 에 대해서는 힙 영역의 객체를 가리키고 LocalPrinter 객체를 만들때 사라질 운명인 지역변수를 복사해서 넣어둔다고 이해했습니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!
안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?! ps. 사실 결제는 이미했습니다..!
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
UserDataManager 코드 질문입니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class UserDataManager : SingletonBehaviour<UserDataManager> { public bool ExistsSavedData { get; private set; } public List<IUserData> UserDataList { get; private set; } = new List<IUserData>(); protected override void Init() { base.Init(); UserDataList.Add(new UserSettingData()); UserDataList.Add(new UserGoodsData()); } public void SetDefaultUserData() { for(int i = 0; i < UserDataList.Count; i++) { UserDataList[i].SetDefaultData(); } } public void LoadUserData() { ExistsSavedData = PlayerPrefs.GetInt("ExistsSavedData") == 1 ? true : false; if(ExistsSavedData) { for (int i = 0; i < UserDataList.Count; i++) { UserDataList[i].LoadData(); } } } public void SaveUserData() { bool hasSaveError = false; for(int i =0; i < UserDataList.Count; i++) { bool isSaveSuccess = UserDataList[i].SaveData(); if(!isSaveSuccess) { hasSaveError = true; } } if(!hasSaveError) { ExistsSavedData = true; PlayerPrefs.SetInt("ExistsSavedData", 1); PlayerPrefs.Save(); } } }위 코드의if(!hasSaveError) { ExistsSavedData = true; PlayerPrefs.SetInt("ExistsSavedData", 1); PlayerPrefs.Save(); }이 부분에서 PlayerPrefs에 "ExistsSavedData"를 1로 저장해주는 이유가 있나요??제 짧은 생각으로는 ExistsSavedData가 어차피 true로 처리되기 때문에 필요가 없지 않을까라는 의견입니다이와 더불어 LoadUserData()에서도 PlayerPrefs.GetInt()를 안하고 if(ExistsSavedData) 문만 가지고는 안되는지 궁금합니다. 강의 잘 듣고 있습니다. 감사합니다!
-
해결됨김영한의 실전 자바 - 중급 2편
안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]9. 컬렉션 프레임워크 - Map, Stack, Queue의 문제와 풀이2 - Map2의7-장바구니의"만약 수량이 0보다 작다면 상품이 장바구니에서 제거된다"가 실행 결과를 참고하면,"만약 수량이 0 이하가 되면 상품이 장바구니에서 제거된다"이렇게 하는게 맞지 않나 싶습니다.
-
미해결스프링 핵심 원리 - 기본편
ApplicationContext 질문입니다.
new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class)해당 코드에서 질문 있습니다.이렇게 클래스를 넣어주면 해당 클래스는 컴포넌트 스캔의 대상처럼 되어 빈으로 등록된다고 앞의 강의들에서 말씀하셨는데요.ClientBean은 싱글톤 빈(기본 값)이므로 우리가 여태 했던 것처럼 그대로 스프링 컨테이너에 객체가 생성되어 스프링 빈으로 등록될 것 같은데요. PrototypeBean 클래스는 어떻게 되는지 궁금합니다.프로토 타입빈은 설명하신 것에 따르면 요청(조회) 할 때 빈이 생성되어 반환된다고 하셨는데요,그렇다면 AnnotationConfigApplicationContext에 PrototypeBean을 보내면 어떤 상태(?)로 있는 건가요?프로토타입 빈은 요청시에 빈이 생성되어 반환되니까 싱글톤 빈처럼 스프링 컨테이너에 빈으로 등록된 상태는 아닐 것 같구요.그냥 스프링 빈으로 만들어 질 수 있는 상태 같은 것이 되는건가요?
-
미해결React 비기너: 튼튼한 기본 만들기
html이 어플레이케이션 중심으로 전환되었다는 뜻이 정확히 이해가 가지 않아 질문드립니다.
"html이 어플레이케이션 중심으로 전환되었다"는 뜻이html5 에서는 이전과는 달리, 단순 줄글 텍스트 데이터 형식으로 콘텐츠를 표현하는 것이 아니라,canvas나 video와 같이 텍스트 형식을 벗어난 엘리먼트들로 콘텐츠를 표현한다는 의미일까요? 그리고 여기서 정확히 "애플리케이션"이 의미하는 바가 무엇인지 궁금합니다. canvas, video와 같은 엘리먼트의 구현체(?)가 DOM에 객체를 추가하기 위해 계산등을 처리해주기에 이들이 "애플리케이션"으로써 분류된걸까요? 그리고 "마크업"이라는 것을 텍스트 형식으로 표시된 의미론적으로 분류된 텍스트라고 이해해도 될까요? 그렇다면 canvas도 마크업으로써 콘텐츠를 표현하는 것이지만, html 이 parse되어 DOM 으로 만들어질때, 즉 메모리에 객체 형태로 올라갈 때 그 형식이 텍스트가 아닌 다른 무언가이기에 "어플리케이션"이라는 표현이 사용되는 것일까요? 그렇다면 XHTML와 그 이전 버전에서는 canvas, video같은 앨리먼트 없이 오로지 텍스트를 표현하는 태그들만 사용되었던건가요? 좋은 강의 늘 감사합니다.
-
해결됨오브젝트 - 기초편
이 강의만 자료가 ppt네요.
다른 강의에 첨부된 자료들은 모두 pdf인 것 같은데, 이 강의에 첨부된 자료는 PPT이네요.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
IO.println(String.format("Hello and welcome!"));
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 선생님 이렇게 만들어지는데 괜찮은걸까요?[질문 내용]여기에 질문 내용을 남겨주세요.
-
해결됨【2025年版】Unity×C#入門講座|2Dタワーディフェンスゲーム開発マスター|クリック&バトルシステムの作り方
수업 자료 링크를 어디서 볼 수 있나요?
쩝.. 일본 강의를 번역한 거였군요.좀 표시해 두시지.수업 자료 링크만 알려주십시오.한번 공부해 보겠습니다.
-
해결됨고도 엔진(Godot Engine)을 통한 게임 개발 박치기!! - 기본 개념부터 실전 게임 제작까지 한방에!
21. Dictionary 활용 저장&로드
21. Dictionary 활용 저장&로드섹션에서 게임 저장 로드 사용시 Dictionary 만 사용 하여 게임저장 및 로드 구현 가능 한지? 다른 자료구조형식( Array, Enum) 를 사용하여 게임 저장 로드를 구현 할수 있는지 궁금합니다..^^답변 부탁드립니다.. 추가 질문 😀Array, Enum, Dictionary 를 단독 으로 사용시 언제 사용해야는지 궁금합니다..^^
-
미해결김영한의 실전 자바 - 기본편
Method1에서 Student 객체
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이 부분에서 Student student를 선언하고 new Student();를 안했는데 어떻게 바로 .name같은 거를 사용할 수 있는 건가요? 다른 부분에서는 꼭 객체를 먼저 생성해야 접근을 할 수 있는데 이 함수에서는 왜 가능한건가요?static void initStudent(Student student, String name, int age, int grade) { student.name = name; student.age = age; student.grade = grade; }
-
미해결【2025年】Unity × C#で作る本格2D戦略型タワーディフェンスゲーム開発講座
녹음 확인 해주세요
4분50초경에 이상한 목소리가 녹음이 되어 있는것 같습니다
-
미해결김영한의 실전 자바 - 중급 2편
자바 로드맵 선택 질문
안녕하세요, 강사님.현재 자바 중급 2편을 이번 주 내로 수강 완료할 예정인 수강생입니다.인프런에 올라와 있는 ‘김영한의 자바 공부법 로드맵’에서는자바 고급 1, 고급 2를 뒤로 미루고 스프링 강의로 먼저 넘어가는 흐름을 추천해 주셨는데,영상으로 올려주신 ‘김영한의 실전 자바 로드맵’에서는자바 고급 1은 6강까지, 자바 고급 2는 전부 수강한 뒤 스프링으로 넘어가는 것이 최적이라고 말씀해 주셔서두 로드맵 중 어떤 흐름을 따르는 것이 좋을지 고민되어 질문드립니다.저의 목표는 다음과 같습니다.올해 안에 「스프링 핵심 원리 - 기본편」까지 들어가는 것스프링을 활용해서 직접 무언가를 개발해 보는 것다만, 스프링을 빨리 배우고 싶으면서도 자바 기본기와 객체 지향에 대한 공부를 소홀히 하고 싶지는 않아서인프런 로드맵처럼 자바 고급 1, 2를 건너뛰고 스프링으로 넘어가도 괜찮은 선택인지 확신이 서지 않습니다.제 상황에서는 어느 로드맵 흐름을 따르는 것이 더 좋을지,자바 고급 1, 2를 어느 정도까지 수강한 뒤 스프링으로 넘어가는 것이 좋을지추천해 주실 수 있을까요?
-
해결됨유니티 시스템 프로그래밍 Pt.2 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
파이어베이스 이벤트 로그 수집관련 질문입니다.
안녕하세요. 파이어베이스 이벤트 로그 수집관련해서 2가지 질문이 생겼습니다. 앱 삭제시 삭제하는 유저의 마지막 스테이지 값을 함께 받아보고 싶은데 어떻게 구현해야 하는지 궁금합니다. 동일한 유저가 앱을 설치하고 삭제한 뒤 다시 재설치하고 또 삭제한 다면 설치한 유저는 총 2명, 삭제한 유저는 총 2명으로 기록되는지 궁금합니다. 아무래도 파이어베이스 이벤트 로그 수집에 시간차가 있다보니 정확한 판단을 내리기가 어려워 테스트 하는게 쉽지가 않네요.
-
해결됨고도 엔진(Godot Engine)을 통한 게임 개발 박치기!! - 기본 개념부터 실전 게임 제작까지 한방에!
66강. INPUT 관리
INPUT 관련 메서드 사용 부분에서 Player.gd 스크립트에서 Player 이동는 매번 상태체크 해야하기때문에 그대로 변경없이, 하신건지? 부스터 , 유도탄 발사는 가끔씩 이벤트 발생해서 _Input () 를 _unhandle_Input () 으로 변경했는지 궁금하네요..실제 사용예시를 알려주실려고 변경하셨는지 궁금하네요..
-
해결됨오브젝트 - 설계 원칙편
Game, Player, Room간의 관계에 대한 질문을 드려요
영호님 안녕하세요! 이번에는 설계원칙편의 6-1장 강의를 듣던 중, 궁금한 부분이 생겨 질문 드립니다~!! 디미터 법칙을 만족시키기 위해 Game 클래스의 showRoom() 메서드 내부의 구현을 리팩토링 하는 과정에서 player.currentRoom()메서드를 통해 Room 객체에 접근하여 name과 description 정보를 반환받도록 하는 부분이 있었습니다. Q. 혹시 showRoom() 메서드 내부에서 player로부터 Room 객체를 반환 받아 Game객체가 사용하는 것이 아닌, Room에 대한 정보를 Room객체로부터 바로 반환 받도록 하는 것은 어떠신지 궁금합니다! 예를 들어서 Room에 대한 정보를 Room이 책임지도록 하였을 때public class Player { private WorldMap worldMap; private Position position; ... public String currentRoom() { return worldMap.roomAt(position).getRoomInfo(); // 디미터 법칙 준수 } } public class Room { private Position position; private String name; private String description; ... public String getRoomInfo() { return String.format("현재 위치는 %s 입니다. %s\n", name, description); } } Room에 층수 정보와 같이 무언가 추가되는 상황이 발생하더라도 Game에서는 코드를 수정할 필요가 없이 Room 객체 내부에서만 변경하면 될 것 같아보였습니다! 🤔
-
미해결스프링 핵심 원리 - 기본편
@Scope의 proxyMode를 사용할때 단위 테스트 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]지금까지 강의를 들으며 선생님께서 말씀하신 좋은 테스트는 "종속되지 않고 순수한 자바 코드로 사용된게 좋은 코드다"라고 말씀주셨는데요, 그런 관점에서는 @Scope(proxyMode ...)로 사용되는 코드는 '테스트 관점'에서 볼때는 ObjectProvider을 사용한 코드보다 좋지 않다고 볼 수도 있을까요?아니면 "웹"의 관점인 만큼 좋은 단위테스트를 짤 수 있는 방법이 잇을까요?이번 강의에서는 단위테스트를 해보지 않아 아쉬움에 남깁니다.
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
강사님
백엔드 취준생이 고 강의랑 관련 된 내용은 아니지만강사님 강의를 2개 정도 구매했습니다. 지금 자바로 프로젝트 2개를 한 상태입니다.로드 맵 이 있어서 듣게 됐습니다.보통 Error 관련 코드를 만들 때 @ExceptionHandler 로 컨트롤러에서 발생한 에러를 잡고 @ControllerAdvice 가 모든 에러를 잡아서 관리 해 주는 걸로 다른 강의에서 배웠는데 보통 현업에서는 이렇게 하나요? 제가 프로젝트 두 개 모두이런식으로 enum 과 class 를 따로 만들어서 했는데 현업에서 어떻게 하는 지 궁금해서 질문드립니다. @Getter public class BusinessException extends RuntimeException { private final HttpStatus status; private final ErrorCode errorCode; public BusinessException(ErrorCode errorCode) { super(errorCode.getMessage()); this.status = errorCode.getErrorCode(); this.errorCode = errorCode; } public BusinessException(HttpStatus status, ErrorCode errorCode, String message, Throwable cause) { super(message, cause); this.status = status; this.errorCode = errorCode; } public BusinessException(HttpStatus status, String message) { super(message); this.status = status; this.errorCode = null; } } @Getter @AllArgsConstructor public enum ErrorCode { TOKEN_NOT_FOUND(HttpStatus.BAD_REQUEST, "토큰이 없습니다."), JWT_EXPIRED(HttpStatus.BAD_REQUEST, "jwt 토큰이 만료되었습니다. "), INVALID_JWT(HttpStatus.BAD_REQUEST, "jwt 토큰을 찾을 수 없습니다."), ACCEPTED_EXISTS(HttpStatus.CONFLICT, "팔로우를 찾을수없습니다."), FOLLOW_NOT_FOUND(HttpStatus.CONFLICT, "팔로우를 찾을수없습니다."), INVALID_FOLLOW_STATUS(HttpStatus.CONFLICT, "팔로우상태가 아닙니다."), AGREEMENT_INPUT(HttpStatus.CONFLICT, "약관 동의가 필요합니다."), INVALID_EMAIL_INPUT(HttpStatus.BAD_REQUEST, "해당 이메일은 소셜 로그인 계정입니다. 소셜 로그인을 이용하세요."), DUPLICATE_RESOURCE(HttpStatus.FORBIDD