inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

4분 45초경 질문

미해결

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

arr과 arr[0]모두 arr[0][0]을 가리키지만 arr의 타입은 int (*)[3]이고 arr[0]의 타입은 int* 이다. 따라서 arr + 1은 &arr[0] + 1이고 arr[0] + 1은 &arr[0][0] + 1이다. 이게 맞나요? arr과 arr[0] 모두 arr[0][0]을 가리키는데 포인터 산술 연산을 하면 결과가 다르게 나와서 헷갈렸는데 수박 선생님이 전에 답변해 주신 걸 보고 나름 이해를 해봤어요 선생님이 아마 arr과 arr[0]의 자료형이 다르다고 하셨던 거 같은데 맞나요? 그 때 답변을 봐도 제가 이해한 게 맞는 건지 확신이 안 드네요.

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

필수 실습문제 '*' 출력놀이 응용 부분 관련 질문

해결됨

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

#include <stdio.h> int main(void) { for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { if (i + j < 4) printf(" "); else printf("*"); } printf("\n"); } for (int i = 0; i < 5; ++i) { for (int j = 0; j < 9; ++j) { if (i + j < 5 || j - i > 5) printf(" "); else printf("*"); } printf("\n"); } return 0; } 이런 식으로 코드를 짰는데 제가 보기엔 제 코드에 문제가 없는데 삼각형 문제에서 출력 결과가 사진과 같이 나와요 i가 4이고 j가 8일 때 왜 "*"이 아닌 " "가 출력 되는지 모르겠어요.

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
김곤용 댓글 1 좋아요 0 조회수 363

매개구조체 포인터?없이 이중포인터로 원래 구조체접근

미해결

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

