제 블로그에서 가장 인기있는 글이 if 문 줄이기인데, 최근 신간 『자바 코딩의 기술』 에 비슷한 내용이 있네요. 새로운 것도 있고 중요한 것 같아서 제 나름대로 다시 한번 정리해 보았습니다. 한국 상황에 맞게 약간 변경도 했습니다. 물론 이 책에는 이외에도 수준높은 내용들이 엄청나게 많습니다. 거기서 초보 개발자에게 의미있을 만한 일반적인 규칙들입니다. (1) 불필요한 비교 조건식을 지워라 자바 언어에서는 int나 숫자 타입에 대해 반드시 비교를 해야 참거짓으로 바꿀 수 있다. 그런데 가끔 이런 문제 때문에 수식이나 함수의 결과가 진위형일 때도 == true 같이 비교식을 쓴 경우가 있다. 불필요한 진위식의 비교는 지우는 것이 필요하다. if (largerThanA(x) == true) 일반적으로 진위..
다음의 C 코드를 Rust로 바꾸어 보겠습니다. 배열과 for 루프, 그리고 함수에 배열을 넘기는 것이 포함됩니다. void analyze_slice(int arr[], int len) { printf("arr[0] = %d, 길이: %d\n", arr[0], len); } void main() { int xs[] = {1, 2, 3, 4, 5}; int ys[500] = {0}; printf("xs 배열의 크기: {}", sizeof(xs)/sizeof(int)); // 배열을 대여 - 함수 호출 analyze_slice(xs, 5); for (int x=0; x < 500; x++) { ys[x] = x; } // 배열의 슬라이스를 대여 analyze_slice(&ys[5], 3); } 배열을 2개 ..
러스트 언어는 C/C++ 언어에 뿌리를 두고 있다고 볼 수 있습니다. 새로운 개념이 많아 배우기 어려운 언어지만 그래도 작은 것부터 만들어보면 좋겠지요? 러스트 playground라는 사이트에서 프로그램을 짜서 컴파일러를 돌려볼 수 있습니다. 러스트는 컴파일이 어렵기로 소문이 자자합니다. 워낙 꼼꼼하게 에러를 내고 안전하고 정확한 코드가 아니면 실행을 안 시켜 주기 때문에 컴파일만 잘 되면 실행하다가 죽을 일이 별로 없다는 장점도 가집니다. (컴파일 오류가 런타임 오류보다는 훨씬 다루기 쉽죠?) 그럼 간단한 C/C++ 코드를 대응하는 러스트 프로그램으로 바꾸는 방법을 살펴보겠습니다. fn main() { let mut a = 10; let b = 20; let mut c = 30; a += b; c -=..
러스트 변수의 지정에서 변수와 객체의 오너십의 문제와 메모리 관리에 대해 Rust, 메모리를 자동으로 제때 해지한다 에서 살펴보았습니다. 여기서는 또하나의 변수에 관한 중요한 기능인 참조에 대해 살펴보려고 합니다. 러스트는 프로그래밍 언어의 개념들을 절묘하게 엮어 기존 언어와는 다른 새로운 규칙의 세계를 만들어 냅니다. 그래서 새로 익혀야 할 개념과 용어, 규칙이 많습니다. 변수는 자기가 가진 객체를 다른 변수에게 참조할 수 있게 빌려줄 수 있습니다. 대여(Borrow)는 말그대로 값에 대한 권한을 일부 빌려주는 것입니다. 그러면 참조 변수는 그 변수를 읽거나 쓸 수 있습니다. 러스트에서 변수와 객체의 관계는 다음과 같이 나누어집니다. 객체에 대한 불변 오너십을 가지는 변수: let name = "lee..
러스트의 등장과 성공으로 메모리 관리, 스택과 힙 등 이슈가 새로 중요하게 조명받고 있습니다. 러스트 공부에 도움이 되었으면 합니다. 프로그램과 메모리 프로그램은 CPU의 레지스터에 메모리에 있는 데이터를 가져와서 계산하고 바꾸고 다시 저장하는 과정을 통해 수행됩니다. 이러한 load와 store가 컴퓨터의 기본 동작입니다. 그런데 컴퓨터에서 수행중인 프로그램은 아주 많으므로 컴퓨터(OS) 관점에서 볼 때 여러 개 프로그램이 필요한 만큼 메모리를 넉넉하게 줄 수는 없습니다. 그래서 컴퓨터는 각 프로그램이 사용하는 메모리를 제한하고 종류를 나누어 규칙에 따라 사용하도록 하고 있습니다. 그래서 메모리는 정적, 스택, 힙 세 종류로 나누어 집니다. 정적 메모리는 코드나 데이터가 저장되는 영역입니다. 프로그램이..
C/C++ 언어는 메모리를 프로그래머가 직접 delete합니다. 모든 메모리를 할당한 역순으로 한 방울도 남기지 않고 해지해야 메모리 리크 없는 프로그램이 됩니다. 그런가하면 여기 저기 흩어져 있는 힙메모리를 가리키는 포인터들은 언제든 댕글링 참조가 될 위험에 노출되어 있습니다. 이것은 정말 사람의 노력이 너무 많이 들어야 하는 무식한 방법이죠. 그런가 하면 자바처럼 또는 대부분의 언어들처럼 프로그래머는 메모리를 쓰기만 하고 해지는 신경 안 쓸래 하는 가비지콜렉션(GC) 모델이 있습니다. 필요하면 언제든 객체를 만들고 아무 생각없이 쓰면 됩니다. 메모리 용량을 넉넉히 늘리는 것이 사람이 직접 손으로 고생하는 것보다 편하고 또 안전하다 라고 자바에서는 주장하고 있지요. 파이썬처럼 아예 응용 프로그램만 만드..
변수는 값이 바뀌는 것이고 상수는 값이 변하지 않는다고 배웠는데... Rust 언어의 온라인 문서(이하 Rust Book)를 읽으면서 기존의 프로그래밍 언어와 많이 달라진 개념을 하나씩 조금 다른 관점으로 정리해 보려고 합니다. Rust 언어의 프로그래밍에 대한 시각을 음미해 보려고 합니다. https://rinthel.github.io/rust-lang-book-ko/ch03-01-variables-and-mutability.html 변수와 가변성 - The Rust Programming Language 2 장에서 언급했듯이, 기본 변수는 불변성입니다. 이것은 Rust가 제공하는 안전성과 손쉬운 동시성이라는 장점을 취할 수 있도록 코드를 작성하게끔 강제하는 요소 중 하나입니다. 하지만 여전히 rinth..
- Total
- Today
- Yesterday
- TypeError
- 이터러블
- 패턴
- 자바regex
- 콜렉션
- max
- python example
- typedef
- 이터레이터
- 동적바인딩
- indexof
- follow
- contains
- 스트링
- contentEquals
- 지연계산
- Lazy evaluation
- Camel Style
- APPEND
- CompareTo
- Iterator
- comparable
- format
- zip
- C++ 클래스
- python exercise
- 스트링 +
- ToString
- rust
- sort key
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |