inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

값을 안넘겨주면 똑같이 저도 에러가 나긴 하는데 왜 콘솔창에는 warn이 안뜰까요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 강의에서는 warn이 뜨고 name이 없다라는 콘솔문구가 뜨는데 저는 창을 들어가보면 에러는 똑같이 나는데 warn이 안뜨네여..

  • java
  • spring
  • mvc
  • spring-boot
댓글 2 좋아요 1 조회수 333

8분 12초 10분 55초 질문 있습니당

해결됨

홍정모의 따라하며 배우는 C언어

8분 12초와 10분 55초에서 *pt와 arr[0] 둘 다 식별자는 아니지만 표현식을 통해서 메모리 공간에 접근하는 것인데 *pt는 오브젝트를 가리킨다고 표현하고 arr[0]은 오브젝트라고 표현하는게 이해가 잘 안되요 그러니까 arr[0]이 표현식이라는건 납득이 되는데 오브젝트라는건 납득이 안되요 변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼 표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요? 실제로 *pt는 표현식이지만 메모리 공간에 접근한다고 해서 오브젝트라고 부르지 않잖아요 항상 좋은 답변 정말 감사합니다.

  • c
용개형멋져 댓글 1 좋아요 1 조회수 191

Merge 관련해서 질문드립니다.

미해결

실전! 스프링 데이터 JPA

안녕하세요 영한님, 정말 좋은강의 잘 듣고있습니다. Merge관련해서 질문이 하나있는데요..! 아래 두 method 모두 시작할때 persistence context가 비어있고 찾는 entity가 db에 있다고 가정할때 비슷한 (혹은 같은) flow로 진행될까요? 여기서 method parameter, Entity e,는 업데이트될 (id가 set되어있고 field가 업데이트 되어있는)객체입니다. @Transactional public void updateEntity(Entity e){ Entity foundEntity = em.find(Entity.class, e.getid()); foundEntity.setFieldOne("New Data"); } @Transactional public void updateEntity(Entity e){ em.merge(e); } Merge를 꼭 써야하는건 아니지만, 그냥 동작 메커니즘이 궁금해서 질문드립니다. Merge를 쓰는게 Update전에 항상 Select query로 db에서 객체를 조회하기때문에 쓰기를 지양하라고 하시는건가요, 아니면 merge를 쓸때 또 다른 downside가 있나요?

  • spring
  • spring-boot
  • jpa
  • java
SeokHoon Kim 댓글 1 좋아요 0 조회수 231

지역변수의 지속기간에 대한 궁금증

해결됨

홍정모의 따라하며 배우는 C언어

안녕하세요, 문뜩 지역변수의 지속기간에 대한 궁금증이 생겼습니다. 집중해서 강의들을 봤었는데 놓친부분이 있는건지 개념을 까먹은건지 헷갈리는 부분이 있습니다. 궁금한 부분이 위 사진인데요 분명 지역변수의 영역은 {}블록 범위라고 하셨습니다. 안쪽 {}영역 안에 생성한 지역변수 i는 영역밖을 나오면 스택에서 사라진다고 들었습니다. 그래서 바깥 영역에서 포인터변수를 만들고 안쪽영역에 변수i를 생성한 뒤 포인터변수에 주소를 넣고 바깥 영역에서 값을 대입도 해보고 출력도 해본 결과 영역을 벗어나서 사라졌다고 생각한 변수 i의 메모리 주소도 잘 출력이 되고, 대입한 결과도 제대로 출력이 되었습니다. 이런 경우는 어떤 경우인지 궁금합니다. 물론 바깥 영역에서는 변수 i의 값을 직접 수정하지 못하고 포인터 변수를 통해 수정이 가능하고 문법적으로 별로 안좋아 보이기도 한 것 같은데 저런 현상이 메모리에서 어떤식으로 되는건지 궁금합니다.

  • c
김민수 댓글 1 좋아요 2 조회수 242

stdio.h 내 puts 함수 구현을 직접 볼 수 있나요?

해결됨

독하게 시작하는 C 프로그래밍

