파이썬 기초 - 1 -
·
Python
지도에서 직선 거리구하기자 강남역 9번 출구에서 CU로 가려고 합니다. 여기서 우리는 9번 출구에서 CU까지 직선 거리가 얼마인지 궁금할 때가 있을겁니다.네이버 지도에서는 그냥 대각선으로 쭉 그어서 거리 구할 수 있기는 하지만 우리는 파이썬으로 이걸 구해봅시다   우선 우리에게 주어진 정보는 두가지라고 가정하겠습니다.삼각형의 밑변 삼각형의 높이가 주어졌습니다.피타고라스 정리를 활용하면 이 문제를 풀 수 있습니다. 우리는 a와 b의 길이를 알면 c를 알수 있다! 라는 지식을 가지고 있습니다.왜 그렇냐구요?  a의 길이를 한변으로 하는 정사각형의 넓이와, b의 길이를 한 변으로 하는 정사각형의 넓이를 구해보니 c를 한변으로 하는 정사각형의 넓이와 같더라! 라는걸 옛날에 수학자들이 밝혀냈습니다. 정사각형의 넓..
Rust 기본개념 - 패키지, 모듈관리
·
Rust
거대한 프로그램의 코드를 작성 할 때는 코드의 구조화가 중요해집니다. 코드에서 연관된 기능을 묶고 서로 다른 기능을 분리해두면 이후 특정 기능을 구현하는 코드를 찾거나 변경할 때 헤매지 않습니다. 한 패키지에는 여러 개의 바이너리 크레이트와 라이브러리 크레이트가 포함될 수 있으므로, 커진 프로젝트의 각 부분을 크레이트로 나눠서 외부 라이브러리 처럼 쓸 수 있습니다. 패키지와 크레이트크레이트크레이트는 러스트가 컴파일 한 차례에 고려하는 가장 작은 코드 단위 입니다. 크레이트는 바이너리일 수도 있고 라이브러리일 수도 있습니다. 바이너리 크레이트는 main 함수를 포함하고 실행파일이 실행되면 무슨일이 일어나야 하는지 정의한 파일입니다. 반대로 라이브러리 크레이트는 main함수를 가지지 않고 실행파일 형태로 컴..
Rust 기본개념 - 패턴매칭 match
·
Rust
Match란?Rust에서 패턴 매칭 분기를 위한 흐름제어 도구 입니다.기본 문법match 값 { 패턴 => 표현식, 패턴 => 표현식, // ...}값: 매칭하려는 값입니다.패턴: 값과 비교할 패턴입니다.표현식: 패턴이 일치했을 때 실행할 코드입니다. Match의 사용법숫자 매칭fn main() { let number = 3; match number { 1 => println!("Number is one"), 2 => println!("Number is two"), 3 => println!("Number is three"), _ => println!("Number is something else"), }}패턴: 1, 2, ..
Rust 기본개념 - 열거형의 활용
·
Rust
아래 코드는 랜덤으로 날씨를 선택하고 패턴 매칭으로 해당하는 문자열을 출력하는 코드 입니다.use rand::Rng;fn main () { enum Weather { Sunny, Ranny, Snowy {cm:u32} } let weather_list = vec![Weather::Sunny, Weather::Ranny, Weather::Snowy { cm: 5 }]; let random_number = rand::thread_rng().gen_range(0..3); match &weather_list[random_number] { Weather::Ranny => println!("Ranny!"), Weathe..
Rust 기본개념 - 열거형
·
Rust
열거형 정의하기구조체가 서로 연관된 필드 및 데이터를 묶는 방법을 제공 했다면 열거형은 어떤 값이 여러개의 간으한 값의 집합 중 하나라는 것을 나타내는 방법을 제공 합니다. 예를들어 Rectangle이 Circle과 Triangle을 포함하는 다양한 모양들의 집합 중 하나라고 표현하고 싶을 수 있습니다. 이때 열거형을 사용하여 나타낼 수 있습니다. 값의 제한과 가독성,안전성을 위해 열거형을 사용합니다.IP 주소를 열거형으로 나타내면 아래와 같이 나타낼 수 있습니다.enum IpAddrKind { V4, V6,} IP 주소라는 것은 IPv4, IPv6 두 종류 입니다. 이 처럼 정해진 값만 사용하도록 값을 제한할 수 있습니다. 열거형의 활용아래처럼 IpAddrKind의 두 개의 값에 대한 인스턴..
Rust 기본개념 - 메서드
·
Rust
메서드란? 함수와 유사한 개념으로 fn 키워드와 함수명으로 선언하고 매개변수화 반환값을 가집니다. 메서드 문법메서드는 다른 어딘가로부터 호출될 때 실행됩니다. 하지만 메서드는 함수와 달리 구조체 컨텍스트에 정의되고, 첫번째 매개변수는 메서드를 호출하고 있는 구조체 인스턴스를 나타냅니다. 메서드 정의하기우선 함수를 구조체에 정의된 메서드로 변환해봅시다.Rect 컨텍스트에 함수를 정의하기 위해서 impl 블록을 만듭니다.// 명시적 동의#[derive(Debug)]struct Rect { width: u32, height: u32}impl Rect { fn area(&self) -> u32 { self.width * self.height }}fn main() { let..
Rust 기본 개념 - 구조체
·
Rust
구조체는 타입이 다른 여러 값을 하나로 묶는 방법 입니다. 구조체는 설명만 보면 튜플과 상당히 비슷해 보입니다. 실제로도 튜플처럼 구조체의 구성요소들을 각각 다른 타입이 될 수 있습니다.그리고 구조체는 각각의 구성 요소에 이름을 붙일 수 있습니다. 객체지향 언어를 해보았던 사람이라면 바로 객체가 떠오를겁니다.아래를 보면 우리가 생각한 객체의 모습과 상당히 비슷합니다. 자바에서는 아마 이런 구조를 객체 또는 클래스 라고 불렀던 것 같습니다.타입스크립트 에서는 타입 혹은 인터페이스가 구조체와 비슷하다고 볼 수 있겠네요!struct User { active: bool, username: String, email: String, sign_in_count: u64,}정의한 구조체는 해당 구조..
Rust 기본개념 - 슬라이스
·
Rust
슬라이스는 컬렉션을 통째로 참조하는 것이 아닌 연속된 일련의 요소를 참조하도록 해줍니다.슬라이스는 참조자의 일종으로 소유권을 갖지 않습니다. 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()} 위 예제는 함수의 인자로 받은 문자열에서 첫번째 공백문자를 찾아 리턴하는 예제 입니다.우선 슬라이스 개념 없이 이를 수행해보도록 하겠습니다. let bytes = s.as_bytes();// 공백 여부 체크를 위해 바이트로 변환 Rust의..