안녕하세요! 강의를 듣던 도중에 의아한 부분이 있습니다. 8분 43초 부터 들은 바에 의하면 문자열 리터럴 로 생성한 문자열은 (1) Runtime Constant Pool에 저장되고, (2) 사용되는 시점에 String Contant Pool 에 복사된다. new 키워드 로 생성한 문자열 객체는 String Constant Pool 에 저장된다. (이 내용은 10분 28초 ) 위 내용을 다음 사진처럼 표현해보았습니다. 여기서 한 가지 의아한 부분이 있는데요. 문자열 리터럴과 new 키워드 로 생성한 문자열 객체 둘 다 String Contstant Pool 에 저장된다면, 동일성 비교에서 true 가 반환되지 않을까요?? 그러나 실제로는 동일성 비교를 하면 false 를 반환하게 됩니다. 제가 이해했던 바로는 문자열 리터럴은 String Constant Pool에 저장 되고, new 키워드를 통한 문자열 객체는 Heap 영역 에 저장되기 때문에 동일성 비교에서 false를 반환한다 라고 생각했습니다. String s1 = "hello"; String s2 = "hello"; String s3 = new String("hello"); s1 == s2; // true s1 == s3; // false 결론적으로 제가 궁금한 부분은.. new 키워드 로 사용한 문자열 객체는 String Constant Pool이 아닌 단순히 JVM Heap 영역 에 저장되는 것이 맞지 않는지 궁금합니다! 좋은 강의 감사합니다!! (11분 08초에 natvie 오타가 있는 것 같습니다!)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 코드를 작성하였을 때 예제에는 정상정답이 나오고, 저도 반례를 찾지 못하는데, 채점에서는 오답이라고 나옵니다. 어느부분이 오답인지, 그리고 반례가 뭐가 있을지 궁금합니다.ㅠㅠ import java.util.*; public class Main { public static class schedule implements Comparable<schedule>{ int pay = 0; int day = 0; schedule(int p,int d) { this.pay = p; this.day = d; } @Override public int compareTo(schedule o) { if(this.day == o.day) return o.pay - this.pay; else return o.day - this.day; } } public void solution(List<schedule> list) { Collections.sort(list); int answer = 0; int day = list.get(0).day; Queue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder()); for(schedule s : list) { if(day == s.day) { queue.offer(s.pay); } else { if(!queue.isEmpty()) { int p = queue.poll(); answer += p; } queue.offer(s.pay); day--; } } System.out.println(answer += queue.poll()); } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); List<schedule> list = new ArrayList<>(); for(int i=0; i<n; i++) { int pay = kb.nextInt(); int day = kb.nextInt(); list.add(new schedule(pay, day)); } T.solution(list); } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 오랜만에 다시 복습하러 들어와서 처음부터 보는데 역시 설정이 반이네요 ㅎㅎ h2 측에서 DB 자동 create를 막아두면서 시작부터 막히신 분들이 많은것같습니다. h2에서 제공하는 데이터베이스 직접 생성 방식을 사용하는 것을 권장드립니다. 링크 강의와 동일하게 진행하기 위해서는 URL 입력부분만 잘 입력해주시고 나머지 모두 엔터로 넘어가신 후에 quit로 탈출하시면 됩니다.
먼가 막연한 질문같아서 질문해도 될지 모르겠는데요.. hanoi(3, "A", "C", "B); 4개의 변수를 이용해서 함수를 호출하셨는데 강의에서 말하기전에 저 스스로 A에서 C로 원반을 옮기려면 1. 원반 3이 일단 C로 가야겠네 2. 그럴려면 원반 2가 기둥 B에먼저 가고, 원반 1이 나중에 올라와야겠네 . 2를 하려면 원반 1이 기둥 c에 가야겠네 이런 식으로 먼저 생각까지는 됐었는데 hanoi함수를 정의하기 까지의 과정을 어떤식으로 제가 해야할지 모르겠어서요... 4개의 매개변수와 4개의 매개 변수가 원반숫자, from, to, temp 를 의미하는것을 의미하면서 함수선언을 어떻게 할 수 있을까요..?? 하위문제가 해결된상태에서 현재문제를 해결한다는 것은 이해가 되어서 앞선 강의 제곱, 스트링길이구하기 등.. 은 스스로 함수를 정의할 수 있었던것 같은데.. 하노이는 먼가 막연하게 암기하는 느낌이라서 여쭤봅니다.
강의를 들으며 공부하다 궁금한 점이 생겨 질문 드립니다. 초반 부분에서 Redis는 RAM에 데이터를 저장한다고 말씀해주셨습니다. 그리고 장바구니 구현 설명에서 set을 활용하여 쉽게 구현하는 방법을 설명해주셨는데 장바구니라는 것이 담기만 하고 실제 구매로 이어지지 않을 수 있어 데이터를 계속 가지고 있어야 할 필요가 있는 반영구적인 기능이라 생각하는데, TTL 설정을 따로 하지 않는 식으로 구현하면 될지 궁금합니다. 또한, 사용자가 늘어나면 늘어날수록 Redis, 즉 RAM에 저장되는 데이터 또한 늘어날 것이라 생각하는데 이와 관련하여 발생할 수 있는 메모리 문제 같은 것은 없는지 궁금합니다.
=================================== [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요, 수업을 열심히 따라가며 코드를 작성해보면서 궁금한 점이 생겨 이렇게 질문드립니다. 앞서 제네릭 부분에서 타입이레이져 방식 때문에 제네릭 타입정보는 컴파일 이후 모두 사라지고 타입변수의 상한타입으로 바뀐다고 이해하였습니다. 그래서 위 처럼 new 로 직접 타입변수 T의 인스턴스를 생성하거나 instanceof T 구문을 쓰지 못한다고 하셨습니다. 컴파일 이후에는 T에 대한 정보가 없으니까요. 그런데 리스트에서 제네릭을 사용하는 부분을 보면 LinkedList<T>처럼 제네릭 타입을 활용해 클래스를 정의하였고 내부에 new Node<T>(); 와 같은 부분이 있어 위의 언급한 내용과 상충하는 것 같아 이 경우는 왜 가능한지 의문이었습니다. 구글에서 찾기 쉽지않아 직접 T를 생성하는 것(new T(); )과 Node<T>를 생성하는 것(new Node<T>(e);)의 차이를 혼자 고민해보았습니다. T를 생성하는 것은 힙영역에 T 인스턴스를 생성하는 것인데 컴파일 이후 T에 대한 정보가 전혀 없어 T 직접생성이 불가능하지만, Node<T>의 경우 Node의 인스턴스를 생성할 때 T타입인 item이 있지만 이때 T타입의 객체를 생성하는 것이 아니라 언젠가 생성될 T객체의 참조값을 담을 변수만 선언하는 것일 뿐이고 이는 컴파일 이후 T의 정보가 없어 Object 타입으로 변수 item이 선언되더라도 후에 T타입의 객체(의 참조값)가 item에 할당될때 저절로 업캐스팅이 되어 문제없이 item변수를 사용할 수 있다고 결론내렸습니다. 이렇게 생각하면 문제없는걸까요?
데이터 전처리 강의 내용 중에 X_train 데이터와 X_test 데이터의 결측치를 동일하게 채워주라고 말씀해주셨고, X_train의 행삭제는 가능하지만 X_test의 행삭제는 하면 안된다고 말씀해주셨습니다. 이렇게 되면 X_train에서 결측치가 있다고 행삭제를 해버리면 X_test에서는 결측치가 있는 행이 그대로 남아있을텐데 X_train의 행삭제로 결측치를 해소하는 방법이 어떤 의미가 있는지 이해가 잘 되지 않아 문의드립니다.
예를들어 TSoftObjectPtr로 된 TSoftObjectPtr<class USkeletalMeshComponent> 타입의 포인터는 UPROPERTY() 로 설정하게 될 경우 TObjectPtr 과 마찬가지로 GC의 자동 수거대상에서 제외되는 않고 명시적으로 참조를 해제해야만 GC가 수거하게 되나요? 그리고 TObjectPtr 과 TSoftObjectPtr 전부 UPROPERTY()로 설정하지 않을 경우, GC 시스템에 의해 자동으로 메모리가 회수당하게 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의에서는 pointcut.setExpression 문자열에 컨트롤+마우스 좌클릭하면 선언부로 이동 되는데 저는 되지 않습니다. 인텔리제이 올팩 구독해서 쓰고 있습니다. 뭔가 설정같은게 달라서 그럴까요?
강의에서 설명하지 않으신 내용인데요 가능한지 궁금하여 여쭈어봅니다. Conda-forge 내에 postgresql package가 있습니다. ( Postgresql | Anaconda.org ) 물론 서비스 시에는 database 서버를 따로 두는게 좋다는건 수업 때 설명으로 이해하였습니다. 그러나 실 서비스 시 postgresql를 사용할 것이라면 개발 시에 sqlite 대신 위 package를 사용하는게 만약 더 적합할까요? 배포 과정 설명 시에 로드 밸런서가 작업을 서버에 할당해준다고 설명해 주셨는데, 보아하니 각 작업을 싱글 쓰레드로 할당하는 것 처럼 보였습니다. 장고의 경우 View 단에 multithread로 작업할 내용이 있다면, 어떻게 처리해야 하나요?