묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 기본편
중급 고급편 언제쯤 오픈될까요?
영한님 안녕하세요!좋은 강의 올려주셔서 감사합니다 🙂 빨리 중급편도 수강하고 싶은데, 혹시 중 - 고급은 언제쯤 오픈 예정이실까요?
-
해결됨김영한의 실전 자바 - 기본편
기본형과 참조형 문제풀이 그리고 문제해결에 대한 질문,,
안녕하세요 강사님 항상 좋은 강의 감사드립니다.기본형과 참조형 문제와 풀이 첫 번째 부분에서 부분적으로 이해되는 부분이 있었고 이해가 안되는 부분이 있었습니다. 그리고 완성된 코드를 보고 나름대로 분석을 해보았습니다.분석을 하면서 배웠던 내용에 대한 회상이 있었습니다.분석에 대한 오류나 이런 부분에 있어서 틀린 부분이 있는지 여쭤보고 싶습니다..그리고 배웠던 내용을 기반으로 응용된 문제나 기능을 직접 코드로 작성해보고 싶은데 "이러이러한 기능을 써야지" "배열을 통해서 응용해야지" 이런 문제 해결에 대한 부분은 어떻게하면 조금 더 효율적인 설계를 할 수 있는지 여쭤보고 싶습니다.
-
미해결스프링 핵심 원리 - 기본편
빈 소멸
public class SingletonTest { @Test void singletonBeanFind(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); ac.close(); System.out.println("singletonBean2 = " + singletonBean2); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init(){ System.out.println("singletonBean.init"); } @PreDestroy public void desrtoy(){ System.out.println("singletonBean.desrtoy"); } } } 스프링 컨테이너가 close() 메서드로 종료될 시점에 컨테이너는 빈 객체의 소멸을 처리한다라고 알고있습니다. 그런데 close() 이후에 singletonBean의 참조변수를 출력해보면 null이 아니라 빈의 참조값이 출력되는 이유가 먼가요? 제가 잘못 알고있는 부분이 궁금합니다아래는 Test 결과 입니다singletonBean.initsingletonBean1 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712dsingletonBean.desrtoysingletonBean2 = hello.core.scope.SingletonTest$SingletonBean@530712d
-
미해결김영한의 실전 자바 - 기본편
다운캐스팅 관련 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]//부모 변수가 자식 인스턴스 참조(다형적 참조) Parent poly = new Child(); Child child = (Child) poly; child.ChildMethod(); child.parentMethod(); //호출 가능다운캐스팅으로 부모 타입의 poly를 자식타입으로 변경하여자식 클래스의 childMethod를 호출 가능하였습니다. 그런데 바로 child.parentMethod도 호출이 가능하던데다운캐스팅, 업캐스팅 시 부모, 자식의 기능을 모두 불러올 수 있는 것인가요? 부모와 자식의 기능을 모두 호출 가능한 이유가 무엇인지 이해가 되지 않습니다.
-
미해결김영한의 실전 자바 - 기본편
Student 클래스 타입 크기 질문
Student 객체의 참조값을 담는 Student 클래스 타입의 크기는 어느정도인가요? (ex. int는 4byte double은 8byte인 것처럼)
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
no frameworks detected
no frameworks detected 의 문구가 뜹니다 . 아래와 같이 선택할 수 있는 창이 뜨지않습니다. 위를 무시하고 create를 누르면 아래와 같이 나옵니다 ㅜㅜ
-
해결됨김영한의 실전 자바 - 기본편
인스턴스 타입을 부모로해도 자식의 오버라이드 메서드가 호출되나요?
안녕하세요! ElectricCar electricCar = new ElectricCar(); electricCar.move();이렇게 하면 호출한 electricCar의 타입은 ElectiricCar라서 인스턴스 내부의 ElectricCar 타입에서 시작한다고 하셨습니다.그래서 electricCar.move();를 실행하면 ElectricCar 의 move() 메서드가 실행돼서전기차를 빠르게 이동합니다.이렇게 전기차로 출력이 됩니다.Car electricCar = new ElectricCar(); electricCar.move();그럼 이렇게 타입이 Car타입이면 인스턴스 내부의 Car타입에서 move()메서드를 실행시켜 "차를 이동합니다."가 출력될 것이라고 생각했는데 전기차를 빠르게 이동합니다.여기서도 전기차를 빠르게 이동합니다.가 출력됩니다.어째서 Car타입에서 move()메서드를 실행하지 않고 ElectricCar의 move()메서드를 실행하게 되는건가요?감사합니다!!😊
-
해결됨김영한의 실전 자바 - 기본편
자바 추후 중급 고급 영상 문의
안녕하세요 영한님! 실전 자바 기본편 잘 보고 있습니다.혹시 추후에 자바 중급 고급편에 가변객체 불변객체 사용이유(스레드와 연관되면서..)와 리플렉션(스프링과 연결되면서...)이 혹시 나오는지 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
ObjectProvider 사용하는 대신에 prototype 객체가 singleton 객체를 주입 받으면 안되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. "프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결" 강의를 보던 도중에 궁금한 것이 있어 질문을 남깁니다.강의에서 singleton object가 prototype object를 주입받을 때 생길 수 있는 문제를 이야기 하면서 해결방법을 알려줍니다. ObjectProvider를 이용해서 prototype object를 singleton object method 내부에서 매번 생성하는 방법으로 말이죠. 그런데 이 방법도 제가 보기에는 조금 복잡해 보입니다.singleton object가 prototype object에 의존하는 방식을 역전하면 더 간단해지지 않을까요? 반대로 prototype object가 singleton object에 의존한다면 provider를 사용할 필요가 없어집니다. 클라이언트가 직접 prototype object를 destroy 하면 되지요.이에 대해 어떻게 생각하시나요? provider와 비교했을 때 장단점을 알 수 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
myLoggerProvider.getObject() 메서드시 동시성관련 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]클라이언트1,2,3,4,5이 동시에요청했을때myLoggerProvider.getObject()실행해서 my Logger 객체를 받아올때 (컨트롤러or서비스)request요청이 여러개니까 myLogger객체는 이때 여러개인데...똑같은 객체가 계속 반환되는걸 보장해주는 이유가 있나요? @PostConstruct public void init(){ uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "]" + "request scope bean create: "+this); }거의 동시에 요청이왔다고 가정했을때init해서 각 request스코프객체에 UUID각각설정후getObject()를 각자 두번씩해서 myLogger를 얻게되는데이때 myLogger타입 객체는 여러개가있을수있고이걸 init했을때-처음getObject()-두번쨰getObject-close이런순서로 진행될때처음 init할떄랑 close할때는 객체주소가 같은건 당연하지만그사이에 getObject()했을때 객체가 바뀔우려가 있는건 아닌지 생각이듭니다 @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) throws InterruptedException { MyLogger myLogger = myLoggerObjectProvider.getObject(); <================여기 String requestURL = request.getRequestURL().toString(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerObjectProvider; public void logic(String id) { MyLogger myLogger = myLoggerObjectProvider.getObject();<==========여기 myLogger.log("service id = "+ id); }
-
해결됨김영한의 실전 자바 - 기본편
반복문 리팩토링 질문드립니다.
안녕하세요 영한님!질문은 처음 드리는거 같습니다~ 기본형과 참조형 '문제와 풀이' 시간에ProductOrder를 리팩토링하는 부분에서 질문이 있습니다. 리팩토링 하는 과정에서 for문 안에서 수행하던 print와 totalAmount를 계산하는 로직을 각각 메서드로 나누었는데요,이렇게 되면 한번만 수행되던 반복문이 메서드로 나누면서 각각 수행되어 2번이 되는데 이런 부분은 for문이 한번 더 돌게되어 오는 성능이슈보다, 깔끔하게 리팩토링 되는 부분이 더 이점이 큰 부분일까요? 사실 현업에서 업무를 할때도,for안에서 여러가지 로직이 수행되면 한번에 파악하기가 어려워서 나눠야지 싶어서 나누었지만, 한번만 돌던 반복문이 여러번 돌게 될 수 있어서 망설여지는 부분이 있었습니다. 이 부분 질문드립니다!감사합니다~
-
해결됨김영한의 실전 자바 - 기본편
상속 관계와 캡슐화 질문
안녕하세요 영한님 강의 잘 보고 있습니다.상속 관계와 캡슐화에 대해 궁금증이 있어 질문 남깁니다. 문제를 풀 때 부모와 자식은 각각 별도로 생성되지만, 하나의 묶음으로 생각되어 자식 클래스에서 부모 클래스의 필드에 직접 접근 가능하여야 한다 생각했습니다그리하여 부모 클래스의 필드를 protected로 생성하여 풀었는데, 영한님 문제 풀이를 보니 private 으로 감추시는걸 보고 의문점이 생겼습니다private으로 감춘다면 기존 부모 클래스 기능을 오버라이딩 하여 부모 필드에 접근이 필요 할 때는 getter/setter 같은 메소드를 만들어서 접근 해야 하는 걸까요?아래는 Car Class의 move 메소드를 GasCar Class가 재정의 하는 코드를 간략하게 작성해보았습니다public class Car { private int speed; public void move(){ speed++; System.out.println("speed : " + speed); } protected int getSpeed() { return speed; } protected void setSpeed(int speed) { this.speed = speed; } } public class GasCar extends Car{ @Override public void move() { int speed = getSpeed() + 2; setSpeed(speed); System.out.println("speed : " + speed); } } 따라서 상속 관계라도 일반 객체를 사용하는 입장과 동일하게 캡슐화를 해야 하고, 확장의 여지를 두고 부모 클래스의 필드에 접근하는 메소드를 만들어야 하는것인지 궁금합니다!
-
미해결김영한의 실전 자바 - 기본편
메모리 영역에 관해서 질문드릴게요
이 코드에서요 메서드영역,스택영역,힙영역이 조금 헷갈려서요public static void main(String[] args)이 main메서드는 스택영역이고public static int sum(int[] array){ int sum = 0; for (int sum1: array) { sum += sum1; } return sum; }이 sum 메서드는 메서드 영역,int[] array 매개변수는 heap영역sum메서드안에 있는 변수들은 stack영역 이렇게 이해하면될까요?
-
미해결스프링 핵심 원리 - 기본편
어노테이션 사용법에 대해 (feat: @ComponentScan.Filter)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. "컴포넌트 스캔과 의존관계 자동 주입 시작하기" 강의를 듣던 중 궁금한 것이 생겼습니다. 다른 언어를 주로 사용한 제가 자바 어노테이션에 익숙하지 않아서 생기는 궁금증인 것 같습니다. 위의 코드를 보면 @ComponentScan의 인자로 @ComponentScan.Filter가 사용되는 것을 볼 수 있습니다. 근데 특이하게 '@'가 붙어있습니다. 반대로 Configuration는 어노테이션인데도 불구하고 "@Configuration.class"가 아닌 "Configuration.class"라고 쓰입니다. 왜 어떤 것은 @가 붙고 어떤 것은 @이 안 붙는지 알 수 있을까요? reference로는 뭘 보면 될까요?
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext가 여러 인터페이스를 상속받은 것이 어느곳에 활용되는지 잘 모르겠어요.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. "BeanFactory와 ApplicationContext" 강의를 보던 도중 궁금한 것이 있어 질문을 드립니다. ApplicationContext가 단순히 BeanFactory를 넘어 여러 강력한 기능을 제공하기 위해 다른 인터페이스도 상속한다고 합니다. 그런데 EnvironmentCapable를 제외하고 다른 인터페이스들이 ApplicationContext에서 무엇을 위해 활용되는지 잘 모르겠습니다. MessageSource, ApplicationEventPublisher, ResourceLoader들이 ApplicationContext 인터페이스에서 실무에서 어떻게 응용되는지 알 수 있을까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
no frameworks detected
안녕하세요. 다운 받은 소스파일을 실행하려고 하는데 강의에서 나온 순서로 진행했는데도 no frameworks detected 나와서 어떻게 해결해야 할 지 모르겠어서 질문드립니다.JDK21 사용중입니다.
-
해결됨스프링 핵심 원리 - 기본편
@Configuration 어노테이션 지정하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]메인 메서드에서 스프링 컨테이너를 생성하고 AppConfig 클래스를 구성 정보로 쓰기 위하여 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class)를 하였습니다.그런데 AppConfig클래스를 환경 설정해주는 구성 정보 클래스로 지정하기 위해서 @Configuration 어노테이션을 지정하였는데 앞에서 AppConfig.class로 지정해줄 거면 굳이 @Configuration어노테이션으로 지정하는 이유가 궁금합니다
-
미해결김영한의 실전 자바 - 기본편
12.다형성과 설계.pdf 파일 오타 제보합니다.
김영한님 안녕하세요.유스방에서 늘 신세지고 있는 레이지 로딩 입니다.2년차 주니어로 일하며 기초가 제대로 잡히지 않았는데 너무 기술에만 집착하는 제 자신을 보며 초심으로 돌아가야 겠다고 마음먹은 참에 마침 감사하게도 자바 기초 강의를 내주셔서 감지덕지하며 공부하고 있습니다. 강의 보는 중 오타 발견하여 남겨둡니다. 먄약 -> 만약지난 3월에 출시하신 [스프링 부트] 강의에 이어 또 한번 강의에 미약하게나마 도움을 드릴 수 있어 영광입니다.내년에 또 인프콘에서 인사드릴 수 있으면 좋겠습니다.지식을 공유해 주셔서 항상 감사합니다.
-
해결됨객체 지향 프로그래밍 입문
객체의 기능보다 속성을 먼저 추출하는 것에 대해 의견을 여쭤보고 싶습니다.
안녕하세요. 강사님.객체는 제공하는 기능으로 정의된다!=> 회원 객체 (암호 변경하기 기능) 대부분의 프로그램은 정보 표현을 위한 데이터(구조체, 객체)는 존재하기 마련일텐데요. 제가 생각하기에 회원이라는 객체는 초기 설계 과정에서 제공해야 될 기능에 중점을 두기보다는 "일반적으로 표현해야 될 정보에 기반(표현 정보 = 관리해야 될 데이터)해서 추출되지 않나?" 가 저의 생각입니다.여기서 궁금한점은 표현해야 될(관리해야 될 데이터) 정보를 구조화한 것에 관련된 데이터를 조작하는 기능을 추가해도 외부에 제공하는 기능으로 정의된다는 말씀은 만족한다고 볼 수 있을까요 ?제가 강의를 듣고 정리하자면 객체를 설계할 때는 외부에 제공할 기능에 중점을 두고 설계를 해야되는 것이라고 받아들였는데 기능보다 데이터가 중심이 되는 구조체성 자료에 기능을할당하는 것도 올바른 방향인건지 여쭤보고 싶습니다. 감사합니다!
-
미해결김영한의 실전 자바 - 기본편
문제 풀이의 메소드에 public이 들어가는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]메모리구조와 static의 강의 부분에서 정답을 보면 메소드 부분에 public static ~~~로 시작하는 모습을 볼수가 있는대 public을 붙이는 이유가 있을까요?? 문제 조건에는 public을 붙여야 한다는 말이나 비슷한 어구(어디서든지 사용이 가능해야하며 등)도 없고 default로도 문제에서 요구하는 기능을 구현하는데 문제가 없어서요. 순수하게 궁금한 마음에서 여쭈어봅니다.