앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
안녕하세요! 앨런님, 강의 정말 잘 듣고 있습니다. 좋은 강의 만들어주셔서 감사합니다. 다름이 아니라 ToDo 앱 강의를 참고해서 제 방식대로 스토리보드 사용하지 않고 코드로 앱을 만들어보고 있는데요. 막히는 부분이 있어서 질문드립니다! 하단에 있는 4개의 Button들을 동그랗게 하고 싶어서 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() colorButtons.forEach { button in button.clipsToBounds = true button.layer.cornerRadius = button.frame.width / 2 } } 이렇게 구현했지만 전혀 바뀌는게 없어서 button.frame.width 를 print해봤는데 0.0이 나오네요... 이건 왜그러는걸까요? 참고로 말씀드리면 4개의 버튼은 모두 UIStackView의 subView입니다! 혹시나 스택뷰의 서브뷰라 그런것인가 해서 구글링을 해봤습니다! print(stackView.arrangedSubviews[0].frame) print(stackView.arrangedSubviews[1].frame) 근데 이렇게 해봐도 똑같이 0.0이 나오더라구요,,, ㅠㅠㅠ 도저히 이해가 안돼서 질문드립니다.
Q1. Dart 언어에서 Optional parameters에도 Name을 붙여 파라미터 값 대입 시 순서를 다르게 할 수 있나요? void function1(int a, [int b]) {..} // b에 이름을 붙여 function1을 호출할 수 있는가 Q2. 하나의 함수에 Optional parameters, Named parameters 둘 다 쓴다고 하면, 작성 순서는 어떻게 되나요? void function2(int a, {int? b}, [int c]) {..} // 둘을 같이 쓸 일이 있는지는 모르겠지만 궁금합니다
안녕하세요. 9장강의를 듣고 추가 과제를 시도해보던 중 궁금증이 생겨 질문드립니다. 스스로 해보기 -> 팔로잉 끊기 에서 destory와 라우터를 사용하라고 안내해주셨는데 user자체를 삭제하는 것이 아닌 중간테이블(follow)에서 해당 로우만 삭제하는 방법이 따로 있나요? if (user) { const a = await user.destroy({ where: { Followings: { followerId: req.params.id } }, }); 위와 같이 방법을 여러가지로 시도해보았지만 계속해서 유저 삭제(탈퇴)가 되는 상황이라 도움주시면 감사하겠습니다..!
안녕하세요 선생님 벽을 3개를 세우라고 해서 조합을 먼저 떠올렸고 영역을 구해야 한다는 부분에서 dfs를 떠올렸습니다 그래서 조합과 dfs를 사용해 벽을 3개 세울때마다 dfs 및 visited배열을 매번 초기화 해주고 2차원 배열 arr을 돌면서 2(바이러스)가 나올때마다 동서남북으로 0또는 2인 곳으로 탐색해가며 영역의 크기를 구하게 해주었습니다. 예제는 분명히 다 맞는데 틀리는 이유가 뭘까요? 0또는 2로 한게 잘못된 걸까요? http://boj.kr/5d0f072fce1a471fb02deec85b4d906d
Q. FOUC에 대한 보완으로 autoAlpha 를 사용하면 효율적 인 이유가 뭘까요? FOUC 강의에서 authAlpha를 사용함으로써 GSAP가 효율적으로 visibility를 visible로 바꿀 수 있다 라고 말씀하셨습니다. 그런데 생각해보니 GSAP 객체도 해당 Element의 style에 접근해서 attribute 값을 바꾸는게 아닌가? 하는 생각이 들어서 질문드려봅니다. 이렇게 되면 사실 문법적인 설탕(syntatic sugar) 같은게 아닌가요? 🤔
본 강의 중 로그가 나오지 않는 이슈에 관하여 경로 설정에 문제가 있다고 하셨고, grab_market_web/src/App.js의 내용 중 로그 src의 경로를 "./imgages/icons/log.png"에서 -> "/imgages/icons/log.png"으로 변경하라고 하였습니다. 작동은 잘 되는데, 작동 원리가 궁금합니다. / 절대값 root경로의 시작은 어디로 설정되어 있나요? 이전에는 메인 화면에서는 ./ 상대 경로 중, 현재 경로로 설정되어 있었는데 잘 작동했던 이유도 궁금합니다. App.js파일의 내용이니까 App.js가 존재하는 grab_market_web/src 디렉토리가 현재 경로라고 이해되는데, 그보다 상위 디렉토리에 존재하는 grab_market_web/public이 ./ 현재 경로로 인식되어 grab_market_web/public/images가 호출 되는 것도 이해가 잘 되지 않으며 / 절대 경로로 설정시에도 grab_market_web/public/images가 호출되는 것이 잘 이해가 되지 않습니다.
안녕하세요! 이번에 spring boot 3.1.0 version 으로 p6spy 라이브러리 설정 후 테스트 코드 실행을 하는데 쿼리 파라미터 값이 확인되지 않습니다. Hibernate: insert into hello values ( ) 2023-06-20T14:55:04.965+09:00 INFO 28956 --- [ main] p6spy : #1687240504965 | took 5ms | statement | connection 1| url jdbc:mysql://20.249.79.13:3306/patron_dev?characterEncoding=UTF-8 insert into hello values ( ) insert into hello values ( ); Hibernate: select h1_0.id from hello h1_0 2023-06-20T14:55:05.596+09:00 INFO 28956 --- [ main] p6spy : #1687240505596 | took 7ms | statement | connection 1| url jdbc:mysql://20.249.79.13:3306/patron_dev?characterEncoding=UTF-8 select h1_0.id from hello h1_0 select h1_0.id from hello h1_0; 2023-06-20T14:55:05.717+09:00 INFO 28956 --- [ main] p6spy : #1687240505717 | took 9ms | rollback | connection 1| url jdbc:mysql://20.249.79.13:3306/patron_dev?characterEncoding=UTF-8 ; 2023-06-20T14:55:05.759+09:00 INFO 28956 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2023-06-20T14:55:05.763+09:00 INFO 28956 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2023-06-20T14:55:05.849+09:00 INFO 28956 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. Process finished with exit code 0 위 로그 화면에서 보는 것처럼 rollback 이 되기전 insert 문이 실행될 때 값이 비어 있는 상태로 전달되고 있습니다 이유를 모르겠습니다 ㅠㅠ
자바 ORM 표준 JPA프로그램 듣고 넘어왔습니다. 이전 기본강의에서는 JPQL이 flush를 먼저 수행이 된후 JPQL쿼리가 동작한다고 배웠는데요. 이게 EntityManager의 일반적인 find() 메소드의 경우 clear()을 한 뒤 준영속상태에서 비로서 select쿼리가 나가는것으로 알고있습니다. (그렇지 않으면 1차 캐시에서 조회) 근데 JPQL의 경우 flush는 자동으로 호출 되지만 clear 즉, 1차캐시와 연관성이 있느냐 없느냐에 대해서 궁금증이 생겼습니다. clear를 직접 해주지 않았음에도 불구하고 쿼리가 나가는 이유에 대해서 clear를 자동으로 해줘서 쿼리가 나가게 된것인지? 혹은 1차 캐시와 상관없이 자연쿼리가 나가게 되는것인지 한번 더 다잡고 가고싶습니다. 답변 감사히 기다리겠습니다.
안녕하세요 강사님 좋은 강의 감사드립니다. 참여했던 실무 프로젝트에서 @Transactional 을 잘 이해하지 못한 채 사용했던 적이 있습니다. 특정 서비스의 한 메소드에서 @Transactional을 선언하고 해당 메소드가 여러 작업을 하기 때문에 다른 메소드를 호출하는 방식이었습니다. 이때 저는 트랜잭션의 특징을 잘 몰라서 두 메소드에 다 @Transactional을 선언했었습니다. 예시) @Transactional public void ex1() { ... // 로직 수행 후 다른 메소드 호출 ex2(); } @Transactional public void ex2() { // 로직 수행 } 테스트를 하는데 로직 수행중 ex1에서 에러가 나든 ex2에서 에러가 나든 트랜잭션 롤백이 안됐었는데 이런 케이스는 무엇이 원인인지 알려주실 수 있나요? 강의에서처럼 ex1이 아예 @Transactional이 선언되어 있지 않았다면 롤백이 안되는게 맞다고 생각이 드는데 저는 두 메소드 다 선언했었거든요,, 확인해주시고 답변 주시면 정말 감사드리겠습니다ㅠ (혹시나 해서 강의 코드의 externalCall 메소드에 트랜잭션 선언해보고 테스트 돌려봤는데 트랜잭션 적용 되더라고요) +추가 질문으로 이런 경우에는 ex1 메소드에만 @Transactional을 선언하면 될까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 9.11, 11분 21초 입니다. 교수님께서 복사 생성자를 MyString(const MyString &src) { cout << "Copy constructor" << endl; m_length = src.m_length; m_data = new char[m_length]; if (src.m_data != nullptr){ for (int i = 0; i < m_length; i++) m_data[i] = src.m_data[i]; } else m_data = nullptr; } 이렇게 정의 하셨는데 해당 코드에서는 m_data의 제일 끝에 널 문자를 두지 않습니다. 제가알기로 문자열의 끝부분에는 널문자를 둔다고 기억하는데 왜 이렇게 해도 되는지 궁금합니다!
@GeneratedValue에 의해 Sequence가 호출되어서 순차값이 id에 부여되어 저장되는것으로 알고있습니다. 근데, team의 id와 member의 id의 sequence가 마치 공유가 되는듯이 team의 id가 1, 2 그리고 member의 id가 3, 4, 5, 6 으로 저장이 되는 부분에 대해서 @Column으로 각각의 id 이름을 다르게 부여했다고 하더라도 @GeneratedValue 어노테이션은 엔티티에 정의한 필드명에 맞춰서 생성이 되어서 그런것인지 궁금합니다. 또한, 만약 위 원리가 맞다면 실무에서는 이런 부분에 대해서 각각을 명확하게 구분지어서 해야할거같다 라는 생각이 들었으며, 그렇다면 실무에서는 애초에 @Column에 의한 DB 컬럼명 변경이 아닌 엔티티 자체의 필드명에서 부터 다르게 지정해 줘야 하는것이 아닐까 하는 생각을 해봤습니다. 이 부분에 대해 바람직하게 생각한것이 맞을까요?
요즘은 타입스크립트가 대세라는 소리를 어디서 들은 것 같아서 질문드립니다. 왜 타입스크립트를 안썼냐고 따지는 것은 절때 아니고... 단순히 자바스크립트를 사용했는데 어떠한 의도를 갖고 했는지가 궁금합니다. 작성하기가 쉬울 수도 있고, 코드의 길이가 짧을 수도 있고, 기존에 만들어진게 자바스크립트일 수도 있다는 생각이 들긴 하지만 직접 물어보는게 더 좋을꺼같아서 질문드립니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(br.readLine()); int N = Integer.parseInt(tk.nextToken()); int M = Integer.parseInt(tk.nextToken()); int[] nums = new int[N + 1]; for (int i = 1; i < N + 1; i++) nums[i] = Integer.parseInt(tk.nextToken()); Arrays.sort(nums); int start = 1, end = N, answer = 0; while (start != end) { int sum = nums[start] + nums[end]; if (sum < M) start++; else if (sum > M) end--; else { answer++; start++; end--; } if (start > end) break; } System.out.println(answer); } } 안녕하세요 ~ 항상 좋은 강의를 만드시기 위해 노력해주셔서 감사합니다! 강사님의 강의를 참고해 위 코드로 재출을 했는데 인텔리제이에서는 정상적으로 실행되지만, 백준에 재출했을 때 런타임 오류가 발생하는 이유를 모르겠어서 질문드립니다 ㅠㅠ 오류 코드는 아래와 같습니다. Error: Main method not found in class Main, please define the main method as: public static void main(String[] args) 제대로 main 객체와 메서드가 있는데 왜 인식을 못하는지 모르겠네요 ㅠㅠ 감사합니다 :)