전체 글 40

[JAVA] CheckedException vs UnCheckedException

CheckedException 컴파일 시에 에러 처리를 필수로 해주어야 하는 것.예시로 IOException, SQLException 같은 것들이 있다. UnCheckedException컴파일 시에 에러 처리를 해주지 않아도 동작하는 것.런타임 시에 에러가 발생하면 프로세스가 멈춘다.예시로 NullPointerException, ArrayIndexOutOfBoundsException 같은 것들이 있다.   요약빌드 할 때 에러 처리를 무조건 해줘야 하는가 = Checked빌드 할 때 해주지 않아도 동작은 하는가 = Unchecked 참으로 직관적인 네이밍이다. :)

Spring/Java 2024.07.28

[Annotation] Qualifier는 왜 Qualifier일까

Spring에서 Qualifier는 Bean을 등록할 때,별명을 지정해서 등록한 후 주입받는 곳에서 별명에 해당하는 객체를 주입받기 위한 어노테이션이다. Qualifier는 구글 번역을 돌렸을 때 보면 예선이라는 뜻을 가지고 있다. 월드컵이나 올림픽같은 경기의 예선을 뜻하는데 왜 별명을 붙이는 문구로 사용했는지 궁금했다. 네이버 사전에 검색해보니 Qualifier는 예선 뿐 아니라 수식어구 이라는 뜻도 가지고 있다. 그래서 Bean을 수식하기 위해 Qualifier를 사용하는 것이었다! Qualifier를 사용할 때 보통 명사로 사용한다.하지만 뜻에 보면 (특히 형용사, 부사)라고 적혀있는데..그렇다면 Qualifier의 이름으로 형용사를 사용하는게 맞지는 않을까? 하지만 관례상 명사를 사용하는 편이니 ..

Spring/Spring 2024.05.12

[JAVA] 꽉찬 ArrayList에 add를 하면 어떤 일이 일어날까

배열은 크기를 가져야 한다.하지만 ArrayList는 배열의 크기와 상관없이 add를 계속 할 수 있게 만들어져 있다. 왜 그럴까? Swift에도 ArrayDoubling 이라는 기법이 있다.배열이 가득 찼을 때 추가된다면 배열의 길이만큼 길이가 추가된 배열이 새로 만들어진다.예를 들어 길이가 10인 가득찬 배열에 새로 추가된다면 길이를 20으로 만든다음에 기존 배열을 복사해서 넣는다. 자바에서도 비슷한 기법이 있을 것 같았다. ArrayList add ArrayList의 코드를 열어보면 add 메서드는 이렇게 생겼다.private void add(E e, Object[] elementData, int s) { if (s == elementData.length) elementData =..

Spring/Java 2024.04.27

[Flutter] iOS Native에서 Flutter로 Realm 데이터베이스 Migration 하기

네이티브로 운용되던 프로젝트를 플러터로 변경할 때가 있다. 그럴 때는 네이티브 내에 있던 데이터들을 가져와야할 필요가 있기 때문에 마이그레이션을 진행해야 한다. 이 경우에는 Realm 데이터베이스를 사용하는 경우를 예를 들었다. Realm 데이터베이스를 마이그레이션 하는 것과 비슷하다. 세팅 iOS의 경우. class Dog: Object { @Persisted var name: String @Persisted var age: Int } let realm = try! Realm() try! realm.write { let dog = Dog() dog.name = "poppy" dog.age = 1 realm.add(dog) let dog1 = Dog() dog1.name = "choco" dog1.age..

Flutter 2024.03.16

[Swift] 동시성, 병렬성, 동기, 비동기

동시성 하나의 코어에서 여러 쓰레드가 **동시에 처리되는 것**처럼 보이는 것. 병렬성 한가지 일을 여러 코어가 일을 분배해서 하는 것. 운영체제가 조절을 해 주는 부분이라 iOS 앱 개발자가 신경을 별로 쓰지 않아도 된다. 동시성이 필요한 이유 화면의 스크롤을 내리는 경우 동시적으로 처리를 해주지 않는다면 다음화면을 불러오고 스크롤을 내리기 때문에 버벅거리는 현상이 나올 수 있다. 이런 경우 동시적으로 처리를 해준다면 좀 더 부드러운 화면이 나오고 앱의 완성도가 높아질 수 있다. 프로세스가 논리적인 쓰레드를 여러개를 생성해서 DispatchQueue에 넣고 GCD가 CPU의 쓰레드에 넣어주는 것일까? 🤔 동기 / 비동기 동기 동기란 synchronous 라고 하고 task가 실행되고 완전히 마칠때까지 ..

iOS/Swift 2024.02.01

[Memory] heap memory

heap memory 힙 메모리 라는 용어는 동적할당을 위해 예약된 메모리 영역을 나타내는데 여기서 힙 이라는 것은 자료구조의 힙. 예를들어 데이터를 꺼낼 때 부모 노드와 스와핑 해서 꺼내는 등의 그런 힙이 아니라 생긴 구조 자체가 힙이라는 것이다. 작동 시나리오 1. 앱을 실행시키면 컴퓨터의 메모리에 앱 자체가 올라갈 것이고 UIApplication등의 객체가 올라갈 것이다. 2. 거기서 중간단계를 건너뛰고 ViewController를 가지게 되면 ARC가 적절한 크기의 메모리 블록을 찾아 포인터를 반환해준다. 2-1. 만약 찾지 못한다면 운영체제에 메모리를 요청한다. 2-2. 운영체제가 동적메모리 할당 로직에 의해 요청한 크기의 메모리를 가져다주고 메모리가 다 차서 없다면 메모리 스위칭도 한다. 3...

iOS/Swift 2024.02.01

[Flutter] 상태관리 - Provider

상태관리 상태관리는 왜 하는가. 상위에서부터 주입해서 오려면 생성자에 들어가는 매개변수가 너무 많다. 이 부분을 따로 빼서 관리하기 위함. Provider 상태관리 라이브러리. runApp(ChangeNotifierProvider( create: (_) => MainViewModel(), child: const MyApp(), )); 가장 상위에서 주입을 해줄 수 있다. 서브 트리에서도 주입을 할 수 있다. 여기서 뷰 모델은 ChangeNotifier를 채택해야한다. class MainViewModel extends ChangeNotifier 이걸 하면 flutter가 import된다. 뷰를 알면 안된다고 생각해서 방법을 찾아봤지만 방법이 없다. riverpod을 사용하면 걷어낼 수 있다고 한다. Con..

Flutter 2024.01.02

[Dart] 기본 - Future

Future 비동기 프로그래밍에 사용되는 기능 Future 로 사용하는데 미래에 T 타입의 값이 들어온다. void main(List arguments) async { print(await futureInt()); // await이 없다면 완성된 상태가 아니기 때문에 Future instance가 나온다. } Future futureInt() async { return Future(() { print('완료'); return 3; }); // delay를 통해 실행 한다면 Duration이 지난 후 완료된다. } Completed 상태와 Uncompleted 상태가 있다. 완료되기 전에는 그저 Future Instance 이지만 완료된다면 T타입의 값이 들어온다. 실행 중 에러가 발생한다면 에러를 담고 ..

Flutter/Dart 2023.12.15