본문으로 건너뛰기

오늘 한 일

  • Rust 공부 (1시간 분량)
  • 약 알림 앱 UI 구현중
  • 약 알림 앱 디자인 구현중
  • Rust 크롤링 프로그램 트라이

Rust 공부

Result 타입 데이터

: 실패할 가능성이 있는 연산을 실행할 때 사용

  1. Successful Data
  2. Error Data
enum Result<T,E>{
Ok(T),
Err(E)
}

(T, E는 임의의 데이터 타입의미)


fn main() {
let customer1 = Customer::new("HakRim Lee", 14);
let valid = purchase(customer1);

match valid{
Ok(customer) => println!("{:?}", customer),
Err(e) => println!("{:?}", e)
}
}

//구조체
#[derive(Debug)]
struct Customer{
name: String,
age: i32,
}
impl Customer{
fn new(name: &str, age: i32) -> Self{
Self{
name: name.to_owned(),
age: age
}
}
}

//함수
fn purchase(customer: Customer) -> Result<Customer, String> {
if customer.age > 20{
Ok(customer)
}else{
Err("not enough age!!".to_owned())
}
}

? 연산자 = Result 타입에 사용,
Ok(T)인지 Err(E)인지 판단 ⇒ Err면 Err(E)를 반환, Ok면 T를 반환

//반환한 Result 값을 Ok()일 때 로직 실행, Err()일 땐 그대로 Err를 반환하는 코드
fn validation(employee: Employee) -> Result<(),String> {

let enter_employee: Employee = valid_enter(employee)?;
println!("{:?} can pass", enter_employee.name);
Ok(())
}

//철저하게 Ok(Employee) or Err(String)을 얻을 수 있음
fn valid_enter(employee: Employee) -> Result<Employee,String> {
if !employee.current {
Err("NOT ALLOWED - expired".to_owned())
} else{
match employee.types {
EmployeeType::MaintenanceCrew | EmployeeType::MarketingDepartment | EmployeeType::Manager
=> Ok(employee),
_ => Err("NOT ALLOWED - authority".to_owned())
}
}
}

: ?를 쓰는 함수의 리턴타입은 Result여야 한다 → Ok(()) 반환 필요, Err(e) 는 자동으로 반환됨


왜 match로 Ok(T), Err(e)로 메인에서 핸들링하지 않고 ? 를 쓴다는 것일까?

내생각: 기본적으로 fail이 발생할 수도 있는 연산에 Result 를 사용하게 될 때,
메인로직의 흐름은 당연히 성공 vs 실패 중 성공에 초점이 맞추어져 있을 것이다.

따라서 성공시 핸들러 가 코드에서 중요한 역할을 하며, ? 를 써서 정의한 함수는 오로지 성공시 핸들러 로서 동작하게 되므로 유지보수에 조금 더 편의를 제공하지 않을까 싶다
?를 쓰지 않으면 메인스트림에서 성공 핸들러와 실패 핸들러를 한 곳에서 관리해야하는데,
코드 분리로 관리의 편의성을 높이기 위해 ? 가 의미있는 것 같다..


Hashmap

: key-value로 구성된 collection

let mut var = Hashmap::new();

var.insert(key, value); // 추가
var.remove(key); //삭제
let var2: Option<T> = var.get(key); //조회

for (key, value) in var.iter(){}
for key in var.keys(){}

Android App UI 구현중

: compose라는 선언형 UI를 쓰면 속도는 빠르겠지만 배우는 입장이라 우선 Kotlin, xml파일, 안드로이드 스튜디오 지원 컴포넌트만 이용해 UI를 만들고있다.

기본적인 Activity.kt ↔ layout.xml 간 UI 동작원리에 대해서 다시 상기할 수 있었다.
추가로 res/styles,strings,drawable 파일을 적극적으로 활용해서 resource 관리에 신경써서 UI를 구성하고 있다.

오늘 3시간 정도 써서

  • 로그인 페이지 1,2,3
  • 약 등록 페이지 1 까지 구현했다.

UI 컴포넌트, res 관리 위주로 코드를 짜서 공유할 내용은 별로 없다.


약 알림 앱 디자인 구현

: 중노년층을 대상으로 앱을 만들고 싶어서 간단한 UI를 계속 염두에 두며 디자인을 짜보고 있다.
오늘은 Calendar 페이지 디자인

시간나면 피드백 부탁드려요 ㅎㅎ 화면 캡처 2023-06-30 220301


Rust 크롤링 프로그램 트라이

: 어제 안하겠다고 했건만 나중에 수강신청 줍기 프로그램을 만들 때 쓸 수 있을 것 같아서 다시 트라이해봤다.

Selenium을 사용해서 프로그래밍 하면 되는데 어떻게 쓰는지도 모르겠고 그냥 뜨는 에러들 해결을 위해 구글링으로 찾아보고 있다.