전체 글

· 언어/Rust
Rust 공식 문서를 참고한 글입니다. Slice 자료형슬라이스 자료형이란 배열이나 문자열과 같은 컬렉션을 일부 참조할 수 있게 하고, 소유권을 갖지 않아도 복사 없이 빠르게 접근할 수 있도록 하는 것이다. 첫번째 단어의 마지막 글자 인덱스를 반환하는 프로그램 예제를 살펴보자. 반복문을 통해 문자열을 탐색하며 띄어쓰기를 만나면 인덱스를 반환하는 방식이다.  fn first_word(s: &String) -> usize { let bytes = s.as_bytes(); for (i, &item) in bytes.iter().enumerate() { if item == b' ' { return i; } } s.len()}문자열의 마지막 인..
· 언어/Rust
Rust 공식 문서를 참고한 글입니다. 변수를 바인딩해 복사가 아닌 이동을 하는 경우에는 소유권이 이전되어 접근할 수 없다. 함수에서 반환된 이후에도 그 값을 사용하고 싶다면, 반환값으로 전달해서 소유권을 다시 이전하는 방법도 있다. Rust는 참조(Reference)를 통해 소유권을 가져가는 것이 아니라, 대여할 수 있도록 한다. 1. 참조 Reference참조란 포인터와 유사하게 해당 주소에 저장되어 있는 데이터에 접근해 읽어올 수 있다. 이때, 소유권은 넘어가지 않는다. 따라서 함수를 호출한 이후에도 해당 변수를 계속해서 사용할 수 있다. 참조할 때는 매개변수 자료형 앞에 & 를 붙여서 소유권을 가진 변수가 그 범위를 벗어나도 drop 함수를 호출하지 않는다. 예제를 살펴보자.fn main() { ..
· 언어/Rust
Rust 공식 문서를 참고한 글입니다. Ownership소유권(ownership)은 Rust에서 메모리를 관리하는 방식을 규정하는 일련의 규칙이다. 모든 프로그램은 실행 중 컴퓨터 메모리를 관리해야 하는데, 몇몇 언어는 실행 중에 사용되지 않는 메모리를 찾는 방식을 사용하기도 하고, 프로그래머가 명시적으로 메모리를 할당하고 해제하는 경우도 있다. Rust는 이와 달리, Owner System을 통해 관리되고 컴파일러가 소유권 규칙을 감시하기 때문에, 규칙을 하나라도 어긋나면 컴파일되지 않는다.  소유권 규칙 Ownership ruleRust의 모든 값은 owner이 존재한다.한 순간에 한 owner만 존재할 수 있다. owner이 해당 범위를 벗어나면, 그 값은 제거된다. 변수 범위 Variable Sc..
Recoil 공식 문서를 참고한 글입니다. 1. Recoil 기본 개념recoil이란 React를 위한 상태 관리 툴이다. recoil을 사용하려면, atoms에서 selectors를 거쳐 React 컴포넌트로 내려가는 data-flow graph를 만들 수 있다.  Atomsatom은 상태 단위로, atom 값을 읽는 컴포넌트들은 암묵적으로 atom을 구독하기 때문에 atom에 어떤 변화가 생기면 자동적으로 재렌더링이 된다. 디버깅이나 지속성 등을 위해 고유한 key가 필요하고, React 컴포넌트 상태처럼 기본 값도 가진다.const fontSizeState = atom({ key: 'fontSizeState', default: 14,}); atom을 읽고 쓸 때는 useRecoilState라는 ..
· 언어/Rust
Rust 공식 문서를 참고한 글입니다.  프로그램 흐름을 제어하는 방법은 특정 조건이 참일 때만 코드를 수행하거나 특정 조건을 만족하는 동안에만 코드를 수행하도록 하는 것이다. 이를 구현하는 방법이 if 와 loops를 사용하는 것이다. 1. if 표현식if 표현식은 조건에 따라서 코드를 분기할 수 있게 한다.  fn main() { let number = 3; if number  if 후에 조건을 붙여 조건문을 시작하고, number 이 5보다 작은지 확인한다. 조건을 만족하지 않으면 else 구문으로 처리된다. 이때 if 표현식을 arms라고 표현하는데, match 표현식과 유사하기 때문이다.  만약에, number fn main() { let number = 3; if numb..
· 언어/Rust
Rust 공식 문서를 참고한 글입니다. 함수우리가 프로그램의 시작점을 선언할 때 main이라는 함수를 fn을 사용해 정의하며, {} 안에 함수 body를 넣는다는 것을 이미 학습한 바 있다. 변수명처럼 함수 이름도 소문자로 snake case를 사용한다.  fn main() { println!("Hello, world!"); another_function();}fn another_function() { println!("Another function.");} 함수를 정의하려면 fn 뒤에 함수 이름과 {} 안에 함수의 기능을 작성한다. 중괄호를 통해서 컴파일러에게 함수의 시작과 끝을 알려주는 것이다. 또한 C언어는 함수의 선언 순서가 중요하지만 Rust는 중요하지 않다. 그래서 위 프로그램..
· 언어/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 공식 문서를 참고한 글입니다. Rust를 사용해서 출력하고 컴파일하는 과정까지 공부했다. 이번에는 숫자 맞히기 게임을 구현할 것이다. 게임 규칙은 다음과 같다. 1~100 사이의 난수를 생성한다.사용자로부터 예측 값을 입력 받는다.사용자가 입력한 예측 값과 난수를 비교해서 더 큰지, 더 작은지 출력한다.예측 값과 난수가 같다면 축하합니다 메세지와 함께 게임이 종료된다. 1. 새 프로젝트 생성하기cargo를 사용해 새로운 프로젝트를 만들어야 한다. $ cargo new guessing_game$ cd guessing_game지난 번에도 봤듯, 프로젝트를 생성하면 guessing_game이라는 폴더 안에 Cargo.toml과 src 폴더가 생성된다. 2. 예측 값 처리사용자에게 예측 값을 입력하라는..
· 언어/Rust
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..
· PS/BOJ
1. 문제https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 2. 문제 해석이 문제는 주어진 숫자를 적절히 더하거나 빼서 target를 맞추는 경우의 수를 구하는 문제이다. 예를 들어, [1, 1, 1, 1, 1] 이라는 배열이 주어졌을 때, 각각을 더하거나 뺄 수 있으므로 자연스럽게 트리 구조를 떠올릴 수 있다. 그래서 재귀적인 방법을 사용해 트리를 순회해 최종 리프 노드의 값이 target과 같으면 answer++ 해주면 된다. #include #..
소-은
남소금