묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관적 락을 사용할 떄 차이점
@Version만 붙여도 자동으로 낙관적 락을 적용 시켜주는 걸로 알고 있습니다. 근데 강의에서는 @Lock(LockModeType.OPTIMISTIC) 을 이용해서 조회 시점부터 락을 거는 이유가 있을까요?@Lock(LockModeType.OPTIMISTIC) 를 제거하고 동시성 테스트 했을 떄도 정상적으로 돌아가긴 합니다. 어떤 차이가 있을까요
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
애그리거트의 repository
안녕하세요 토비님! 애그리거트를 사용할 때 질문 사항이 있습니다.예) A도메인 B도메인이 있다 A는 애그리거트 루트이고 B는 A의 부속 엔티티이다.A와 B는 일대다, 다대일의 양방향 의존성을 가진다.B는 A를 통해서만 조작될 수 있다.이 때 B를 생성하거나 업데이트 할 때 B의 repository는 어디에 존재해야 하는가?@Entity public class A { @OneToMany(mappedBy = "media", cascade = CascadeType.ALL, orphanRemoval = true) private List<B> bs = new ArrayList<>(); public void updateNumber(long n){ this.bs.stream().forEach(b -> b.update(n); } } @Entity public class B { @ManyToOne(fetch = FetchType.LAZY) private A a; private long number; public void update(long n){ this.number = n; } } 이렇게 되어 있다고 할 때 변경 가능성을 생각할 때(물론 엔티티에서 이미 jpa에 기술을 사용하고 있긴하지만) B의 repository를 따로 가지는게 맞나요? 만약 따로 가진다면 B의 repository가 A repository에서 의존하여 처리 되어야 하나요?jpa에 완전 종속적으로 사용하면 B가 따로 repository를 가질 필요 없는데 순수함을 유지하지 하려 하니 이 부분에서 고민이 되네요. 아니면 이런 고민 자체가 잘못된걸까요?
-
미해결김영한의 실전 자바 - 중급 1편
래퍼클래스 박싱 출력
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요 예[질문 내용]안녕하세요 자바 래퍼클래스 강의를 듣다가 궁금해서 질문 남깁니다. 래퍼클래스 생성 (=박싱)하고나서 변수를 출력을 해보면 생성자에 주었던 값이 출력되게 되는데요.래퍼 클래스는 기본형을 객체화 시킨것이라고 알고 있고, 그렇기 때문에 변수에는 객체기 때문에 참조값이 들어가야한다고 알고있는데 왜 참조값이 아닌, 객체에 들어있는 멤머 변수 값이 출력이될까요?ㅠ
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
생성자 호출순서
19분 21초 null나온 이유가 msg에 값이 초기화 되기 전에 호출해서 null이라고 하셨는데 초기화 여부를 아는 방법이 생성자? 문장이 끝나야 초기화 되는 건가요? 초기화 하려고 하는 구문이 끝나지 않은 상태이면 초기화 되지 않은 상태이다 이렇케 이해해도 되는 부분인가요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
성능 측정시
이력서에 넣을 성능을 측정할 때단순한 쿼리 실행 속도나 API 응답 속도까지로컬이 아니라 aws에 띄워서 비교하는 게 좋을까요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
28강 8분 54초 Electric Car 문제 질문드려요
ElectricCar() 이 자식이라 부모를 불러와야한다는건 알겠는데 불러오는 부모가 class Car 을 불러오는건가요,아님 public Car() 을 불러오는건가요? public Car() 를 불러오는거라 "Car created" 만 출력하는거고 그 밑에 있는 startEngine() 은 부르지않는게 맞는건지 궁금해요
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
다차원 배열 포인터 변수 선언할때
포인터 조작과 출제패턴 강의 27:07초에서 다차원 배열 포인터 변수 선언할때 왜 괄호를 *ptr 에 씌워주는지 궁금하네요. 원래 그런 방식으로 사용하기로 합의가 된건가요?
-
미해결코드로 배우는 스프링 웹 프로젝트 - Basic
강좌 만료 문의 22~24강
웹으로는 강의가 플레이되지만 앱에서는 22,23,24 강좌가 실행이 안되고 만료되었다고 하는데 확인후 조치 해 주세요.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
시험 10일남은 시점에서 공부법 조언 부탁드립니다.
시험 20일전에 수강신청해서10일만에 이론강의 다듣고기출문제 풀이 보다가 정말 풀수 있는 문제가하나도 없어서 다시 이론쪽 보고있습니다.. 이론강의 볼땐 1배속으로 모르는부분은 다시 보면서이해는 다 됐다고 생각했는데기출에 응용을 아예 못하고 있습니다.. 2일정도는 pdf암기한다고 가정하면코드 공부기간은 일주일 남은 시점인데다시 이론부분을 봐야할꺼요?이해가 안가도 기출을 봐야할까요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
업캐스팅 문제 예시 8번 관련 다른 문제
class Car { String model; int year; Car() { System.out.println("Car constructor"); } void start() { System.out.println(model + " start"); } void stop() { System.out.println(model + " stop"); } } class ElectricCar extends Car { ElectricCar() { System.out.println("ElectricCar constructor"); } void stop() { System.out.println(model + " stop and power down"); } void checkBattery() { System.out.println(model + " check battery"); } } public class Main { public static void main(String[] args) { ElectricCar eCar = new ElectricCar(); eCar.model = "Tesla Model 3"; eCar.year = 2021; eCar.start(); eCar.stop(); eCar.checkBattery(); } }위 예제는 다른 예제인데요. checkBattery() { System.out.println(model + " check battery"); } }이 부분은 부모 클래스에 함께 가지고 있지 않은데 이건 다른건가요? 제가 의심하는걸로는 업캐스팅 문제 예시 8번에 나와있는건 public void고, 저 문제에서는 그냥 void인데 pubilc 유무와 관련이 있을까요?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Domain Expert가 정확히 어떤 역할을 하는 사람인가요?
도메인 모델을 만들기 위해서는 Domain Expert에게서 듣고 배워야 한다고 말씀하셨는데, 이들의 정확한 역할이 잘 이해가 가지 않습니다.온라인 서점을 예로 들자면 제 머리속에 상상되는 Domain Expert는 실제 서점을 운영하는 사장님이 떠오르는데 강의에서는 회사에서 해당 일을 오랫동안 해 오신 분이나, 관련된 시스템을 개발해 본 경험이 있는 시니어 개발자 같은 사람을 Domain Expert라고 말씀 주셨습니다.그렇다는건 Domain Expert 라는 역할은 이 회사가 개발하고 있는 서비스를 가장 잘 알고 있는 사람 (그것이 개발자가 되었든, 디자이너, po와 같은 비 개발자가 되었든)이라고 이해해도 되는 것일까요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
python 24분 30초 람다와 출력문
python 기출변형에서 24분 30초쯤 나오는 람다와 출력문 문제에서 결과값을 낼 때, print()로 되어있는데 결과값이 한줄씩 띄워서 나오나요?println만 한줄씩 띄우는게 아닌가요?
-
미해결알면 칼퇴하는 Spring Boot 백엔드 바이브 코딩 맛보기
소리가 잘 들리지 않는 부분이 있습니다.
중간중간 소리가 잘 들리지 않는 구간이 있습니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
Java: 상속정리문제10개 / 5:37 / 부모 생성자 호출 문의
안녕하세요.Child()에 명시적으로 부모 생성자를 호출하는 문구가 있어서 [Parent: 5[Parent default 가 호출되는 것 이해했습니다.그럼 Child(){ 안에 super()가 없고, this.display()부터 시작하는 상태라도 출력값은 동일한가요?자식 생성자 생성 전에 부모 생성자 먼저 생성돼야 하고, 부모 클래스에 기본 생성자가 정의되어 있으니까요.감사합니다.
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
메서드 문제와 풀이2에서 마지막 문제 이렇게 풀어도 괜찮은 건가요..?
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================package method.ex; import java.util.Scanner; public class MethodEx4 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int balance = 0; while (true) { System.out.println("---------------------------------"); System.out.println("1.입금 | 2.출금 | 3.잔액 확인 | 4.종료"); System.out.println("---------------------------------"); int userChoice = scan.nextInt(); System.out.println( "선택: "+ userChoice); if (userChoice == 1) { System.out.print("입금액을 입력하세요: "); int depositAmount = scan.nextInt(); balance = deposit(balance, depositAmount); } else if (userChoice == 2) { System.out.print("출금액을 입력하세요: "); int withdrawAmount = scan.nextInt(); balance = withdraw(balance, withdrawAmount); } else if (userChoice == 3) { System.out.println("현재 잔액: " + balance); } else { System.out.println("시스템을 종료합니다."); break; } } } public static int deposit(int balance, int depositAmount) { balance += depositAmount; System.out.println(depositAmount + "원을 입금하였습니다. 현재 잔액: " + balance + "원"); return balance; } public static int withdraw(int balance, int withdrawAmount) { if (balance >= withdrawAmount) { balance -= withdrawAmount; System.out.println(withdrawAmount + "원을 출금하였습니다. 현재 잔액: " + balance + "원"); } else { System.out.println(withdrawAmount + "원을 출금하려 했으나 잔액이 부족합니다."); } return balance; } }
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
오타(?) 발견
킬구형 3장. 작전1: 관계형 데이터베이스 읽고 쓰기 (테이블의 심장에 처형장을 세우다 ☠) 읽고있는데 뭔가 오타같은거 발견한거같아
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
[수정]업캐스팅 / 3:40 / 생성자 호출 관련 문의
안녕하세요.직전 강의에서 객체 생성 시 가장 먼저 생성자를 실행해야 한다고 설명해 주셨습니다.그런데 본 강의 예제에서는 생성자 메서드를 실행하지 않네요.업캐스팅인 경우에는 생성자를 실행하지 않는건가요?감사합니다.수정: 다른 질문을 보니 생성자를 실행하는 것 같네요.4:00 예제의 경우Car 생성자: Tesla Model 3 2021ElectricCar 생성자: 75 kWh(이하생략)부모, 자식 생성자가 각각 이렇게 출력된다고 답변해 주셨는데, 이건 둘다 기본 생성자가 없어서 그런거 맞나요?만약 Car 클래스에 파라미터 없는 기본 생성자가 있었으면부모 클래스에는 기본 생성자 실행, 자식 클래스에는 파라미터 있는 생성자 실행이 되는게 맞나요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
강의 복습하면서 생긴 질문
태현님 안녕하세요! 해당 강의를 듣던 중 의문점이 있어서 질문을 드릴려고 합니다.public class Person { private final String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // getter, setter 생략... }위와 같은 예제 코드가 있다고 하면 위와 같은 코드를 코틀린으로 변경하면 강의에서는 아래와 같다고 하셨습니다. class Person( val name: String, val age: Int, )이러면 자동으로 getter/setter를 자동으로 만들어주신다고 하셨는데요. 저는 이것이 자동으로 만들어주는게 아니라 당연하다고 생각합니다. 왜냐하면 프로퍼티 접근 제어자가 public이니까요!자바도 public으로 변경하면 코틀린처럼 필드에 접근해서 사용이 가능하다고 생각이 드는데요. 이런 케이스에 대해서 태현님의 의견을 좀 더 듣고 싶습니다. 또한, 당연히 코틀린에서는 getter를 호출하겠지만 필드 자체를 private으로 두지 않으면 객체지향 원칙중에 하나로 캡슐화가 좋지 못하다는 판단이 들더라구요! 또한 코틀린에서는 접근제어자를 private으로 두면 당현한 이야기지만 강의에서 설명주신 것처럼 접근이 안되서 강제 getter/setter를 만들어야 하는데 이것에 대해도 듣고 싶습니다. 다음 질문으로는 생성자 관련 질문입니다.자바는 아래처럼 생성자를 여러개 만들 수 있습니다.public class Person { private String name; private int age; public Person(String name) { this.name = name; } public Person(String name, int age) { this.name = name; this.age = age; } // getter, setter 생략... }논리적으로 도메인 흐름상 하나의 파라미터만 있는 생성자는 사용되지를 않겠지만 이런 케이스에서 코틀린은 어떻게 처리가 가능할까요? 코틀린에서는 설명해주시기로 부생성자로 만들지만 부생성자는 주생성자를 호출해야 하는 꼴로 가야한다고 답변을 주셔서요! 이에 대해 궁금합니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2-11. 임시반장정하기 (Runtime Error)
이미지와 같이 Runtime Error 발생하여, 검토 요청드립니다.import java.util.*; public class Main { private int solution (int i1, int[][] i2) { int r = 0; int rt = 0; for (int i = 0; i < i1; i++) { int t = 0; boolean[] s = new boolean[i1]; for (int j = 0; j < 5; j++) { for (int k = 0; k < i1; k++) { if (i2[i][j] == i2[k][j]) { s[k] = true; } } } for (boolean a: s) { if (a) { t++; } } if (t > rt) { r = i; rt = t; } } return r + 1; } public static void main(String[] args){ Scanner in = new Scanner(System.in); int input1 = in.nextInt(); int [][] input2 = new int[input1][input1]; for (int i = 0; i < input1; i++) { for (int j = 0; j < 5; j++) { input2[i][j] = in.nextInt(); } } System.out.println(new Main().solution(input1, input2)); } }
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
08분01초 질문이요!
*p 는 해당주소의 값 X 이해됐어요 *p++ 는 해당주소의 값을 가져오고 1만큼 이동해서 출력값은 X이며 가리키는 주소는 A이해됐어요 ++*p 여기서는 왜 가리키는 주소가 1만큼 증가되는것이 아닌 값 A에 +1인지 이해를 하지 못하겠어요...