expo를 시작하기 전에 먼저 npm 설치가 되어있어야한다. expo에 가입하기 위하여 https://expo.dev/ 로 이동한 후 가입한다. 아래 명령어를 실행하여 expo를 설치한다. npm install --global expo-cli expo를 통해서 프로젝트 생성 expo init ProjectName 만약 Windows에서 진행하면서 UnauthorizedAccess 에러가 발생하면 관리자 모드로 PowerShell을 열어준 후 아래 명령어를 입력한다. Set-ExecutionPolicy -ExecutionPolicy Unrestricted 스마트폰에도 expo가 설치되어 있어야 하는데, 안드로이드는 Expo를 ios는 Expo go를 설치하면 된다. 이후 expo에 컴퓨터와 스마트폰에 각각..
SOLID의 실질적인 내용은 Robert C. Martin이 처음 소개했는데, SOLID라는 약자는 Michael Flaters에 의해 나중에 소개되었다. SOLID는 개발자가 프로젝트를 만들 때 좋지 않은 코드를 만들지 않으면서 가독성을 높이고 테스트하기 쉬운 코드를 만들 수 있도록 하여 프로젝트의 개발, 유지보수 그리고 확장하기 쉽도록 개발하는 데 도움 되는 원칙들이다. S : 단일 책임 원칙(Single Responsibility Principle, SRP)하나의 클래스는 하나의 일만 해야 한다.즉, 하나의 클래스를 변경하는 이유 또한 하나여야 하는 것이다. 여러 일을 하나의 클래스에서 처리하도록 모아둔다면 여러 개발자가 협업할 때 각각의 개발자가 각각의 이유로 하나의 클래스를 동시에 수정하는 문제..
콜백 지옥( Callback Hell )이란 콜백이 하나 있을 때 그 콜백이 다른 콜백을 호출하고 호출된 콜백이 또 다른 콜백을 호출하는 방식의 콜백이 콜백을 호출하는 것이 꼬리를 물고 반복되는 안티 패턴을 뜻한다. 콜백 지옥에 대한 예시 Future.onComplete { case Success(_) => Future.onComplete { case Success(_) => Future.onComplete { case Success(_) => ... } } } 이러한 콜백 지옥은 코드를 추적하기가 어려워지고 리팩토링이나 유지보수가 힘들다는 단점을 가지고 있다. 스칼라의 Future를 통해 값을 얻은 후에 또 다른 Future에서 해당 값을 사용해야 할 때 콜백 지옥에 빠지게 되는데 이때 for comp..
Stream은 다양한 데이터를 다루기 위한 라이브러리이다. Stream을 이용하면 배열뿐만 아니라 Collection도 다룰 수 있다. Stream을 활용한 연산 방법은 중간 연산과 최종 연산으로 나눌 수 있다. ex) stream.distinct().sorted().forEach(System.out::println); 위 예제에서 distinct()와 sorted()는 중간 연산이고 forEach()는 최종 연산이다. 보이는 것과 같이 중간 연산은 연속해서 사용할 수 있고 최종연 산은 한 번만 가능하다. 이제 Stream의 특징을 보자 1) 일회성이다. stream.sorted().forEach(System.out::println); stream.distinct().forEach(System.out::..
toString 메서드는 객체에 대한 정의를 보여주기 위해 존재하는 메서드로 문자열을 반환한다. 이런 toString 메서드는 Object 클래스의 메서드로써 Java의 모든 클래스는 Object 클래스를 상위 클래스로 두고 있기 때문에 모든 클래스는 toString 메서드를 갖게 된다. 만약 toString 메서드를 재정의(override) 하지 않고 그냥 사용하게 된다면 아래와 같은 문자열을 반환하게 된다. getClass().getName() + '@' + Integer.toHexString(hashCode()) // 클래스의 이름 + @ + hashCode ex) Test@2e817b38 이렇게 재정의되지 않은 toString 메서드는 유의미한 내용이 나오지 않는다. 때문에 사람이 읽기 쉽고 어떤..
let과 const는 ES6 (2015)에서 추가됐다. let과 const의 차이는 크지 않다. const는 상수이며 선언 시 초기화가 반드시 필요하고 let은 변수이며 초기화를 반드시 할 필요는 없으며 이 외에는 같다고 보면 된다. const a; // SyntaxError const b = 1; // ok b = 3; // TypeError let c; // ok let d = 1; // ok d = 3 // ok 이제 var과의 차이를 보면 let, const는 재선언이 불가능하고 var는 가능하다. let a = 1; let a = 2; // SyntaxError var b = 1; var b = 2; // ok let, const는 선언된 블록에 영향을 받는다. var는 선언된 함수에 영향을 받..
신림역 인근에 있는 스터디카페인 거북이의 기적의 이용 방법에 대한 기록이다. 코보스페이스 어플을 설치해서 이용했었는데, 자리 잡는 방법을 헤매서 추후 또 헤맬까 봐 작성해둔다. 위치는 아래와 같다. 아래는 입구 사진이다. 입구로 들어가서 엘리베이터 앞에 키오스크가 있어서 자리를 잡을 수 있다. 다만 직접 가서 확인해야 하는 불편함이 있기 때문에 코보스페이스 어플을 설치하여 이용한다. 설치 후 거북이의 기적을 찾아서 들어가면 아래 이미지와 같이 나오고 현재 자리가 얼마나 비어있는지 알 수 있다. 같은 페이지에서 스크롤만 내리면 다음 이미지와 같이 보이는데, 충전되지 않은 상태에서는 이용 상품 칸이 비어있고 상품 충전 버튼을 눌러 충전하면 이용 상품에 이미지처럼 관련 내용이 보인다. * QR코드는 출입문을 ..
어쩌다가 Wordle을 알게 되었다. 하루 한 번만 가능한데 더 하고 싶어서 만들어본다. Wordle은 하나의 온전한 단어를 맞추는 거지만 이번에 만들어 본건 랜덤 한 영어다. 막 만들어서 코드나 동작이나 마음에는 들지 않지만 가끔 심심풀이로 하기엔 괜찮을 듯싶어 더 수정하진 않는다. HTML - BODY submit CSS #wrapper { margin: 100px auto 0 auto; width: 290px; } #parent { width: 290px; } .child { width: 290px; display: flex; justify-content: space-between; margin-bottom: 12px; } input { width: 50px; height: 50px; border:..
최장 공통부분 수열은(LCS, Longest Common Subsequence) 여러 개의 수열이 주어졌을 때 두 수열의 부분 수열이 되는 수열 중 가장 긴 수열을 찾는 방법이다. 구하는 방법은 하나의 수열을 순서대로 다른 수열의 모든 문자와 비교하여 같은지 비교하는데, 동적 계획법(DP)을 활용하여 문제를 푼다. 1. 만약 같다면 현재 비교하고 있는 [n][n] 번 위치의 문자 이전에 매치됐던 [n-1][n-1] 번 위치에 있는 문자에 더한다. 2. 만약 다르다면 비교하기 이전에 나왔던 가장 긴 길이를 갖도록 하기 위해서 [n][n-1] 위치의 값과 [n-1][n] 위치의 값을 비교하여 큰 값을 가진다. 3. 배열의 최종 위치의 숫자는 가장 긴 수열의 길이를 갖게 된다. 예시: ABCD, BZDCD =..