안녕하세요 널널한개발자님 강의 재밌게 보고 있는 1인 입니다ㅎㅎ 강사님께서 구현코드는 디버깅 과정에서 보여지지 않는다고 하셨는데, 볼 수 있는 방법이 있을까요? 모든 프로그래밍 언어의 기본이 되는 언어라고 배웠는데 실제구현을 볼 수 없다는 게 제 수준에서는 의아합니다. 찾아보니 소스파일 외의 구현코드를 찾기가 어렵고 챗지피티도 명쾌한 대답을 주지 못해서 질문 남깁니다. 여러번 질문했는데 항상 잘 답변해주셔서 감사드립니다~

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
에이치더블유 댓글 2 좋아요 0 조회수 346

동기와 비동기

해결됨

Windows 시스템 프로그래밍 - 기본

다중 코어 환경에서는 os가 스레드를 처리할때 동시성과 병렬성을 무조건 다써서 처리하나요? 친화력 조절을 안한다면.. 1번이 그렇다라면 코어가 4개(스레드 4개)인 컴퓨터에서 하나의 프로세스에서 3개의 스레드가 추가로 실행되어 총 4개의 스레드가 존재할때 추가된 3개의 쓰레드가 각각 2초짜리 입력 요청을 하나의 파일에 요청한다고 할때 cpu (idle~적당히) 동기 : 최소 2초 ~ 최대 6초 (block) 비동기 : 최소 2초 ~ 최대 6초가 맞을까요? 이렇게 볼때 비동기가 동기보다 좋은 이유가 block 되지않고 코드를 더 실행하는것 하나 뿐인가요? 이후에 다른 작업들이 더 많아지면서 비동기가 빛을 발하게 되는건가요?

  • c
  • system-programming
  • vc++
도롱뇽YouTube 댓글 1 좋아요 0 조회수 216

문자열 포인터와 문자열 배열의 대한 질문

해결됨

홍정모의 따라하며 배우는 C언어

안녕하세요. 11강에서 질문을 드려야 했는데 이번 강의를 보고 한번 정리하고 가고자 질문을 드리게 되었습니다. 질문을 좀 더 자세하게 하기 위해 메모리 레이아웃 사진첨부를 하였습니다. const char* str = “Constant string”; // str is a modifiable lvalue. str = “Second string”; // “Constant string” = “Second String” // imposible str[0] = ‘A’; //Error char str2[] = “String in an array”; str2[0] = ‘A’; // OK 이번 강의에서 나온 코드를 가지고 개념 정리를 하고 싶습니다. 코드에 쓰인 문자열은 어디에 저장이 되는가? 이번 강의에서 쓰인 문자열 포인터 char* str = “Constant string” str = “Second string” 그리고 문자열 배열 char str2[] = “String in an array” 여기에 쓰인 모든 문자열 “Constant string”, “Second string”, “String in an array” 은 TEXT Segment 즉 프로그램 코드에 저장이 되는 걸로 알고있습니다. 맞을까요? 문자열 포인터와 문자열 배열의 차이 문자열 포인터는 TEXT Segment에 저장되어 있는 문자열의 메모리 주소를 가리키는 것이다. 즉 읽기 전용에 저장되어 있기 때문에 str[0] = 'A'와 같이 수정하려 하면 OS에서 막는다. 이걸 VS에서 디버깅으로 확인을 해보았습니다. 먼저 const char* str = “Constant string”;을 확인 해보았습니다. str 포인터 변수가 가리키고 있는 메모리 주소를 메모리에서 찾아 보았습니다. 검색을 해보니 문자열의 시작 문자 'C'의 메모리 주소를 가리키고 있으며 문자열의 끝인 g 다음엔 \0이 붙어있는 걸 확인할 수 있었습니다. 여기서 str = “Second string”; 구문을 만난다면 str 포인터 변수가 가리키고 있는 메모리 주소가 문자열의 시작 문자'S'의 메모리 주소를 가리키고 있는걸 확인하였습니다. 그리고 문자열의 끝인 g옆에는 \0이 붙어있는걸 확인할 수 있었습니다. 그럼 여기서 문자열 배열은 어떤 식이냐 일단 문자열 포인터와 문자열 배열에서 사용한 문자열들은 TEXT Segment에 저장이 되어있기 때문에 메모리에서 보면 사용한 문자열들이 나란히 있는 걸 확인할 수 있었습니다. 하지만 디버깅을 통해 현재 문자열 배열인 str2[]의 메모리 주소를 보면 인걸 확인할 수 있었습니다. 분명 저 문자열이 저장되어 있는 메모리 주소 : 0x00007FF648499C10 이랑 전혀 틀린 주소입니다. 검색해보면 똑같은 문자열이 해당 메모리 주소에도 있는걸 확인하였습니다. 위와 같은 내용을 통해 알수 있었던 것은 프로그램 만들때 사용한 모든 문자열은 TEXT Segment(읽기전용)에 저장이 되며 문자열 포인터는 TEXT Segment에 있는 "문자"의 메모리 주소를 가리키는 것이며 문자열 배열은 스택이라는 (읽기, 쓰기전용)메모리 공간을 할당받고 TEXT Segment에서 문자열들을 복사해오기 때문에 str2[0] = 'B' 같은 수정이 가능한 것이다. 라고 이해를 하였는데 제대로 이해한게 맞을까요? 마지막으로 문자열 포인터를 사용하는 이유? 마지막 질문은 제가 생각을 해보았습니다. 수정도 못하는 문자열 포인터는 왜 사용할까? 생각을 해보았는데 프로그램을 보면 분명 수정이 필요없는 고정된 문자열들을 본적이 있습니다.그런것들을 사용할 때 불필요하게 TEXT Segment에 저장이 되었다가 스택 메모리를 할당 받고 데이터를 "복사"해서 사용하면 메모리 낭비가 일어나고 어떤 행위를 하는 것 이기 때문에 불필요한 과정을 하기 때문에 이런 것들은 그냥 TEXT Segment에 저장 되어있는 문자열의 주소를 가리켜서 사용하면 메모리 절약을 할 수 있는 관점에서 사용하는 것 일까요?

  • c
김민수 댓글 2 좋아요 2 조회수 301

섹션 4. 회원 도메인 개발-회원서비스 개발에 대해 질문있습니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

섹션 4. 회원 도메인 개발-회원서비스 개발에 대해 질문있습니다. 테스트 junit으로 테스트 실행시 아래와 같은 에러가 나옵니다. Execution failed for task ':test'. > No tests found for given includes: [jpabook.jpashop.Service.MemberServiceTest](filter.includeTestsMatching) package jpabook.jpashop.Service; import static org.junit.Assert.*; import jpabook.jpashop.domains.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; //메모리db로 test import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals; @RunWith(SpringRunner.class) @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(savedId)); } // @Test // public void 중복회원예외() throws Exception { // //given // // //when // // //then // // } } 에러 사항을 찾아보니 디렉토리 위치가 다를 경우에 에러가 날 수 있다고 하여 디렉토리 위치를 비교해봐도 같습니다. junit테스트도 동일합니다. 어느 부분이 틀린지 알 수 있을까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
zzzzz 댓글 1 좋아요 0 조회수 245

getchar와 scanf의 차이

해결됨

독하게 시작하는 C 프로그래밍

char ch = 0; scanf_s("%c", &ch, 1); printf("%d", ch); char ch = 0; ch = getchar(); printf("%d", ch); 여기서 scanf_s와 getchar의 차이가 뭔가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
차희원 댓글 1 좋아요 0 조회수 443

어떤 경우 cascade 를 적용해도 되는지 이해가 되지 않습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 스프링 cascade 활용도 측면에서 궁금한 것이 있습니다. 영한님 - 인프런 (inflearn.com) 이 질문을 남겼었던 수강생입니다! 잠깐 상황을 요약하면 Program 과 Review 그리고 User 가 다대 1 1대 다 로 묶여 있는 상황입니다. program 에서 program.addReview 메서드를 활용하기 위해 cascade type 을 적용하였었습니다. 하지만 영한 님은 이부분의 코드는 별로 좋은 코드가 아니다! cascade 옵션 질문 - 인프런 (inflearn.com) 를 참고해서 보아라. 라고 하셨습니다. 위 질문의 요약은 강의에서 Order 는 OrderItem 을 개인 소유 하나, Order 와 Delivery 는 Delivery 가 여러 곳에서 참조할 수 있으므로 개인 소유 하지 않는다. 라고 읽었습니다. 참조 하는 것과 Cascade Type .all 이 무슨 관계가 있는지 모르겠습니다. 6줄요약하면: Delivery 와 Review 는 여러 곳에서 참조할 수 있으므로 CascadeType all 을 붙이지 말라고 하신 것 같은데 여러 곳에서 참조가능성이 있으면 CascadeType all 을 왜 붙이지 말아야 하는지 궁금합니다. 단순히 계속 코드를 보며 추적해야 하는 것 때문인가요?? 이 부분이 와닿지 않습니다. 혹시 실제 예를 들어 설명해주실수 있나요??

  • java
  • jpa
