안녕하세요 강의 잘 보고 있습니다. 다름이 아니라 클래스 로더 및 로딩 과정 16:00초에 질문이 있는데요. 링킹 준비 단계에서 "객체 인스턴스가 저장될 메모리 공간을 확보하고 0으로 초기화"라고 되어 있는데, 제가 알기로는 클래스 수준의 정적 필드가 기본값으로 초기화로 알고 있습니다. 객체 인스턴스는 객체가 생성 되었을 때 기본 값으로 초기화가 이뤄지고 생성자가 있을때 말씀처럼 초깃값이 다시 설정 되는걸로 알고 있는데요. 제가 잘못 이해 한걸까요.
섹션 13강의 중 "폰트, 이미지, 레이아웃 설정하기" 강의를 보면, 이미지 가져오는 것을 컴포넌트화 하는 부분이 나옵니다. util폴더 아래에 get-emotion- image라는 파일을 만드는 부분인데, 해당 파일을 jsx가 아닌 js로 만드는 이유가 궁금합니다. 제가 해당 파일을 jsx로 해도 정상 작동이 되던데, 리액트에서 js로 하신 이유가 뭘까요? 문의드립니다.
안녕하세요 ㅎㅎ 좋은 강의 제공해주셔서 감사합니다. 추상 클래스와 인터페이스 사용 시점에 대해 궁금한 것이 있습니다. 제가 처음에 생각한 내용은 추상 클래스 : 부모 클래스와 자식 클래스가 공통으로 제공하는 내용(메서드) 도 존재하지만, 자식클래스 별로 다른 내용 을 제공할 때는 abstract 메서드를 사용하여 구현을 강제시킨다. 인터페이스 : 부모와 자식 간에 공통으로 가지는 내용(메서드 내용이 동일한) 이 없으므로, 상속받는 클래스가 반드시 메서드를 구현한다. 그런데 JAVA8부터 인터페이스에 default 메서드 가 추가되었더군요. 인터페이스에 default 메서드를 선언하면, 인터페이스를 상속받는 클래스에서 구현을 하지 않고도 사용할 수 있더라구요. interface Shape { final int SIZE = 5; void render(); default int getSize() { return SIZE; } } class Rectangle implements Shape { @Override public void render() { StringBuilder buffer = new StringBuilder(); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { buffer.append("*\t"); } buffer.append("\n"); } System.out.println(buffer); } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int input = sc.nextInt(); Shape shape; if (input == 0) { shape = new Rectangle(); } else { shape = new Triangle(); } shape.render(); System.out.println(shape.getSize()); } } 그렇다면 default 메서드가 추상 클래스의 일반 메서드(추상 클래스가 아닌)와 동일하게 작동하게 되는데 public abstract class Shape { public static final int SIZE = 5; public abstract void render(); public int getSize() { return SIZE; } } 추상 클래스와 인터페이스를 사용하는 시기(?)를 어떻게 구별해야할까요? 구글링을 해보니 인터페이스에 default 메서드가 추가된 이유가 추후에 인터페이스에 새로운 메서드를 추가했을 때, 해당 인터페이스를 상속하고 있는 클래스에서 오류가 발생하지 않기 위해서라고 하는데 그 오픈소스가 엄청 유명해져서 전 세계 사람들이 다 사용하고 있는데, 인터페이스에 새로운 메소드를 만들어야 하는 상황이 발생했다. 자칫 잘못하면 내가 만든 오픈소스를 사용한 사람들은 전부 오류가 발생하고 수정을 해야 하는 일이 발생할 수도 있다. 이럴 때 사용하는 것이 바로 default 메소드다. 결론적으로 내용을 정리하게 되면 추상 클래스에서 새로운 메서드를 추가해야 한다면 abstract를 추가하지 않는다. 인터페이스에서 새로운 메서드를 추가해야 한다면 default 메서드를 사용한다. default 메서드가 추가 되면서 추상 클래스와 인터페이스를 언제 사용해야 하는지 잘 모르겠습니다...! 감사합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. <form th:action="@{/items/new}" th:object="${form}" method="post"> <form role="form" action="/members/new" th:object="${memberForm}" method="post"> 첫번째는 상품등록 폼의 action이 th태그로 사용된경우 두번째는 회원등폭 폼의 action이 그냥 사용된경우입니다. 상품,회원의 @getMapping createForm과 @postMapping create의 경로가 같기때문에(member/new, items/new) 저는 위의 2개의 form.html 에있는 action을 action=""으로 둘다 설정했는데 저렇게 따로 하는 이유가 있을까요 ? 제가 배운 기억으로는 경로가 같으면 action="" 이렇게 사용하면 처음 요청했던곳으로 다시 post요청한다고 알고있어서요
강의를 잘 듣던 도중에 궁금증이 생겨 질문드립니다. #9.1 이미지 최적화 강의를 듣고 나서 생긴 궁금증입니다. 여러 img태그를 next에서 제공하는 Image 태그로 교체함으로써 웹사이트의 이미지를 최적화시킬 수 있다는 점은 잘 이해했습니다. 하지만 이렇게 된다면 이전 강의에서 배운 도서 상세 페이지에서 도서의 표지를 검은색 배경으로 깔기 위해 사용했던 div 태그 내의 css ( BackgroundImage: url(...) ) 부분이 가져오는 이미지는 최적화가 전혀 되지 않을 것 같다는 생각이 들었습니다. 열심히 최적화를 해 봐야 저 부분에서 풀 사이즈의 이미지를 중복해서 가져온다면 성능에 다시 악영향이 갈 것 같다고 생각하였고, 나름의 답을 생각해 보았는데, 어떤 답이 맞는 것인지 잘 모르겠어 이렇게 질문드립니다. 배경 부분도 Image 태그로 불러운 다음 css를 적절하게 사용해 똑같이 배경 느낌으로 만들어 준다. css url로 가져온 이미지는 자주 가져오지 않으므로 최적화하지 않아도 큰 영향은 없다. 사실 고민을 해 보아도 이 두가지 밖에 떠오르지 않아 둘 중에 답이 있는 것인지, 아니라면 어떤 방법을 적용하는 것이 좋은 방법일지 질분드립니다.
안녕하세요! 보일러플레이트 코드를 다운받아 npm install 을 하면, route 관련 코드가 작성되어 있고, http://localhost:3000으로 브라우저를 들어가면 좌측 메뉴가 disabled 되어 클릭이 안되는 상태입니다. route 설정 코드가 보일러플레이트 코드에 일부 작성되어 있는데, route 설정 강좌를 시청 해야하는지 혹은 강좌 내용대로 코드를 다시 작성해야하는지 궁금합니다. routes.ts를 보면, children의 값이 null 인 부분이 확인됩니다. 아코디언 강좌를 예로 든다면, 아코디언 컴포넌트를 만들고, 여기 null 인 부분에 값을 넣는거 아닐까 생각이 드는데요 첨부된 보일러플레이트 코드를 어떻게 사용해야하는지 질문 드립니다. 감사합니다! :]
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님과 동일하게 index.js를 수정하고 terminal - new terminal을 하면 저는 경로가 계속 my-app의 상위 경로로 되어있어서 cd my-app을 해주고 npm start를 하는데 (이부분도 저는 왜 계속 이렇게 뜨는지 궁금합니다..my-app을 우클릭 후 터미널을 열면 되긴합니다만..) 이렇게 떠서 계속 새로운 포트를 추가해서 사용하게 됩니다..저도 강사님처럼 실습하고 싶은데 어떻게 하면 될까요..?
안녕하세요! 강의 듣다가 에러가 발생해서 문의드립니다. 어디가 정확히 에러가 나는지 잘 모르겠어서, 어떻게 해결을 해야할지 모르겟네용... 클라이언트와 서버컴포넌트의 하이드레이션 과정에서 에러가 발생한다고 하는데요ㅠㅠ... 4ch 앱라우터 데이터 패칭 할 때 에러난건데, 서버 에러도 같이 뜹니다!! 아니면 서버의 문제라서 클라이언트-서버컴포넌트 하이드레이션까지 문제가 생긴걸까요?? ( 서버는 건드린 적이 없는데 ㅠㅠ ) < 에러 발생 내용 > hook.js:608 A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. 아래 사진은 서버 vscode 터미널 사진입니당 ㅠ Invalid this.prisma.book.findMany() invocation in C:\Users\82106\Desktop\06_onebite-server-main\src\book\book.service.ts:27:35 24 } 25 26 async findAllBooks() { → 27 return await this.prisma.book .findMany( Error querying the database: FATAL: Tenant or user not found PrismaClientInitializationError: Invalid this.prisma.book.findMany() invocation in C:\Users\82106\Desktop\06_onebite-server-main\src\book\book.service.ts:27:35 at In.handleRequestError (C:\Users\82106\Desktop\06_onebite-server-main\node_modules\@prisma\client\runtime\library.js:122:7154) at In.handleAndLogRequestError (C:\Users\82106\Desktop\06_onebite-server-main\node_modules\@prisma\client\runtime\library.js:122:6188)
2.3) 구조분해할당 강의의 배열의 구조 분해 할당과 객체의 구조 분해 할당 모두 아래 코드의 four와 extra와 같이 추가적으로 존재하지 않는 변수를 만드셨는데요. 이렇게 할당 받을 값보다 할당 받을 변수가 더 많은 경우가 실제로도 사용이 되나요?? 사용이 된다면 어떤 목적으로 사용이 되나요? let arr = [1, 2, 3]; let [one, two, three] = arr; let person = { name: "이름", age: 24, }; let { name, age, extra, } = person;