제가 객체지향 처음배울때 이해하기 쉬웠던 비유를 적어놓을게요 클래스는 설계도와 같습니다 안에 어떤 데이터와 기능이 들어갈지 정의만 합니다 건축에서 건축 설계도와 같습니다 어떤 자재와 공간이 있을지 정의만 합니다 ( 설계도를 그려놨다 해서 실제 건축물도 생기는건 아닙니다 ) 객체는 건축물과 같습니다 설계도를 바탕으로 실제로 구현된 대상입니다. (네, 객체는 클래스를 기반으로 만듭니다) 즉, 객체는 클래스를 기반으로 구현된 구체화된 실체입니다. 그래서 클래스 정의 -> 객체 생성 이 절차를 따릅니다. 한 설계도를 기반으로 여러 건축물을 만들수 있듯이 클래스 하나를 설계하면 여러 객체를 만들수 있습니다 클래스 = 설계도 객체 = 구체화된 실체 감사합니다.
3분 43초경, 책임을 나누는 부류에서 "누가 해당 메서드의 변경을 유발하는 사용자인가"가 기준이 된다고 하셨는데, 메서드의 변경을 유발한다는 게 해당 메서드를 누가 호출하느냐? 어떤 사용자가 이 메서드를 사용하냐? 이렇게 이해하면 되나요? 메서의 변경을 유발한다는 의미가 해당 메서드를 이용한다는 의미인지? 정확히 메서드의 변경을 유발한다는 점이 무슨말인지 모르겠습니다.
임시영상 시청을 했습니다. 일단 확실한 답을 달라는건 아니고 제가 영상을 제대로 이해한게 맞는지 여쭤봅니다. 타겟값 0을 그냥 냅둔케이스가 삭제한케이스보다 조금더 안정적인걸까요? 영상에선 삭제한케이스의 오차값이 어마어마하게 커지는데 아무것도 안한케이스는 소폭의 차이밖에없는것 같아서요
안녕하세요 선생님 강의 잘 듣고 있는 학생입니다. 요즘 저의 custom dataset으로 여러 object detection 모델을 돌려보고 있는데 시작은 보통 pytorch의 pt모델로 학습을 시작을 하는데 제가 임베디드 시스템에서 돌려보고 싶어서 추론을 하고 싶어 PyTorch -> onnx -> tensorflow -> tflite 변환 구조를 따라가 최종 모델을 tflite로 구성하려고 하는데 양자화를 하지 않았는데도 tflite(float32) 성능이 아예 떨어져 pytorch에서는 잘 detect하던 모델이 아예 검출을 하지 못하는 상황이 발생하는데 혹시 이러한 상황이 아무래도 모델을 tflite로 축소하다 보니 자연스러운 상황인건지 이러한 상황을 극복하려면 데이터를 더 수집해서 성능을 높여야하는지 방법에 대해서도 좀 여쭙고 싶습니다. 감사합니다~
강의 잘 듣도 있습니다. 문의드릴내용은 PRD문서 의 API 문서 오퍼레이션명세 [행사정보조회] 의 경우, 한국관광공사 매뉴얼을 복붙하셨다고 했는데, 저는 아래처럼 되지 선생님처럼 안되거든요. 오퍼레이션 번호 6 오퍼레이션 유형 조회 (목록) 오퍼레이션명(국문) 행사정보조회 오퍼레이션 설명 행사/공연/축제 정보를 날짜로 조회하는 기능입니다. 콘텐츠 타입이 “행사/공연/축제”인 경우만 유효합니다. 선생님이 아래와 같이 하신 방법은 어떻게 가능한가요? 만드신 건가요? 아니면 뭔가 툴이 있을까여~ | 오퍼레이션 번호 | | 6 | 오퍼레이션 유형 | 조회 (목록) | | --- | --- | --- | --- | --- | | 오퍼레이션명(국문) | | 행사정보조회 | | | | 오퍼레이션 설명 | | 행사/공연/축제정보를날짜로조회하는기능입니다.
@Test void find() { Member member = memberRegister.register(MemberFixture.createMemberRegisterRequest()); entityManager.flush(); entityManager.clear(); Member found = memberFinder.find(member.getId()); assertThat(member.getId()).isEqualTo(found.getId()); } 현재 코드에서 위와 같이 테스트에서 회원 저장을 위해 memberRegister.register를 호출하고 있습니다. 그런데 memberRegister.register에는 단순히 회원을 저장하는 것 외에도 이메일 전송 같은 부가적인 로직이 포함되어 있습니다. 이러한 부가적인 로직때문에 테스트 속도가 느려진다던가, 테스트가 실패하는 원인이 될 수 있다고 생각이 들었습니다. 이처럼 테스트 준비에 필요하지 않은 부가 로직까지 수행되는 상황에서, memberRegister.register를 테스트 준비 용도로 사용하는 것이 적절한지 토비님의 생각이 궁금합니다.
도메인 모델에서의 검증과 애플리케이션 레벨 검증의 경계에 대해 질문드립니다. 현재 도메인 모델에서는 이메일 형식이 올바른지, 닉네임이나 비밀번호가 null이 아닌지 같은 최소한의 조건만 검증하고 있습니다. 반면, 비밀번호가 8자 이상인지, 닉네임이 5자 이상인지 같은 검증은 애플리케이션 레이어에서 처리하고 있습니다. 그런데 닉네임이 5자 이상이어야 한다 같은 규칙도 도메인 규칙으로 볼 수 있지 않을까 라고 생각이 들어 해당 검증 역시 도메인 모델에서 처리하는게 맞지 않나 라는 생각이 드는데, 도메인 모델에서의 검증과 애플리케이션 레벨 검증의 경계는 어디까지 두는 게 좋은지 토비님 의견이 궁금합니다. 말씀하신것을 토대로 예측해 봤을때 형식이나 정책적 요구사항(변경 가능성이 있는 규칙)은 애플리케이션 레이어에서, 도메인의 본질적 불변 조건은 도메인에서 검증하는 걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. auto plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 교안에 나온 대로 설정해 준 상태인데 현재 q타입 클래스는 생성 되었지만 intellij가 이를 정상적인 클래스로 인식하지 못해서 QHello를 import하지 못하고 있는 상황입니다
제가 강의에서 이해한 바로는 example/1 과 같은 단일 리턴값에는 캐쉬를 적용해서 db의 부하를 줄일 수 있다고 생각했습니다. 하지만, search?title=딩코&tag=백엔드…” 와 같은 복합 검색 조건을 기반으로, 백만 건 이상의 데이터 중에서 동적 쿼리를 사용해 10개씩 페이지네이션하여 가져오고 있습니다. 이 경우에는 쿼리마다 값이 달라지니 미리 레디스에 값을 반영할 수도 없는 상황입니다. 그리고 DB에서는 10개의 값을 리턴시키는데, 이런 상황에서는 캐시를 사용할 수 없는 건가요? 반드시 인덱스를 통해서만 성능을 확보해야 하나요?
아래 동일한 질문이 있어서 봤는데 그냥 암기하라고 하셔서 다시 질문드려봅니다. 일단 설명이 틀린 것 같은데 자세하게 다시한번 봐주세요. (7:12)(설명중)먼저 정적메서드에서 인스턴스변수를 접근하려고 한다 -> ??? 정적메서드에서 인스턴스메서드를 접근중인거 같은데요? 설명이 명확하지 않는 부분이 있어서 질문 드려봅니다
Member#create() 메서드를 register로 공통언어를 바꾸셨는데, 뜻이 모호해진 것 같아서 질문드립니다! 제가 생각하기에 register(등록)이라는 단어는 생성과 영속화라는 두가지의 행위를 함축한 단어로 느껴집니다. 따라서 MemberService#register()는 너무 자연스럽습니다. 실제로 Member를 생성한 후에 MemberRepository를 통하여 영속화까지 하는 내용으로 구현되어있습니다. 하지만 Member#register()는 이와 다르게 Java 객체를 생성하기만 하는 것이라, 메서드명과 실제 동작이 불일치한다고 느껴집니다. 하지만 또 동시에 도메인 모델을 글로 작성하는 과정에서 '멤버를 등록한다.' 라는 말을 쓰는 것은 자연스럽습니다. 그 구현이 코드적으로 Member에 있는 것만이 부자연스럽습니다. 이런 경우에는 Member라는 객체만으로 도메인 모델을 온전히 표현해내기가 어려운 것일까요? 해당 모델을 표현하기 위해서는 MemberService 같은 코드가 꼭 필요한 걸까요?