반응형

프로그래밍 일반 61

[Go] Slice 기능 요약

슬라이스 배열은 정한 길이에서 더이상 크기가 늘어나지 않습니다. 슬라이스를 사용하면 이러한 불편을 해소 할 수 있습니다. 다음 과 같이 선언하면 크기가 0인 슬라이스가 만들어 집니다. 크기를 초과한 접근을 하면 런타임에 패닉이 발생합니다. var slice []int // 패닉 발생 slice[1] = 10 사용 방법 // {}로 초기화 var slice = []int{1, 2, 3} // 다음은 크기가 3인 배열 선언, 구분합시다! var array = [...]int{1, 2, 3} // make로 초기화 var slice = make([]int, 3) // append로 요소 추가 slice = append(slice, 4) // append로 여러 값 추가 slice = append(slice, ..

Go 언어의 Json Tag

Go 언어의 Json 참고: https://www.joinc.co.kr/w/man/12/golang/json JSON Tag encoding/json 패키지의 경우 아래와 같이 Tag를 이용해서 마샬/언마샬 방식을 설정 할 수 있습니다. type RequestCreateOpenChannel struct { Name string `json:"name"` ChannelUrl string `json:"channel_url"` CustomType string `json:"custom_type"` Data string `json:"data"` IsDynamicPartitioned bool `json:"is_dynamic_partitioned"` } omitempty omit empty : 비어 있으면 생략한다. ..

C++ 개발자를 위한 Go 언어 요약 정리

C++ 개발자 분이 두꺼운 Go 언어책 모두를 다시 보실 필요 없이 C++ 언어 기반에서 추가로 이해하면 좋은 핵심 내용들만 간추렸습니다. Go 언어 특징 Go는 정적 컴파일 언어. 컴파일 과정을 거쳐 실행 파일을 미리 만들어야 하지만 실행 속도가 빠릅니다. Go는 강 타입 언어입니다. 조금 번거롭지만 타입에 따른 문제점이 없습니다. Go 언어는 가비지 컬렉터 제공 가비지 컬렉터 Go 언어는 가비지 컬렉터를 제공합니다. 매우 발전된 형태의 가비지 컬렉터를 제공해 성능 손실이 크지 않습니다. 패키지 명 == 폴더 명 Go 모듈 생성 go mod init 명령을 실행하여 모듈 생성 예) go mod init myproject/hello Go 모듈을 생성하면 go.mod 파일이 생성됩니다. Go 빌드 go t..

[C++] 유용한 C++ 기능 - attribute specifier

C++11부터 도입된 attribute specifier(속성 지정자)는 코드의 컴파일러에 대한 추가 정보를 제공하는 데 사용됩니다. 이를 통해 개발자는 특정 컴파일러에 맞춰진 속성을 지정하거나, 코드에 대한 최적화 및 다른 목적으로 사용자 정의 속성을 추가할 수 있습니다. Attribute specifier는 대괄호 [[와 ]]로 묶여진 형태로 사용됩니다. 아래는 attribute specifier의 간단한 예제입니다: [[noreturn]] void SomeFunc() { ... return;// 함수 내부에 리턴문이 있으면 컴파일 에러가 발생합니다. // 중간에 리턴문으로 인해 의도하지 않게 함수의 모든 코드를 // 실행할 수 없는 상황을 막는데 용이합니다. ... } [[nodiscard]] bo..

[C++] 유용한 C++ 기능 - brace initialization

기본 초기화의 문제점 // #1. 멤버 변수 배열은 초기화할 수 있는 방법이 없다. struct A { int arr[100]; }; // #2. POD 동적 할당을 초기화할 수 있는 방법이 없다. char* buff = new char[100]; // #3. STL 컨테이너를 초기화할 수 없다. std::vector vec; // #4. 타입에 따라 초기화 구문이 일관적이지 않다. int i(10); // 10으로 초기화 A a(); // a는 기본 생성자로 초기화?? A 타입을 리턴하는 함수 선언?? C++11에서 도입된 중괄호 {}를 사용한 초기화 방식을 "brace initialization" 또는 "uniform initialization"이라고 부릅니다. int myInt = 42; // 기존..

[C++] 유용한 C++ 기능 - structured binding

C++17에서 도입된 structured binding은 복합적인 데이터 구조를 손쉽게 풀어낼 수 있는 기능을 제공합니다. 이를 통해 배열, 튜플, 구조체 등에서 멤버를 간단하게 추출하여 사용할 수 있습니다. Structured binding은 다음과 같은 문법을 사용합니다: auto [변수1, 변수2, ...] = 표현식; 여기서 표현식은 풀어낼 데이터 구조를 나타내며, 변수1, 변수2 등은 구조체나 튜플의 각 요소에 대응됩니다. 예를 들어, 튜플을 사용한 structured binding은 다음과 같이 보입니다: #include #include int main() { std::tuple myTuple(42, 3.14, "Hello"); auto [a, b, c] = myTuple; std::cout

[C++] 유용한 C++ 기능 - if / switch init statement

if / switch init statement 로컬 변수의 생명주기가 블럭과 같도록 합니다. if 문 이후에 x 변수가 잘못 사용되는 위험을 방지하고 코드의 의도를 명확히 합니다. if (int x = getX(); x > 0) { // x가 0보다 큰 경우에 실행되는 코드 // x를 여기서 사용할 수 있음 } else { // x가 0 이하인 경우에 실행되는 코드 } 위의 예제에서 getX() 함수는 변수 x를 초기화하는데 사용됩니다. 이렇게 하면 if 블록 내에서만 x가 유효하게 됩니다. 다음은 switch에서 사용하는 예시입니다. switch (int value = getValue(); value) { case 1: // value가 1인 경우에 실행되는 코드 break; case 2: // va..

반응형