안녕하세요 이 글은 제가 오개념을 가지고 그냥 운좋게 실행되는 코드를 짜낸것인지 좀 불안한 마음이 역력해서 드리는 질문글입니다. 10:51 부분이며 교수님께서 짜신 read_books2 함수는 (포인터가 널인지 아닌지 체크하는 유효성 검사 코드 같은 것들은 생략했습니다) void read_books2(const char* filename, struct book** books_dptr, int* n_ptr) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n_ptr); struct book* books = (struct book*)calloc(*n_ptr, sizeof(struct book)); for (int i = 0; i < *n_ptr; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", books[i].name, books[i].author); } fclose(fp); *books_dptr = books; } 이고, 제가 작성한 코드는 void read_books2(const char* filename, struct book** books_dptr, int* n) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n); *books_dptr = (struct book*)calloc(*n, sizeof(struct book)); for (int i = 0; i < *n; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); } fclose(fp); } 입니다. 전체코드는 맨 아래에 있습니다. 교수님께서는 함수 내부에 새로운 구조체 포인터 *books 를 만들어서 파일로부터 읽어들인 값들을 정리했고 그 구조체의 주소값을 *books_dptr = books 를 통해 원래 main함수 안에 있던 my_books 로 직접 넘겨주셨습니다. 그런데 저는 매개없이 가져온 주소에 직접 *books_dptr = (struct book*)calloc(*n, sizeof(struct book)); 이렇게 메모리를 조정해줬고 (교수님께서는 = 좌변에 직접 새로운 구조체 포인터를 만드셨습니다) 후에 fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); 처럼 txt파일로부터 읽은 것을 함수매개변수를 통해 가져온 주소에 직접 가서 값을 넣었습니다. 혹시 이 방식에서 우려하실 부분은 없으실까요? 감사합니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <conio.h> #define SLEN 101 #define FILE_NAME "books.txt" struct book { char name[SLEN]; char author[SLEN]; }; void print_books(const struct book* books, int n); void write_books(const char* filename, const struct book* books, int n); struct book* read_books(const char* filename, int* n); void read_books2(const char* filename, struct book** books_dptr, int* n); int main() { int temp; int n = 3; struct book* my_books = (struct book*)malloc(sizeof(struct book) * n); if (!my_books) { printf("malloc() has failed"); exit(EXIT_FAILURE); } my_books[0] = (struct book){ "The Great Gatsby", "F. Scott Fitzgerald" }; my_books[1] = (struct book){ "Hamlet", "William Shakespeare" }; my_books[2] = (struct book){ "The Odyssey", "Homer" }; print_books(my_books, n); printf("\nWriting to a file...\n"); write_books(FILE_NAME, my_books, n); free(my_books); n = 0; printf("Done.\n"); printf("\nPress any key to read data from a file.\n\n"); temp = _getch(); read_books2(FILE_NAME, &my_books, &n); //my_books = read_books(FILE_NAME, &n); print_books(my_books, n); free(my_books); n = 0; return 0; } void print_books(const struct book* books, int n) { for (int i = 0; i < n; ++i) { printf("Book %d : \"%s\" written by \"%s\"\n", i + 1, books[i].name, books[i].author); } } void write_books(const char* filename, const struct book* books, int n) { FILE* fp = fopen(filename, "w"); fprintf(fp, "%d\n", n); for (int i = 0; i < n; ++i) { fprintf(fp, "%s\n%s\n", books[i].name, books[i].author); } fclose(fp); } struct book* read_books(const char* filename, int* n) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n); struct book* lits = (struct book*)calloc(*n, sizeof(struct book)); for (int i = 0; i < *n; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", lits[i].name, lits[i].author); } fclose(fp); return lits; } void read_books2(const char* filename, struct book** books_dptr, int* n) { FILE* fp = fopen(filename, "r"); fscanf(fp, "%d%*c", n); *books_dptr = (struct book*)calloc(*n, sizeof(struct book)); for (int i = 0; i < *n; ++i) { fscanf(fp, "%[^\n]%*c%[^\n]%*c", (*books_dptr)[i].name, (*books_dptr)[i].author); } fclose(fp); }

  • c
Echapper4 댓글 1 좋아요 1 조회수 304

GenerationType.IDENTITY Null값 허용 안 되는 에러

미해결

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

안녕하세요. 기본 키 맵핑에서 GenerationType.IDENTITY 관련 부분 질문드립니다. GenerationType.IDENTITY는 PK를 입력하지 않아도 auto increment라고 해서 저절로 생성되는 거 아닌가요? 그런데 이런 에러가 떴습니다. ERROR: NULL not allowed for column "ID"; SQL statement: 답변 부탁드리겠습니다. 감사합니다! package hellojpa; import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String username; public Member() { // 기본 생성자가 하나 있어야 함 } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import javax.transaction.Transaction; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // EntityManagerFactory는 application 로딩 시점에 딱 하나만 만들어놔야 한다. // Transaction 단위로 EntityManager를 만든다. EntityManager em = emf.createEntityManager(); // 쉽게 생각하면 데이터베이스 connection을 하나 받았다고 생각할 수 있음. EntityTransaction tx = em.getTransaction(); tx.begin(); try{ Member member = new Member(); member.setUsername("Opeahchsdf"); em.persist(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); // 끝나면 반드시 닫아줘야 함 } emf.close(); } } <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence>

  • java
  • jpa
이주현 댓글 3 좋아요 0 조회수 1217

이 부분에 오류가 있는지 궁금합니다.

해결됨

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

제가 문제를 풀다 보니 이런 식으로 항A 값에 식을 만들어 버렸습니다. 오류 없이 잘 진행되고 값도 잘 나오고 해서 문제 없다고는 생각합니다만 혹시 제가 모르는 오류가 있을까봐 질문드립니다. 미리 감사드립니다 ^^

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
최종원 댓글 1 좋아요 0 조회수 322

3분 15초 경에 제 생각이 맞는 건가요?

해결됨

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

int arr[5] = { 100, 200, 300, 400, 500 }; int* ptr1, * ptr3; ptr1 = arr; ptr3 = ptr1 + 4; 일 때 배열의 이름은 배열의 첫 번째 공간의 주소이다. 라고 한다면 ptr1은 arr[0]을 가리킨다. ptr1 = arr arr == &arr[0] 이라서 ptr1 + 4는 &arr[0] + (arr[0]의 자료형인 int의 크기) * 4 이고 배열의 이름은 배열의 첫 번째 공간의 주소를 가리키는 포인터와 비슷한 무언가이다. 라고 한다면 ptr1은 arr을 가리키고 arr은 arr[0]을 가리킨다. ptr1 = &arr &arr != &arr[0] 라서 ptr1은 arr[0]을 직접 가리키는 게 아니라 arr을 직접 가리키는거고 ptr1 + 4는 &arr + (arr의 자료형의 크기) * 4 인데 arr은 포인터와 비슷한거지 포인터가 아니라 주소도 없고 자료형도 없는데 여기서 뭔가 말이 모순되는 것 같고 계산 결과를 보면 후자는 절대로 아닌거 같은데 배열의 이름은 배열의 첫 번째 공간의 주소를 가리키는 포인터와 비슷한 무언가이다. 라는 표현은 맞는 표현 아닌가요? 맞는 표현인데도 불구하고 포인터와 비슷한 무언가라고 생각하고 ptr1 + 4를 하면 결과가 잘못되는 게 뭔가 아닌거 같아요. 제 생각의 어떤 부분이 뭐가 잘못된 거죠?

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

커스텀 인터페이스 구현체 이름 작성 시 순환 참조 발생 질문

해결됨

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 영한님. 이번 강의도 잘 수강한 학생입니다. 강의 내용과 공식 문서를 참고하며 간단한 게시글 리포지토리를 만들어보고자, 아래처럼 작성했었습니다. public interface BoardRepository { Long save(final Board board); ... } @Repository @RequiredArgsConstructor public class BoardJpaRepositoryImpl implements BoardRepository { private final BoardJpaRepository boardJpaRepository; ... } public interface BoardJpaRepository extends JpaRepository<Board, Long> { } 강의 내용대로 스프링 데이터 JPA인 BoardJpaRepository에 Impl을 붙인 BoardJpaRepositoryImpl을 만들었는데, 아래와 같이 순환 참조 문제가 발생했습니다. The dependencies of some of the beans in the application context form a cycle: boardController defined in file [/Users/hyunjoonchoi/Desktop/2024/2024-mju-mentoring/build/classes/java/main/com/mju/mentoring/board/controller/BoardController.class] ↓ boardService defined in file [/Users/hyunjoonchoi/Desktop/2024/2024-mju-mentoring/build/classes/java/main/com/mju/mentoring/board/service/BoardService.class] ┌─────┐ | boardJpaRepositoryImpl defined in file [/..../build/classes/java/main/com/mju/mentoring/board/infrastructure/BoardJpaRepositoryImpl.class] └─────┘ Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. 그런데 이름을 BoardRepositoryImpl, JpaBoardRepositoryImpl 등 다른 이름으로 하니까 순환 참조 문제가 해결되더라구요 이에 대해서 다른 외국 개발자 분들도 이슈로 올리고, 그것들을 찾아봤으나 메인테이너 분이 @Lazy를 사용하거나 ObjectProvider를 사용해야 한다고 말씀해주시는 것 밖에 없었습니다. 공식 문서 ( https://docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/repositories.html#repositories.create-instances )를 보면 스프링 데이터 JPA + Impl로 할 시 자동으로 스프링 데이터 JPA의 구현체로 인식한다고 되어 있는 것 같은데, 이런 순환 참조 이슈가 발생한 원인을 알 수 있을까요? 이를 해결해보고자 스프링 데이터 JPA 레포지토리에 직접 이슈로 남기고 ( https://github.com/spring-projects/spring-data-jpa/issues/3320 ) 답변을 받았긴 했습니다만, 여전히 다른 이야기를 하시는 것 같아 영한 님께도 문의드리고 싶습니다!

  • java
  • spring
  • spring-boot
  • jpa
devholic 댓글 1 좋아요 1 조회수 466

5분 50초경 제가 생각하는 게 맞는 건가요?

해결됨

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

int a = 1; int* a_ptr = &a; a_ptr은 a를 가리키고 a_ptr + 1은 a + 1을 가리킨다. 배열에서는 원소에서 다음 원소로 갈 때 원소의 자료형의 크기 만큼 이동하는 걸 생각하면 a + 1은 a 다음의 변수를 가리키는 것이고, a에서 a의 자료형인 (int 자료형의 크기) * 1 만큼 이동하는 것이다. 그렇게 (int 자료형의 크기) * 1 만큼 이동을 해야지 a 다음의 변수를 가리킬 수 있다. 이렇게 생각을 해봤는데 이게 맞는 걸까요? a 다음의 변수라는 표현은 뭔가 틀린 것 같은데 저도 잘은 모르겠습니다.

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

13.7강 0:53 fputs 함수 질문이 있습니다.

해결됨

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

fputs 함수의 함수 원형에서 첫 번째 인수가 char* 형태인데 char 형태의 ch를 인수로 입력해서 그런지 아래 오류가 발생하면서 실행이 안되는 것 같습니다. 'function': 'const char *' differs in levels of indirection from 'int' 혹시 다른 설정을 해야 하는 걸까요..??

  • c
쉽지않네 댓글 1 좋아요 2 조회수 264

JAVA Spring 환경설정

미해결

java spring 을 사용하려고합니다 근데 이때

  • java
  • javaspring
댓글 1 좋아요 0 조회수 126

왜 delete 쿼리가 안나가는 걸까요?

미해결

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

Parent class @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent",cascade = CascadeType.ALL) private List<Child> childList = new ArrayList<>(); public void addChild(Child... childArray) { for (Child child : childArray) { child.setParent(this); childList.add(child); } } Child class @Setter @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; Main 메서드 Parent parent = new Parent(); Child child = new Child(); Child child1 = new Child(); parent.addChild(child, child1); em.persist(parent); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); Child findChild = findParent.getChildList().get(0); em.remove(findChild); tx.commit(); Main메서드에서 findParent에서 자식 리스트를 가져와 첫번째 자식을 삭제해도 db에는 여전히 child, child1이 남아있는데 혹시 왜 그런지 알 수 있을까요?

  • java
  • jpa
댓글 1 좋아요 0 조회수 339

14분 41초경 질문

해결됨

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

int arr[2][3] = { {1, 2, 3}, {4, 5, 6} }; int* parr[2]; parr[0] = arr[0]; parr[1] = arr[1]; printf("%p\n", &parr[0]); printf("%p\n", parr[0]); printf("%p\n", arr); printf("%p\n", &arr[0]); printf("%p\n", arr[0]); printf("%p\n", &arr[0][0]); 이 예제를 제가 설명해보면 &parr [0]은 parr[0] 이라는 포인터의 주소이다. parr[0] 은 arr[0][0] 을 가리키는 포인터이다. arr 은 arr[0] 을 가리킨다. &arr[0] 에서 배열의 이름은 주소이기 때문에 & 를 붙이던 안 붙이던 똑같다. 따라서 arr[0] 과 같다. arr[0] 은 arr[0][0] 을 가리킨다. 따라서 &arr[0] 도 arr[0][0] 을 가리킨다. 그래서 출력을 하면 arr 과 &parr[0] 을 제외한 나머지는 전부 &parr[0][0] 을 출력해야 하는 것 같은데 실행 결과를 보면 arr 도 &arr[0][0] 을 출력하고 있어요. 제가 잘못 이해한 게 맞을텐데 뭐가 잘못된 건지 모르겠어요 도와주세요 질문이 너무 많아서 죄송합니다 제가 질문 게시판을 어지럽히는 것 같네요 ㄷㄷ

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

double형 오버플로우

해결됨

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의를 보다가 문득 궁금한 부분이 생겨서 질문 드립니다. int의 경우 오버플로우가 발생하면 Long 형으로 형 변환을 하면 된다고 하셨는데 double을 사용하다가 오버플로우가 발생한다면 어떻게 처리를 하는지 궁금해져서 질문드립니다. 혹시 double형을 사용하면서 오버플로우가 발생하는 상황 자체가 잘 못 된것일까요?

  • java
  • 객체지향
  • 변수
addvd 댓글 1 좋아요 0 조회수 555

@Enumerated와 hibernate 타입 검증 관련 해결을 어떻게 해야할지 모르겠습니다.

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 안녕하세요 강의에서 설명해주신 대로 따라하려고 했습니다. 단 , ddl-auto : create 대신 미리 SQL 문으로 테이블을 생성해놓고 ddl-auto: validate로 실행시 에러 가 납니다. 이는 실제로 배운 것을 사용할 수 없는 아주 치명적인 부분 이라고 생각하여 질문을 드립니다. [문제 설명] 강의에서 설명해주신대로 위와 같이 Enumerated 를 사용하여 status 를 정의 하였습니다. 말씀해주신대로 value = EnumType.STRING을 사용했습니다. UserStatus 는 당연히 enum 타입으로 했구요. @Column(name = "status", length = 32) @Enumerated(value = EnumType.STRING) private UserStatus status; 이때 status 가 있는 테이블은 아래와 같은 SQL문으로 생성하였습니다. VARCHAR(255)로 생성한 점을 자세히 봐주세요! dbms: MySQL CREATE TABLE user ( `id` BIGINT NOT NULL AUTO_INCREMENT, `status` VARCHAR(255) NOT NULL check (status in ('CREATED', 'WITHDRAW')), PRIMARY KEY (id) ); 또한 application-yml 에는 아래와 같이 ddl-auto 를 validate 로 하였습니다. jpa: hibernate: ddl-auto: validate properties: hibernate: format_sql: true show-sql: true 하지만 이를 실행하면 아래와 같은 status의 타입 오류 에러 가 나옵니다. Schema-validation: wrong column type encountered in column [status] in table [user]; found [varchar (Types#VARCHAR)], but expecting [enum ('created','withdraw') (Types#ENUM)] 이는 db의 status 의 타입이 enum 이길 기대했지만 실제로는 VARCHAR이기 때문에 에러가 발생한다는 것입니다. (ddl-auto의 validate에 의해 검증 수행) MySQL에서 타입에 enum을 적용하면 해결되지만 쓰는 것을 최대한 지양 해야 한다고 알고 있습니다. 따라서 mysql 의 status 컬럼의 타입을 enum 대신 column 타입을 varchar(255)로 두고 사용 하려고하는데 위와 같은 에러가 나서 실행이 되지 않습니다. ddl-auto : none 으로 설정하면 임시적으로 실행은 할 수 있지만 validate 로 검증을 항상 진행하려고 합니다. [질문 내용] 1. mysql의 타입을 varchar로 두고, ddl-auto: validate 를 사용하면서 에러 없이 실행할 수 있는 방법이 궁금합니다. 2. ddl-auto : create로 하게 되면 자동 생성되는 sql문에서는 status에 enum 대신 create table user ( id bigint not null, status varchar(255) check (status in ('CREATED', 'WITHDRAW')), primary key (id) ) 위처럼 varchar로 column 속성을 주면서 validate 할때만 에러가 나는것이 이상한 것 같은데 왜 그럴까요? 3. 이를 현업에서는 어떻게 해결하고 계신지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
임준호 댓글 3 좋아요 4 조회수 4194

다형적 참조의 오버라이딩

미해결

김영한의 실전 자바 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 다른 분께서 올려주신 질문 글을 읽고 저 또한 같은 의문이 생겼지만, 그에 대한 답변이 저에게는 잘 와 닿지 않아서 제가 이해한 바를 적어봅니다. 상속 관계에 있는 객체의 메서드를 사용할 때는, 우선 메서드를 사용하는 변수의 참조값을 따라 인스턴스를 찾고, 인스턴스 내의 변수 타입과 동일한 클래스 타입부터 시작하여 메서드를 찾는다고 하셨습니다. 그리고 이렇게 메서드를 찾을 때는 자식 클래스에서 부모 클래스 방향으로 올라가는 것만 가능하고, 부모 클래스에서는 자식 클래스에 대한 정보가 없으므로 반대는 불가능하다고 말씀하셨습니다. 그런데 부모 변수가 자식 인스턴스를 참조하는 다형적 참조의 경우, 메서드를 호출하는 변수의 타입은 부모 클래스이므로 메서드를 부모 클래스에서 찾을 것이고, 부모 클래스는 자식 클래스에 대한 정보가 없는데 어떻게 자식 클래스에 해당 메서드가 오버라이딩이 되었는지 판단하는지 잘 이해가 되지 않았습니다. 제 식대로 내린 결론은 다음과 같습니다. 다형적 참조에서는 변수의 타입은 Parent지만, 이 변수가 참조하는 것은 자식 인스턴스인 Child입니다. 호출된 메서드를 찾을 때는 변수의 타입과 같은 Parent에서 탐색하는 것은 맞지만, 오버라이딩 여부는 Child 인스턴스 내에서 별개로 확인하는 것이고 Parent 인스턴스와는 무관합니다.제가 이해한 방식이 맞나요?

  • java
  • 객체지향
Rim 댓글 2 좋아요 0 조회수 609

정수형 - char

해결됨

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

기초적인 질문이지만.. char의 음수부분 어떤때에 사용하는지 궁금합니다. char 의 양수 번호같은 경우는 ascii코드 베이스로 사용하는걸 알겠는데 음수부호를 가지고 char를 사용하게 되는 경우는 어떨때 사용하는걸까요? 그리고 어떤때에 unsigned char를 사용해야하는가도 궁금하네요..ㅎ

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
Sss 댓글 1 좋아요 0 조회수 320

c++ 다음 강의 계획이 궁금합니다.

해결됨

[쥬신게임아카데미 버거쌤] 완전 초보자를 위한 게임 C++

안녕하세요? c++ 다음 커리큘럼은 개강일과 다루는 내용이 궁금합니다!

  • c
  • c++
댓글 1 좋아요 0 조회수 476

9분 20초경 질문

미해결

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

*(parr[j] + i)과 *(*(parr + j) + i))는 어느정도 이해를 했습니다. 예를 들면 *(parr[0] + 1) parr[0]에 담긴 데이터는 주소이고 그 주소는 arr0이라는 포인터와 비슷한 무언가를 가리킨다. 그리고 arr0이라는 포인터와 비슷한 무언가는 arr0[0]의 주소를 가리킨다. 그리고 arr0[0]은 arr0의 첫 번째 공간을 의미한다. 그러므로 parr[0]은 arr0[0]을 가리키는 것이고 parr[0]에 1을 더하면 arr0[0]의 다음 공간인 arr0[1]을 가리키게 되고 *로 그 공간에 접근하게 된다. * ( * (parr + 1) + 1) parr은 arr0을 가리킨다. 그리고 arr0은 arr0[0]을 가리킨다. 그러므로 parr에 1을 더하면 arr0[1]을 가리키게 된다. 거기에 *를 붙이면 arr0[1]의 공간에 있는 데이터에 접근을 한다. 거기서 1을 더하면 그 데이터에 1을 더하게 되는 것이다. 이렇게 이해를 했는데 맞는거겠죠? 이거 말고 질문이 있는데 parr[j][i]와 (*(parr + 1))[1]의 맨앞에 *가 없는데도 어떻게 그 공간에 접근해서 printf 함수로 출력을 했을 때 배열의 주소가 아닌 배열의 데이터가 출력 될 수 있는 건지 궁금합니다. parr[j]는 배열의 주소가 나오는데 parr[j][i]는 왜 배열의 값이 나오는지 이해가 안되요. 감사합니다

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

int* 변수명과 int *변수명의 차이

해결됨

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

int* 변수명과 int *변수명이 해석하는데 차이가 있다고 했는데 이게 해석상으로 어떤 차이가 있는 건지 궁금합니다. 전 강의에서 어떻게 얘기를 해주신 거 같은데 그 때도 이해를 제대로 못했어요

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

인기 태그

인프런 TOP Writers

주간 인기글