dionisos198 댓글 2 좋아요 0 조회수 464

맥으로수강

미해결

혼자 공부하는 C 언어 저자에게 배우는 C 언어의 모든 것

맥으로수강하기 괜찮을까요? 에어 m1입니다

  • c
mingang1022 댓글 1 좋아요 0 조회수 285

맥으로수강

미해결

C 프로그래밍 - 입문부터 게임 개발까지

맥으로 수강하기 괜찮을까요? 에어 m1입니다

  • c
mingang1022 댓글 1 좋아요 0 조회수 205

비선형 자료구조

해결됨

독하게 되새기는 C 프로그래밍

혹시 비선형 자료구조 강의를 만드실 생각이 있으신가요? 있으면 듣고 싶네요 ㅎㅎ

  • c
  • kernel
  • secure-coding
  • 자료구조
TMI_JUNG 댓글 1 좋아요 0 조회수 325

시스템 프로그래밍에서 c와 c++

해결됨

Windows 시스템 프로그래밍 - 기본

시스템 프로그램 함수 매개변수에 NULL을 사용할때 c식으로 코딩하려면 NULL이고 c++식으로 코딩하면 nullptr로 써두는게 협업에서 도움이 되나요? 시스템 프로그래밍이나 소켓프로그래밍에서 scanf와 printf문,char배열을 쓰는것보다 cout,cin,endl,string을 쓰는게 성능 차이가 많이 나나요?

  • c
  • system-programming
  • vc++
도롱뇽YouTube 댓글 2 좋아요 0 조회수 363

memcpy 사용 후 free 함수 사용여부

해결됨

독하게 시작하는 C 프로그래밍

memcpy 의 내부동작을 설명하실때 동적메모리할당 구문이 있었는대 이 부분은 free 로 안닫아줘도 괜찮은건가요??

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
김상한 댓글 2 좋아요 0 조회수 336

구현과 삼항연산자의 대한 질문.

해결됨

홍정모의 따라하며 배우는 C언어

#include <stdio.h> void swap(int* xp, int* yp); void printArray(int arr[], int size); void selectionSort(int arr[], int n); int main() { int arr[] = { 64, 25, 12, 22, 11,}; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); printArray(arr, n); return 0; } void printArray(int arr[], int size) { for (int i = 0; i < size; i++) printf("%d\n", arr[i]); } void swap(int* xp, int* yp) { int tmp = *xp; *xp = *yp; *yp = tmp; } void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int* min_idx = &arr[i]; for (int j = i + 1; j < n; j++) { min_idx = (*min_idx < arr[j]) ? min_idx : &arr[j]; } swap( min_idx, &arr[i]); } } 선생님의 빈 칸 맞추기를 공개하시기 전에 문제를 생각하여 풀어봤습니다. 여러 숫자를 집어넣어봐도 잘되는 것 같습니다. 이 코드가 문제없이 잘 작동하는 코드일까요? 그리고 여기서 삼항연산자를 썼는데 삼항연산자가 자주 쓰이는 연산자 인가요?

  • c
김민수 댓글 1 좋아요 3 조회수 206

3.2버전 gradle 설정에 대한 문제

해결됨

