묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
DIP, OCP
[질문 내용]관심사의 분리 영상에서 김영한 강사님께서 DIP를 지킨 것을 강조하고 있는데 제가 보았을 때는 DIP도 지키고 OCP도 지켜진 것을 확인하였습니다. 그러나 OCP도 지켰다는 것은 왜 얘기를 안 하시는지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
다른 섹션ppt도 받을 수 있을까요?
강의 자료모음 섹션에 다운 받았더니 Intro하고 Outro.pdf 밖에 없더라구요. 다른 섹션ppt도 받을 수 있을까요?
-
미해결파이썬 알고리즘 트레이딩 파트1: 알고리즘 트레이딩을 위한 파이썬 데이터 분석
quota 할당량 요청이 안됩니다.
트러블 슈팅 강의 내용대로 해도 안되서 일단 서포트 접수했는데 생각보다 대응이 오래걸리는것 같습니다.혹시나 해서 aws로 12개월 무료체험 하는쪽으로 만들어서 접속해봤는데 생각보다 느리더라구요 비슷한 문제를 겪는 수강생 중 해결된 케이스가 있다면 공유 부탁드립니다.
-
미해결코틀린 고급편
2강부터 영상 재생이 안되네요ㅠㅠ
2강부터 영상 재생이 안되네요ㅠㅠ
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
count 값 1107116232 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의에서 volatile을 적용하지 않은 예제에서MyTask flag값을 false로 바꾸고 count값을 출력했는데 이때MyTask Thread의 캐시메모리에있는 값을 메인메모리로 업데이트하고, Main Thread는 메인메모리에있는 count값을 캐시메모리에 동기화해서 갖고온걸까요? 출력할 때 컨텍스트 스위칭이 일어났다고 가정하면, 1_100_000_000이 출력될거라 생각했는데 궁금해서 질문드립니다!
-
미해결스프링 핵심 원리 - 기본편
ReteDiscountPolicy의 discount 메소드 블록
[질문 내용]4분 50초 쯤에 할인계산하는 코드에서 return price * discountPercent / 100 부분을 저는 return price / discountPercent라고 하였는데 두 개 다 계산으로는 모두 같은 값이 나오는데 return price / discountPercent 이렇게 해도 상관없죠?
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
클래스 로더 및 로딩 과정 16:00초에 질문 있습니다.
안녕하세요 강의 잘 보고 있습니다.다름이 아니라 클래스 로더 및 로딩 과정 16:00초에 질문이 있는데요.링킹 준비 단계에서 "객체 인스턴스가 저장될 메모리 공간을 확보하고 0으로 초기화"라고 되어 있는데, 제가 알기로는 클래스 수준의 정적 필드가 기본값으로 초기화로 알고 있습니다.객체 인스턴스는 객체가 생성 되었을 때 기본 값으로 초기화가 이뤄지고 생성자가 있을때 말씀처럼 초깃값이 다시 설정 되는걸로 알고 있는데요. 제가 잘못 이해 한걸까요.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
추상 클래스와 인터페이스에 대해서 궁금한 것이 있습니다.
안녕하세요 ㅎㅎ좋은 강의 제공해주셔서 감사합니다. 추상 클래스와 인터페이스 사용 시점에 대해 궁금한 것이 있습니다. 제가 처음에 생각한 내용은추상 클래스 : 부모 클래스와 자식 클래스가 공통으로 제공하는 내용(메서드)도 존재하지만, 자식클래스 별로 다른 내용을 제공할 때는 abstract 메서드를 사용하여 구현을 강제시킨다.인터페이스 : 부모와 자식 간에 공통으로 가지는 내용(메서드 내용이 동일한)이 없으므로, 상속받는 클래스가 반드시 메서드를 구현한다. 그런데 JAVA8부터 인터페이스에 default 메서드가 추가되었더군요.인터페이스에 default 메서드를 선언하면, 인터페이스를 상속받는 클래스에서 구현을 하지 않고도 사용할 수 있더라구요.interface Shape { final int SIZE = 5; void render(); default int getSize() { return SIZE; } } class Rectangle implements Shape { @Override public void render() { StringBuilder buffer = new StringBuilder(); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { buffer.append("*\t"); } buffer.append("\n"); } System.out.println(buffer); } }public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int input = sc.nextInt(); Shape shape; if (input == 0) { shape = new Rectangle(); } else { shape = new Triangle(); } shape.render(); System.out.println(shape.getSize()); } } 그렇다면 default 메서드가 추상 클래스의 일반 메서드(추상 클래스가 아닌)와 동일하게 작동하게 되는데public abstract class Shape { public static final int SIZE = 5; public abstract void render(); public int getSize() { return SIZE; } }추상 클래스와 인터페이스를 사용하는 시기(?)를 어떻게 구별해야할까요? 구글링을 해보니 인터페이스에 default 메서드가 추가된 이유가 추후에 인터페이스에 새로운 메서드를 추가했을 때, 해당 인터페이스를 상속하고 있는 클래스에서 오류가 발생하지 않기 위해서라고 하는데그 오픈소스가 엄청 유명해져서 전 세계 사람들이 다 사용하고 있는데, 인터페이스에 새로운 메소드를 만들어야 하는 상황이 발생했다. 자칫 잘못하면 내가 만든 오픈소스를 사용한 사람들은 전부 오류가 발생하고 수정을 해야 하는 일이 발생할 수도 있다. 이럴 때 사용하는 것이 바로 default 메소드다. 결론적으로 내용을 정리하게 되면추상 클래스에서 새로운 메서드를 추가해야 한다면 abstract를 추가하지 않는다.인터페이스에서 새로운 메서드를 추가해야 한다면 default 메서드를 사용한다.default 메서드가 추가 되면서 추상 클래스와 인터페이스를 언제 사용해야 하는지 잘 모르겠습니다...! 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
SOLID 원칙
SOLID 5가지 원칙 중에 OCP 개방-폐쇄 원칙을 설명하는 도중 7:25 쯤에 private MemberRepository memberRepository = new MemoryMemberRepository(); 에서 JdbcMemberRepository() 객체 구현으로 변경할 시 private MemberRepository memberRepository = new JdbcMemberRepository(); 라고 나오는데 OCP의 원칙이 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다고 설명되어있습니다. 그런데 방금 변경된 코드에서 보면 private MemberRepository memberRepository 이 코드는 동일하게 되어있다는 것입니다. 도대체 무엇때문에 김영한 강사님께서 코드 변경 안하고 좀 안되지 않냐고 말씀하신지 알려주세요.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
future 가 자바스크립트의 promise 랑 비슷한 역할을 하는거라고 생각해도 될까용 ??
JS 의 Promise 랑 개념이 비슷한거 같아서요 !! MDN 설명Promise 는 프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자로, 비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기를 연결할 수 있습니다. 프로미스를 사용하면 비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있습니다. 다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '프로미스(promise)'를 반환합니다.
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
[실습3-2] MyString에 복사 생성자 만들기에서 deepCopy( ) 메서드 리턴 타입
안녕하세요. 정말 별거 아닌 질문이지만..[실습] MyString에 복사 생성자 추가 1:50초에서 deep copy를 위한 메서드를 만들라고 하실 때 메서드의 리턴 타입을 MyString으로 하라고 하셨는데..void라고 이해해도 될까요?.. 좋은 강의 감사히 잘 보고 있습니다. 항상 건강하세요!
-
미해결스프링 핵심 원리 - 기본편
스프링부트, 스프링컨테이너, 서블릿 컨테이너 관계
안녕하세요 선생님강의를 계속 듣다가 문득 스프링부트, 스프링컨테이너, 서블릿 컨테이너의 관계에 대해 궁금한 점이 생겨 질문 드리려고 합니다. 스프링 부트 안에 스프링 컨테이너와 서블릿 컨테이너가 모두 있다스프링 컨테이너와 서블릿 컨테이너는 다르다.스프링 컨테이너와 서블릿 컨테이너는 서로 상호협력적인 관계이다. 위의 3가지가 모두 참인가요?
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
보이지 않는 임시 객체 9:48초에 질문 있습니다.
안녕하세요 강의 잘 보고 있습니다.보이지 않는 임시 객체 9:48초에 질문이 있습니다.자바 컴파일러가 String s1 = "Java";를 String s1 = new String("Java");로 변환한다고 하셨는데 자바 컴파일러는 변환 하는것이 아닌걸로 이해하고 있어요.. String은 리터럴 방식과 객체 생성 방식이 다르게 관리되고 있는걸로 알고 있는데 혹시 제가 잘못 이해를 하고 있는건가 싶어서요.
-
미해결김영한의 실전 자바 - 기본편
접근제어자 2번 문제 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]전체 가격 합을 출력하는 부분(26~28번째 줄)에 대한 질문입니다. 강의에서는 해당 부분을 내부에서만 사용되는 메서드를 만들어 호출했는데, 저는 메서드 대신 위 사진에 sum이라는 변수를 private로 선언하여 작성하였습니다. 코드 동작에는 문제가 없는 것으로 확인되는데 이렇게 작성하는 건 지양하는 방법인지 궁금해서 질문합니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]volatile이라는 키워만 (X)=> volatile이라는 키워드만 (O) 추가로 오탈자나 조금 어색한 문장들이 보였는데 그런게 보일때마다 어디로 공유드리면 될까요?
-
해결됨김영한의 실전 자바 - 중급 2편
문제와 풀이3 stack - 히스토리 에서 ArryDeque 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. stack 2번째, 문제 풀이 를 보면서 궁금증이 생겨서 질문을 남깁니다.문제 풀이를 듣던 도중에 영한 님이 history를 만들 때, ArryDeque를 이용해서 만들었던 것을 볼 수 있었습니다. 그러다가 계속 듣다 보니까 갑자기 이런 생각이 들더라고요.(어떤 분이 '자바 성능 비교 표' 올린 영향도 있습니다.)'앞으로만 추가하니 LinkedList가 더 빠르지 않을까?' 라는 생각 이요. 그런데 ArrayDeque를 왜 사용했을까? 생각 해보니 '앞으로만 추가 하지만, 여러 가지 이용할게 더 많아서 ArrayDeque 를 사용 했다.' 인데 이것도 추측이라서 정확하지 않네요.그래서 LinkedList 대신 ArryDeque를 사용한 이유를 자세히 알고 싶습니다.답변 부탁 드립니다.
-
미해결김영한의 실전 자바 - 중급 2편
안녕하세요. 문의드립니다.
직접 구현하는 Set1 - MyHashSetV1 강의중public class MyHashSetV1 { static final int DEFAULT_INITIAL_CAPACITY = 16; LinkedList<Integer>[] buckets; private int size = 0; private int capacity = DEFAULT_INITIAL_CAPACITY; public MyHashSetV1() { buckets = new LinkedList[capacity]; for (int i = 0; i < capacity; i++) { buckets[i] = new LinkedList<>(); } }이렇게 생성자에 객체를 생성하는데클래스 필드에 객체를 생성하지 않고생성자 안에서 생성하는 이유가 무엇인지 궁금해서 문의드립니다.
-
미해결김영한의 실전 자바 - 기본편
문제 1번 Rectangel
문제만 보고 풀었을 때, Rectangle이렇게 정의하고RectangleOopMain에서이렇게 작성했는데, 이렇게 문제를 풀이해도 객체지향으로 변경한게 맞나요? 실행시켰을 때 값은 동일하게 나와서 정답인 줄 알았는데, 문제 풀고 강의 들어보니 정답과 달라서 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
스트림 람다식 관련해서 강의 언제나올지
계속해서 영한님 강의를 들으니 이해도 잘되고 재미도 있어서 제가 백엔드 개발자가 되기위해 계속 노력할 수 있는 것 같습니다. 궁금한점은 제가 코딩테스트 문제를 계속 연습하고있는데 거기서 stream/lambda 식이 많이 활용되어서이대로는 풀으나 마나라고 생각해서 먼저 그부분부터 알고자 학습을 진행중입니다.혹시 스트림/람다 강의는 언제 열리는지랑 지금 과정을 알아여지 람다/스트림 과정의 이해가 쉬워지는 지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
그림 그리느라 고생하셨습니다 !! 😘😘😘