오늘 한 일
- Rust 공부 (1시간 분량)
- 약 알림 앱 UI 구현중
- 약 알림 앱 디자인 구현중
- Rust 크롤링 프로그램 트라이
Rust 공부
Result 타입 데이터
: 실패할 가능성이 있는 연산을 실행할 때 사용
- Successful Data
- 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 페이지 디자인
시간나면 피드백 부탁드려요 ㅎㅎ
Rust 크롤링 프로그램 트라이
: 어제 안하겠다고 했건만 나중에 수강신청 줍기 프로그램을 만들 때 쓸 수 있을 것 같아서 다시 트라이해봤다.
Selenium
을 사용해서 프로그래밍 하면 되는데 어떻게 쓰는지도 모르겠고 그냥 뜨는 에러들 해결을 위해 구글링으로 찾아보고 있다.