실전! Querydsl

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. 이게 현재 프로젝트 이고 plugins { id 'java' id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } group = 'study' version = '0.0.1-SNAPSHOT' java { 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' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } //querydsl 추가 시작 def querydslDir = file('build/generated/querydsl') querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } 현재 gradle설정인데 Querydsl 설정과 검증 부분에서 막혔어요 클린해서 q파일 지우고 테스트 코드 런하면 아래 에러가 나타나고 error: Attempt to recreate a file for type study.querydsl.entity.QHello 이후에 q파일이 생성 된 후에는 error: Could not find class file for 'study.querydsl.entity.Hello'. 에러가 반복되네요.. https://www.inflearn.com/questions/1086099 다른분들 설정파일 따라해도 안됩니다..

  • java
  • jpa
먼산 댓글 2 좋아요 3 조회수 2674

함수와 재귀함수(1)이 가지는 반환값

해결됨

홍정모의 따라하며 배우는 C언어

#include <stdio.h> int start; int loop(int n); long recursive_factorial(int); int main() { int b = recursive_factorial(5); printf("your final destination is % d", b); return 0; } long recursive_factorial(int n) { if (n != 0) { // recursion 함수 : it is called "재귀호출" and tail recurision in english printf("%d\n", n); return n * recursive_factorial(n - 1); } printf("hki"); // 이 줄 없을때는 그냥 120 출력된다. 그러나 이 줄 추가했더니 뭔가 다르다. //출력스트링의 길이가 반환값인가? hi 일때 최종값 240, hki일때 최종값 360이네(120씩 증가한다.), 근데 한글은 길이 한 번 늘때마다 240씩 증가하네? } 코드입니다. 팩토리얼 예제를 얼떨결에 직접 풀었지만, 궁금증이 가시지 않아 질문 올립니다. 첫 번째, recursive_factorial(2)는 2 * 동일한 함수의 (1)을 반환값으로 갖습니다. 이때 함수(1)의 반환값은 어찌 되나요? 두 번째, 주석으로 남겨둔 내용의 이유가 궁금합니다.

  • c
상인김 댓글 1 좋아요 2 조회수 400

2분 5초경 5분 37초경 질문있습니다.

해결됨

홍정모의 따라하며 배우는 C언어

5분 37초 ch = fgetc(fp); 로 버퍼에 문자들을 채우고 거기서 1글자를 가져오고 for (int i = 0; i < sizeof(buffer); ++i) printf("%c", buffer[i]); printf("\n"); 로 버퍼에 있는 내용들을 전부 출력해보면 fgetc() 함수로 가져온 문자를 포함해 모든 문자가 출력되는 걸 볼 수 있는데 제가 알기로는 버퍼에 있는 내용을 복사를 하면 복사를 한 내용이 버퍼에서는 지워지는 걸로 알고 있는데 그렇다면 버퍼에서 먼저 fgetc() 함수로 가져온 문자가 지워져서 버퍼의 내용들을 출력할 때 그 문자는 제외되어야 하는 것 아닌가요? 제가 버퍼에 대해 잘못 이해하고 있는 건가요?

  • c
용개형멋져 댓글 1 좋아요 2 조회수 181

5분 44초경 질문있습니다.

해결됨

홍정모의 따라하며 배우는 C언어

fsetpos() 함수가 어떻게 작동하는지 이해가 잘 안돼서 fpos_t pt; pt = 10; fsetpos(fp, &pt); ch = fgetc(fp); printf("%d %c\n", ch, ch); fgetpos(fp, &pt); printf("%lld\n", pt); 위의 코드 다음에 fsetpos(fp, &pt); ch = fgetc(fp); printf("%d %c\n", ch, ch); fgetpos(fp, &pt); printf("%lld\n", pt); 이런 식으로 코드의 일부분을 추가로 복사 붙여넣기하여 실행하면 어떻게 될지 궁금해서 실행을 해봤더니 이런 결과가 나왔습니다. 실행하기 전에 결과를 예상해봤는데 똑같이 K가 출력되거나 K의 다음칸에서 10칸만큼 더 이동을 해서 V가 출력될 줄 알았습니다 그런데 제 예상과는 완전 다른 결과가 나와버렸네요 아마 읽고나면 한 칸 이동을 하는 특성 때문에 그렇게 되는 거 같은데 그게 어떻게 작동하길레 저런 결과가 나오는지 궁금합니다. 항상 좋은 답변 정말 감사합니다.

  • c
용개형멋져 댓글 1 좋아요 1 조회수 233

인기 태그

인프런 TOP Writers

주간 인기글