Rust 공식 문서를 참고한 글입니다. 함수우리가 프로그램의 시작점을 선언할 때 main이라는 함수를 fn을 사용해 정의하며, {} 안에 함수 body를 넣는다는 것을 이미 학습한 바 있다. 변수명처럼 함수 이름도 소문자로 snake case를 사용한다. fn main() { println!("Hello, world!"); another_function();}fn another_function() { println!("Another function.");} 함수를 정의하려면 fn 뒤에 함수 이름과 {} 안에 함수의 기능을 작성한다. 중괄호를 통해서 컴파일러에게 함수의 시작과 끝을 알려주는 것이다. 또한 C언어는 함수의 선언 순서가 중요하지만 Rust는 중요하지 않다. 그래서 위 프로그램..
분류 전체보기
Rust 공식 문서를 참고한 글입니다. 변수 Rust에서 변수는 immutable, 즉 불변성을 가진다. 변수를 안전하게 관리할 수 있게 해주며 동시성(Concurrency)의 이점도 존재한다. 명시적으로 변수를 가변적으로 만들 수도 있는데, 기본적으로는 불변성이라는 특징을 가지고 있다. 이제 Rust에서 불변성을 권장하는 이유와 변수를 가변적으로 변경할 수 있는지 살펴보자. variables라는 새로운 프로젝트를 만들고, main.rs에 아래와 같은 함수를 작성한다.fn main() { let x = 5; println!("The value of x is: {x}"); x = 6; println!("The value of x is: {x}");} 이 프로그램을 실행하면 오류가 발생..
Rust 공식 문서를 참고한 글입니다. Rust를 사용해서 출력하고 컴파일하는 과정까지 공부했다. 이번에는 숫자 맞히기 게임을 구현할 것이다. 게임 규칙은 다음과 같다. 1~100 사이의 난수를 생성한다.사용자로부터 예측 값을 입력 받는다.사용자가 입력한 예측 값과 난수를 비교해서 더 큰지, 더 작은지 출력한다.예측 값과 난수가 같다면 축하합니다 메세지와 함께 게임이 종료된다. 1. 새 프로젝트 생성하기cargo를 사용해 새로운 프로젝트를 만들어야 한다. $ cargo new guessing_game$ cd guessing_game지난 번에도 봤듯, 프로젝트를 생성하면 guessing_game이라는 폴더 안에 Cargo.toml과 src 폴더가 생성된다. 2. 예측 값 처리사용자에게 예측 값을 입력하라는..
Rust 공식 문서를 참고한 글입니다. 1. Rust 설치먼저, Rust를 설치하기 위해서 rustup이라는 CLI tool을 사용할 것이다. MacOS/Linux 에서는 shell에서 설치가 가능하기에, 명령어를 통해 설치할 것이다.$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh중간에 option을 선택해야 하는데, 1이나 enter를 입력하면 알아서 설치를 시작한다.Rust is installed now. Great! 라는 문구가 뜨면 설치가 완료된 상태이다.이렇게 출력되면, rustup이 등록한 환경변수가 시스템이 바로 등록되지 않기 때문에 터미널을 종료하고 다시 시작하거나 직접 등록할 수 있다.~$ source $HOME/.car..
1. 문제https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 2. 문제 해석이 문제는 주어진 숫자를 적절히 더하거나 빼서 target를 맞추는 경우의 수를 구하는 문제이다. 예를 들어, [1, 1, 1, 1, 1] 이라는 배열이 주어졌을 때, 각각을 더하거나 뺄 수 있으므로 자연스럽게 트리 구조를 떠올릴 수 있다. 그래서 재귀적인 방법을 사용해 트리를 순회해 최종 리프 노드의 값이 target과 같으면 answer++ 해주면 된다. #include #..
현재 개발 중인 앱에서는 로그인 후 메인 화면에 들어가면, 서버로부터 해당 달에 해당하는 모든 정보를 불러와 사용자에게 제공한다. 그러나, 달별, 일별로 각각 데이터가 있는 바람에 앱의 성능이 좋지 않았다. 메인 화면에 들어갔을 때, 서버에서 데이터를 가져오는 시간 + 이미지와 데이터를 불러오는 시간 때문에 앱이 동작하지 않는 것처럼 10초 정도 멈춰있었다. 그래서 로딩 이펙트나 skeleton UI를 사용해서 실제 로딩 시간보다 사용자가 느끼는 체감 로딩 시간을 줄이려고 했다. 로딩이 된다는 사실을 사용자에게 알리는 건 좋지만, 오히려 로딩 시간이 실제보다 더 길게 느껴지는 단점이 있었다. 오히려, 사용자 체감 시간을 줄이는 것보다도 물리적 시간을 줄여보자는 생각으로 앱의 전반적 성능을 개선하기 위해..
1. JWTJWT와 같은 Bearer 토큰은 access token만으로도 서버에서 디지털 서명을 통해 위변조 확인 후 사용자 인가를 처리할 수 있다. 그러나 탈취 가능성을 고려하여 access token의 만료 기간을 짧게 설정하여 탈취 가능성을 낮추는데, 클라이언트는 access token의 짧은 만료 기간 때문에 자주 발급받아야 하는 불편함이 있다. 이 문제를 해소하기 위해서 사용하는 것이 refresh token이다. refresh token을 사용하면 access token보다 만료 기간이 길어 access token이 만료되었다면 refresh token으로 access token을 갱신하도록 돕고 access token의 stateless한 특성에서 발생하는 취약점을 보완할 수 있다. 2...
메인에서 여러 개의 네비게이션을 구현했는데, 요구사항에 맞추어 서로 다른 네비게이션에 존재하는 페이지로 이동하는 것을 구현해야 했다. 만들고 있는 앱의 라우터 구조가 아주 복잡하게 되어 있어 네이게이션 스택 간 이동이 쉽지 않았다. 먼저 라우터 구조를 보면, Router라는 파일 안에 GolfFieldNavigation, CaddyNavigation이 존재하고, GolfFieldNaviagation 안에 TabNavigation인 TabBar 안에 또 여러 Navigation이 존재했다. 리팩토링을 거치지 않은 순수그자체라 아쉬운 부분이 있지만, 현재로서 Stack 간 이동을 구현할 방법을 고민했다.Router - GolfFieldNavigation - TabBar : Tab Navi..
프로젝트를 진행하면서 한 페이지에 요청하는 API가 많거나, 불러와야 할 데이터가 많은 경우에 사용자 경험을 어떻게 개선할 수 있을까 고민했다. 예를 들어서 앱에 필요한 패키지를 다운로드하거나 파일을 업로드할 때 단순 로딩 이펙트보다는 어떤 작업을 처리하고 있는지 표시하면, 확실히 기다림이 줄었다. 유튜브 같은 경우 메인 화면에서 영상이 불러오기 전에 스켈레톤 화면을 보여주는데, 그렇게 많은 데이터를 불러오면서도 로딩 시간이 길다곤 전혀 느껴지지 않았다. 그래서 다양한 서비스에서 이러한 스켈레톤 화면을 어떻게 활용하고 있고 사용자 경험을 개선하기 위해서 어떤 노력을 하고 있는지 궁금해 대표적으로 카카오페이 사례를 알아보았다. 카카오페이에서 스켈레톤 화면을 활용하는 방법카카오페이는 아래와 같이 Progre..
C++ STL 중 하나인 unordered_map은 map보다 더 빠른 탐색을 위한 자료구조이다.시간복잡도가 O(logn)인 map에 비해 unordered_map은 해시 테이블로 탐색하여 O(1) 시간복잡도를 가진다. 함수unordered_map을 include 해서 사용할 수 있는 함수는 다양하다. 실제 코딩테스트에서 주로 사용하는 함수에 대해서 알아보자.empty() : map이 비었는지 확인하는 함수size() : map의 크기를 확인하는 함수[] : map에서 key를 사용해서 value를 지정하는 operatorfind(key) : key를 사용해서 value를 찾는 함수 count(key) : key에 해당하는 value 갯수를 찾는 함수insert({key, value}) : map에 p..