묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C++
선택정렬 관하여 다른 코드
이 원리도 맞을까요? 부등호만 반대로 바꾸면 내림차순이 되는 것 같은데 비효율적이진 않은지 궁금합니다.
-
미해결Next + React Query로 SNS 서비스 만들기
explore의 TrendSection에서 data를 useQuery가 아니라 getQueryData로 가져와서 사용해도 되나요?
(afterLogin)의 공통컴포넌트 TrendSection에서 fetch해온 데이터를 아래 코드처럼 explore의TrendSection에서 getQueryData로 가져와서 사용해도 되나요? 일단 잘 나오기는 하는데 제가 getQueryData를 잘 이해하고 사용하는건지 의문이 드네요... const queryClient = useQueryClient(); const data = queryClient.getQueryData(["trends"]);
-
미해결
미디어 쿼리 질문..
@use "@/styles/variables.scss" as *; @mixin text { color: $color-gray-50; line-height: 2.6rem; } @include desktop { .borderBox { position: fixed; bottom: 0; display: flex; width: 100%; min-width: 37.5rem; height: 10rem; padding: 3.7rem 23.8rem; flex-direction: column; align-items: flex-start; gap: 0.8rem; background: $color-gray-10; .contentBox { display: flex; justify-content: space-between; align-items: center; align-self: stretch; .company { @include text; } .customerSupport { display: flex; width: 18rem; align-items: flex-start; gap: 3rem; .privacyPolicy { @include text; } .faq { @include text; } } .sns { display: flex; align-items: flex-start; gap: 1rem; } } } @include tablet { .borderBox { padding: 3.2rem; } } @include mobile { .borderBox { height: 12.6rem; padding: 3.2rem; flex-wrap: wrap; .contentBox { flex-wrap: wrap-reverse; justify-content: space-between; .content { width: 35%; } .company { margin-top: 2.5rem; width: 100%; } .sns { justify-content: flex-end; } } } } } $breakpoint-mobile: 375px; $breakpoint-tablet: 744px; $breakpoint-pc: 1200px; @mixin mobile { @media (min-width: $breakpoint-mobile) { @content; } } @mixin tablet { @media (min-width: $breakpoint-tablet) { @content; } } @mixin desktop { @media (min-width: $breakpoint-pc) { @content; } }여기서 어느 사이즈든 모바일 미디어쿼리만 적용되고 있습니다.. 왜그런걸까요..
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
엠티프로젝트 만드는 것 관련해서 질문 있습니다.
안녕하세요?오랜만에 수업을 들으며 프로그램을 켰는데 예전과 달리 이런 창이 떠서요,수업에 나오는 엠티프로젝트를 만들려면 어떻게 설정해야 하는지 알려주시면 감사하겠습니다.감사합니다.
-
미해결따라하며 배우는 리액트 네이티브 기초
깃허브에서 클론받아온 파일을 실행하려면 어떻게 해야하죠..?
react-native run-ios 해도 안돼요...파일을 새로만들어서 하는게 아니라 클론받아서 하는건데 다른방법이있는건지궁금해요
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
백준 실행시 틀립니다.
안녕하세요 강사님. 문제를 풀고 백준에 제출했을 때 계속 오답으로 나와 질문 드립니다..제가 봤을 때 강사님 코드랑 거의 비슷하게 수정까지 한 것 같은데.. 어떤 부분이 잘못되었는지 확인 한번 부탁드립니다.import java.io.*; import java.util.StringTokenizer; public class Main { final static int MAX = 50 + 10; static boolean map[][]; static boolean visited[][]; /* static int dirY[] = {1, 1, 1, 0, 0, -1, -1, -1}; static int dirX[] = {-1, 0, 1, -1, 1, -1, 0, 1};*/ static int dirY[] = {-1, -1, 0, 1, 1, -1, 0, -1}; static int dirX[] = {0, 1, 1, -1, 0, -1, -1, -1}; static int N, M; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); while (true) { StringTokenizer st = new StringTokenizer(br.readLine()); M = Integer.parseInt(st.nextToken()); // 너비 x N = Integer.parseInt(st.nextToken()); // 높이 y if (N == 0 && M == 0) break; map = new boolean[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map 정보 반영 for (int i = 1; i <= N; i++) { st = new StringTokenizer(br.readLine()); for (int j = 1; j <= M; j++) { map[j][i] = Integer.parseInt(st.nextToken()) == 1; } } // 2. dfs int result = 0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (map[i][j] && !visited[i][j]) { dfs(i, j); result++; } } } // 3. 출력 bw.write(String.valueOf(result)); bw.newLine(); } bw.close(); bw.close(); } private static void dfs(int y, int x) { visited[y][x] = true; for (int i = 0; i < 8; i++) { int newY = dirY[i] + y; int newX = dirX[i] + x; if (map[newY][newX] && !visited[newY][newX]) { dfs(newY, newX); } } } }
-
미해결React + API Server 프로젝트 개발과 배포 (CI/CD)
vite 사용 안하고 CRA 프론트 백 분리시켜서 하고있는데 질문있습니다.
vite 사용 안하고 CRA 프론트 백 분리시켜서 하고있는데 질문있습니다.백엔드 서버에 그냥 node만 받아서 올려놨는데swagger options에 routes 디렉토리가 없으면 어떻게 작성하죠?루트에 index.js를 api 로 사용하는데 그럼 apis: ["./index.js"]이렇게 넣으면 될까요?그리고 swagger 사용에 router 폴더 없이 사용하려고 하는데, 어떻게 해야 스웨거로 넘어가죠??이미 api들은 다 작성한 상태구요
-
미해결입문자를 위한 자바스크립트 기초 강의
생성자 함수 관련 질문 드립니다
생성자 함수로 객체를 생성하기 위해선, new연산을 통해 객체를 반환해야한다고 하셨는데, 객체를 반환을 해야 객체가 생성이 되는건가요? 아니면 객체가 생성이 되고 반환이 되는건가요? 생성과 반환이라는 개념이 약간 헷갈리는 것 같습니다. Date() 는 함수인가요? 객체인가요? 그냥 생성자 함수를 반환하는 것과 생성자 함수로 객체를 생성해서 반환하는 것의 어떤 차이가 있나요? 아직 제 눈에는 둘이 비슷해보여서요.. 함수를 반환하는 것과 객체를 반환하는 것의 목적이 많이 다른건지 설명해주시면 정말 감사하겠습니다.. Dog 함수를 콘솔로 출력시,console.log(Dog)--> Dog 함수를 반환new 연산 + Dog 함수호출문을 콘솔로 출력시,console.log(new Dog())--> Dog 객체 반환
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
select문도 쓰기 지연에 포함인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 이전에 질문 남겼는데 좀 대충 작성했더니 질문이 이해 안간다고 하셔서..(ㅠㅠ) 다시 자세하게 작성합니다!질문 : em.find() 하면 select문이 나가잖아요? 이런 경우엔 쓰기 지연이 발생하는게 아닌 것 같다고 생각했는데 맞나요? (동일 트랜잭션 상에서 persist(insert)한 적이 없고, DB에 존재하는 엔티티를 조회한다는 전제입니다.)그렇게 생각한 근거는 1. 이름이 '쓰기' 지연이다. 2. find()한 후에 다음 줄에서 조회한 엔티티를 출력해보면 결과가 나온다.사소한 궁금증인데, 찾아봐도 안나오기도 하고, 강의에서는 update, insert, delete 시 쓰기지연이 발생한다' 라고만 언급하셔서 질문 남깁니다!
-
미해결김영한의 실전 자바 - 기본편
기본편 이후 학습 ...
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]입문편과 기본편까지 강의 다 듣고 다음 강의 기다릴 시간이 없어영상에서 말씀해주신 자바 예외처리와 자바 컬렉션 부분 공부를하려고 합니다. 혹시 추천해주실 강의나, 책 혹은 자료가 따로있으실까요?없다면 언제쯤 중급편 업로드 예정이신지 궁금합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part5: UE5 & IOCP 서버 연동
RecvBuffer는 락을 안둔다고 하셨는데 이럴경우는 어떡하나여?
틱 쓰레드를 하나두고 틱쓰레드에선 주기적으로 해야할 작업들을 하며, 무거운 작업을 처리해야 할때서버가 자기자신에게 Send 하는 식으로 PostQueuedCompletionStatus() 함수를 통해 Worker Thread로 작업을 넘기는데여이럴경우는 바로 Send 처럼 각자 세션들이 Recv를 하게 됩니다. 이런 구조면 ProcessRecv에서도 멀티쓰레드가 개입을 하기 때문에 락을 걸어야 할텐데 이 부분은 어떻게 생각하시나요? 실제 현업에서도 Recv에 락없이 사용하나요?제 구조가 잘못된 설계라고 보시나요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드 스튜디오 설정 - 플러터 닥터 오류
구글링으로 해결해보려고 했는데 실패했습니다 ㅠㅠ플러터 doctor check crashed 오류랑visual studio windows 10 sdk는 installer에서 설치했는데도 안되네요..도움 부탁드립니다!! ㅠㅠㅠㅠ
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
8강 서버 내부오류 어떻게 해결하죠..?
sql서버도 껏다가 다시 시작도 해보고포스트맨도 창 전부 지웠다 다시 하고 오류 없이 200ok나온것 확인도 하구인텔리제이 코드도 컴파일 잘 되는거 확인 했습니다..http://localhost:8080/v1/index.html 들어가서 이름 나이 입력하면 서버내부오류라고 나오네요답변해주시면 갑사합니다.그림 첨부하고싶어도 사진클릭이나 저장이 불가능하네요
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
강의를 듣다 잘못표기된게 있는것같아서 적습니다.
'Fast RCNN의 이해 14x7ROI 부분이 12x7로 보이는데 14x7이였다면 전체를 표기해야하지않나' 가 제 질문입니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문자열 슬라이싱
안녕하세요, 문자열 슬라이싱 관련 질문이 있습니다.문자열 a = 'abcde'가 있다고 할 때, print(a[::-1]) 을 실행하면 'edcba'로 문자열이 반대로 나오지만print(a[1:4:-1])처럼 [ : :-1]에서 시작하는 칸과 끝나는 칸에 그 어떤 수를 넣어도프린트가 되지 않습니다.유사하게 -1대신 -2, 등 음수는 되지 않는다는 것을 확인하였습니다.print(a[1:4:2])는 되는데 print(a[1:4:-1])이 되지 않는 이유는 무엇인가요?[ : : ] 에서 마지막에 음수를 넣으면 그 앞 두 칸에는 숫자를 넣을 수 없는 것인가요?
-
해결됨곰책으로 쉽게 배우는 최소한의 운영체제론
*pszResult =A; 포인터 사용 부분에 대한 질문입니다.
java 백엔드 개발자입니다.수업을 듣는 도중, 실제 물리 주소에 할당되지 않은 VMS 위치에 어떻게 접근하여 값을 할당하는지 이해가 잘 되지 않습니다.다른 질문을 읽어보면서 유추하건데, 제가 java 언어만 얕게 사용할 줄 알아서 C와 포인터에 대한 이해가 부족해서 그런것 같다는 생각이 들기도 합니다.C언어에서는, 실제 물리 메모리에 할당되지 않은 VMS 위치에 직접 접근하여 값을 할당할 수 있는 걸까요? 그게 강사님께서 말씀하신 포인터의 권력인걸까요?작년 말쯤 강사님께서 java에 대해 학습하시는 영상을 유튜브로 본 적이 있는데, java에서도 그러한 환경과 상황이 나올 수 있는 것일까요? 일반적인 웹 어플리케이션 개발을 하는 환경에서는 들어보지 못한 상황과 에러라서 궁금해서 질문 남깁니다!+ 유튜브 영상으로 올려주시는 조언과 공학 지식들을 잘 듣고 있습니다. 항상 좋은 내용들을 쉽게 전달해주셔서 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간초과 관련 질문 드립니다.
안녕하세요 선생님,http://boj.kr/748e160790bc4f178f9f9ec8afbd0054테스트 케이스는 통과했지만, 시간 초과가 떴습니다. 선생님의 코드와 비교했을 때, 대충 제 코드의 'find' 함수에서 맵 순회 부분이 매우 비효율적이라는 것 정도를 짐작할 수 있었습니다. 다만, 확실히 짚고 넘어가고 싶어 이렇게 질문을 드립니다.아래의 두 코드에서 시간복잡도 측면에서 어떤 차이가 있는지, 왜 선생님의 코드가 더 빠른지 정확히 알고싶습니다.위가 제 코드이고, 아래가 선생님의 코드입니다. 1. 제 코드는 특정 값을 찾기위해 모든 맵을 순회하고 있는데, 선생님처럼 코드를 짜면 특정 값을 찾기위해 맵을 순회할 필요가 없나요? 2. 제 코드는 모든 맵을 순회하면서 맵의 first값, second 값 모두를 비교합니다. 이부분도 시간복잡도가 커질 수 있는 여지가 있나요? 혹시 시간초과가 난 다른 이유가 있다면 알려주시면 감사하겠습니다!좋은 강의 늘 감사합니다:)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA 17분 오류 발생
강의 17분에서 통합테스트 돌렸는데 이런 오류가 뜹니다.어딜 하나 건드려서 지금 오류가 전부 뜨는 것 같은데클래스가 너무 많아서 어디가 오류인지도 잘 모르겠습니다..답변 기다리겠습니다.Hibernate: select m1_0.id,m1_0.name from member m1_0 where m1_0.name=?2024-01-28T22:17:30.817+09:00 WARN 11685 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 42104, SQLState: 42S042024-01-28T22:17:30.817+09:00 ERROR 11685 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Table "MEMBER" not found (this database is empty); SQL statement:select m1_0.id,m1_0.name from member m1_0 where m1_0.name=? [42104-214]org.hibernate.exception.SQLGrammarException: could not prepare statement [Table "MEMBER" not found (this database is empty); SQL statement:select m1_0.id,m1_0.name from member m1_0 where m1_0.name=? [42104-214]] [select m1_0.id,m1_0.name from member m1_0 where m1_0.name=?] at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:64) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:56) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:187) at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:76) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.lambda$list$0(JdbcSelectExecutorStandardImpl.java:102) at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:226) at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:163) at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:254) at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:134) at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19) at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:66) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:198) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:361) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:168) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:93) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0(ConcreteSqmSelectQueryPlan.java:110) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:303) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:244) at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:518) at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:367) at org.hibernate.query.Query.getResultList(Query.java:119) at hello.hellospring.repository.JpaMemberRepository.findByName(JpaMemberRepository.java:34) at hello.hellospring.service.MemberService.validateDuplicateMember(MemberService.java:33) at hello.hellospring.service.MemberService.join(MemberService.java:27) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:756) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:391) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:756) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at hello.hellospring.service.MemberService$$SpringCGLIB$$0.join(<generated>) at hello.hellospring.service.MemberServiceIntegrationTest.join(MemberServiceIntegrationTest.java:30) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138)
-
미해결스프링 핵심 원리 - 기본편
DI, IOC 등 모든 개념들이 API를 끌어다 쓸때 개념이죠?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. API 즉, 프레임워크를 불러다 사용시인터페이스의 의존해서 해당 라이브러리들을 당겨와서 사용하더라구요. 즉, IOC, DI 그리고 컨테이너 개념들은 pom.xml에 주입되어 사용되는 모든 도구, 엔진 들은 프레임워크 처럼 나 자신이 주도권을 가지는 것이 아니라 대부분 대신 해주죠?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 - 비즈니스 로직 stockQuantity 질문있습니다!
=====================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]상품 엔티티 개발(비즈니스로직) 강의엔티티 내에서 stockQuantity와 관련된 로직이 함께 있어 응집성이 높아짐 + 캡슐화에 부합 -> 관리하기 좋음 이렇게 이해를 했습니다.여기서 질문이 객체지향원칙 SOLID - SRP 단일책임 원칙에 의해 클래스는 하나의 변경 이유만 가져야 한다. 에서 비즈니스 로직을 추가함으로써 SRP 원칙을 위배한거라고도 볼 수 있을까요?맞다면 객체지향원칙 - SRP원칙을 위배했지만 좋은 코드 같긴한데 위 사례에서는 객체지향적 설계로 완벽하다고는 볼 수 없는건가요?객체지향 원칙을 굳이 무조건 따르지 않고 유연하게 코드 개발을 해나가는게 좋을까요?