일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Elasticsearch
- 데이터베이스
- 클린코드
- JPA
- 개발
- 그리디알고리즘
- cleancode
- 스프링
- 애자일기법
- 엘라스틱서치
- 애자일프로그래밍
- framework
- 프레임워크
- Spring
- database
- API
- Java
- 알고리즘
- mongoDB
- spring boot
- 코딩테스트
- 코드
- 코딩
- Baekjoon
- 백준
- 자바
- 개발자
- 읽기쉬운코드
- 그리디
- ES
- Today
- Total
목록프로그래밍 (44)
튼튼발자 개발 성장기🏋️
Oracle에서 제공하는 java 1.8 docs를 살펴보면 상당히 많은 interface가 있다. 그 중에서 Function interface를 살펴보자. @FunctionalInterface public interface Function { R apply(T t); // ... } 이 인터페이스는 apply라는 하나의 abstract method(FunctionalInterface annotation)를 가진다. 보면 알 수 있겠지만, T 타입의 parameter를 받아 R 타입의 값을 리턴하는 메소드다. public class Exercise { public static void main(String[] args) { Function myEx = new Func(); System.out.print..
나는 java를 공부하고 사용할 때 "객체지향적으로 코딩해야한다!"(OOP)라는 생각으로 접근한다고 주입식 교육(?)을 받아왔다. 그런데 java1.8 부터 바뀐 많은 부분 중에 가장 대표적으로 "함수형 프로그래밍 기법"이 도입되었다. 차이점을 예를들어 이야기 하자면 아래와 같다. ex) 각 유저의 정보를 갖고 있는 유저 리스트가 있을 때, unvalified email을 추출한다. OOP 이메일을 담을 리스트 A 선언 반복문을 돌면서 email validation check unvalified email를 A에 추가 함수형 프로그래밍 user list에서 unvalified email을 갖고있는 유저만 추출 추출된 user list에서 email만을 리스트로 추출 접근 방식에 차이점이 보인다. OOP의..
앞 소개 게시글 에서 언급했 듯이, Packages와 Crates는 라이브러리와 실행 파일을 만들어주는 녀석들이다. crate는 바이너리 혹은 라이브러리이다. crate root는 crate를 빌드할 때 사용되는 소스 파일이다. package는 Crates를 빌드하는 방법을 설명하는 Cargo.toml를 가지고 있다. package의 crate는 하나의 라이브러리가 될 수 있다. (아직 감이 잘 오지 않는다...) 우리가 처음 Cargo를 사용했을 때를 기억해보자... [cargo new] command를 사용했었다. 그렇게 프로젝트를 생성을 했었다. 여기서 생각해야할 것은 생성된 프로젝트에 package가 생겼다는 것. 왜? Cargo가 Cargo.toml파일을 만들었기 때문. 이상하게도 Cargo.t..
러스트는 특수하게(?)도 "모듈 시스템"이라는 것을 제공하는데 scope와 관련된 많은 기능들을 말한다. 추가로 다음과 같은 모듈을 포함한다. Packages는 빌드, 테스트, 공유할수 있도록 해주는 Cargo 기능이다. Crates는 라이브러리나 실행파일을 생성하는 모듈 트리다. Modules는 scope와 privacy 정보(구조체, 함수, 모듈 등의 네이밍을 이야기하는 것 같다.)를 제어할 수 있다. 이번 장이 끝나면 scope를 정의하고, 사용하며, export를 할 수 있다. (기대 중..ㅎㅎㅎㅎ)

panic! 매크로가 복구 불가능한 에러를 처리하기 위함이라면, 복구 가능한 에러 처리를 위한 녀석은 Result가 있다. enum Result { Ok(T), Err(E), } Result의 핵심!!! T와 E는 제네릭 타입 파라미터다. T는 성공한 후에 Ok variant 내에 반환될 값의 타입 E는 실패한 후에 Err variant 내에 반환될 에러 타입 파일을 가지고 오는 코드를 보자. use std::fs::File; fn main() { let file = File::open("hello.txt"); if file.is_ok() { println!("SUCCESS!!! : {:?} ", file.ok()); } else { println!("FAILE!!! : {:?}", file.err())..

러스트의 에러는 크게 두 가지로 나눈다. Recoverable Errors : 복구 가능한 에러 Unrecoverable Errors : 복구 불가능한 에러 복구 가능한 에러의 경우에는 사용자에게 문제를 이야기하고 해당 요청을 재시도 할 수 있도록 한다. 복구 불가능한 에러는 버그의 종류(?)로써, Index를 벗어난다거나, 0으로 나누려고 하는 경우 등과 같이 뻑(?)나는 경우를 이야기 한다. 1. panic! panic! 매크로가 실행되면, 프로그램은 실패 메시지를 출력하고, 스택 해제와 더불어, 정리하고 종료시킨다. panic! 응답으로 인한 중단 혹은 스택 해제 panic! 매크로가 실행되면, 프로그래램은 unwinding(해제)을 시작한다. 이것은 러스트가 panic!을 마주친 함수들로부터 스택..
개인적으로 많은 Collection 중에 String 다음으로 가장 많이 사용했던 녀석이다. HashMap 형식을 가지고 있고 Key와 Value를 매핑시켜 관리하는 데이터 구조가 되겠다. Key와 Value를 메모리 어디에 저장할지 결정하는 해쉬함수를 통해 동작한다. use std::collections::HashMap; fn main() { // HashMap 정의 let mut scores = HashMap::new(); // 값 삽입 scores.insert(String::from("BLUE"), 1); scores.insert(String::from("RED"), 2); // #1 전체 출력 println!("scores : {:?}", scores); // #2 특정 값 출력 println!(..

언제나 그렇듯 대부분의 언어는 컬렉션이라 불리는 데이터 구조를 제공한다. 우리가 공부했던 튜플과 배열과는 다르게, 힙 영역에 저장된다. 즉, Compile Time에 데이터 크기를 알 필요가 없다는 뜻이 되며, 크기 확장 혹은 축소가 가능하다는 이야기다. (우리가 공부할 각 컬렉션의 성격이 조금씩 다르니, 적절하게 사용할 수 있는 능력을 기르는 것이 옳다고 생각된다.) 이번 장에서 다룰 컬렉션은 Vector(벡터)다. 메모리상에서 이웃되도록 모든 값을 넣는 단일 데이터 구조에 하나 이상의 값을 저장할 수 있도록 한다. 같은 타입의 값만을 저장 가능하다. 벡터 정의 및 사용 fn main() { // vector 정의 let mut vector: Vec = Vec::new(); // vector에 값 삽입..