SCRIPTS BY
close
프로필 배경
프로필 로고

SCRIPTS BY

  • 분류 전체보기 (76)
    • C++ (19)
    • Flutter, Dart (13)
      • Flutter (11)
      • Dart (2)
    • Database (8)
    • Web (5)
    • 회고록 (6)
    • 개발일지 (6)
    • Review (7)
      • Books (2)
      • Conference & Seminar (4)
      • IT Products (1)
    • Notion (2)
    • Algorithms (3)
    • Computer Science (6)
  • 홈
  • 방명록

블록체인 학회 운영 회고록(1) 하이블의 태동

블록체인 학회 회고록 지난 22년 5월, 처음으로 블록체인 학회를 만들기 위한 초기 운영진이 대면으로 만남을 가지었다. 모인 사람은 세 명. 장소는 카레집. 그로부터 9개월. 23년 2월 22일 하이블 1기의 활동이 공식적으로 종료되기까지 나의 1학년은 블록체인 동아리와 함께 하였고 그로부터 끝났다고 해도 과언이 아니다. 휴대폰의 캘린더 앱에 가장 처음으로 기록된 하이블 관련 회의는 22년 6월 20일, 17시에 있었던 하이블 온라인 회의다. 이때를 기점으로 해봐도 248일 간을 몸담았던 학회. 이곳에 몸담으면서 잃은 것도, 얻은 것도 많았다. 블록체인 학회를 하면서 느낀 점을 여러 편에 걸쳐서 정리하고자 한다. 글은 두서없이 쓰이지만 그동안 느껴왔던 나의 진솔한 생각들을 담고자 한다. 블록체인 학회를 ..

  • format_list_bulleted 회고록
  • · 2023. 3. 20.
  • textsms
vector VS list 뭘 써야 하지?

vector VS list 뭘 써야 하지?

vector와 list 중 무엇을 써야 할까? 결론부터 말하면 거의 대부분의 상황에서 그냥 std::vector를 쓰면 된다. 그 이유를 알면 더 좋다. std::vector와 std::list의 차이 C++에서는 배열로 사용할 수 있는 컨테이너를 여러 개 지원하는데, 그 중 가장 많이 쓰이는 것은 std::vector와 std::list가 있다. 두 개 다 역할은 비슷한 거 같은데, 그 내부 구현은 완전히 다르다. 먼저 std::vector는, 그 내부 구조가 연속적인(Sequential 타입) 배열 형태로 이루어져 있다. 실제 물리적인 메모리 구조 상으로 연속적인 구조이다. 위 그림 모델이 정확히 std::vector의 모습을 표현하고 있다. 반면에 std::list는, 내부가 불연속적인(Non-se..

  • format_list_bulleted C++
  • · 2023. 3. 13.
  • textsms
[모던 C++] C++에서 랜덤값 얻기/ rand() 함수 쓰면 안 되는 이유

[모던 C++] C++에서 랜덤값 얻기/ rand() 함수 쓰면 안 되는 이유

rand() 함수 사용하면 안 되는 이유 우리가 C언어를 사용할 때, 랜덤한 넘버를 얻기 위해서 종종 다음과 같은 코드를 사용하는 경우를 볼 수 있다. #include #include int main(void) { srand(time(NULL)); int randNum = rand() % 100; return 0; } 위 코드는 0부터 99까지 범위에서 난수를 생성해서 randNum에 저장하는 코드이다. 위 코드는 두 가지 심각한 문제를 갖고 있는데 일단 rand()의 시드를 초기화하는데 time을 사용한 것도 문제고 그보다 더 큰 문제는 rand()를 사용했다는 것 그 자체이다 왜 rand() 함수를 사용한 것이 문제가 되는가. 그전에 간단히 컴퓨터가 어떻게 랜덤 함수를 구현하는지 알아보자. 사실 디지..

  • format_list_bulleted C++
  • · 2023. 3. 6.
  • textsms
[C++] struct와 class의 차이점

[C++] struct와 class의 차이점

구조체와 클래스의 차이점 C++에는 여러 데이터 집합을 담을 수 있는 대표적인 방법이 두 가지가 있는데 구조체(struct)와 클래스가 바로 그것이다. 둘이 역할은 비슷해보이는데, 둘의 차이점은 무엇일까? 접근 제한자 - struct는 public, class는 private 일단 기본 접근 제한자가 다르다. 기본 접근 제한자란 해당 구조체 혹은 클래스를 선언하고, 명시적으로 접근 제한자를 설정하지 않았을 때 기본적으로 주어지는 멤버의 접근 제한자를 의미한다. 그래서 struct를 생성했을 때, 접근 제한자를 아무것도 쓰지 않는다면 자동으로 모든 멤버가 public으로 처리된다. 반대로 class를 생성했을 때는 기본적으로 private하게 주어진다. struct UserData { int ID; // ..

  • format_list_bulleted C++
  • · 2023. 2. 27.
  • textsms

백준 [7587번 Anagrams]

7587번 Anagrams 난이도: 실버 4 알고리즘 분류: 문자열, 해시맵 언어: C++ 주차: 7주차 풀이 날짜: 2023년 1월 31일 문제 7587번: Anagrams 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 155 97 60 65.217% 문제 Two words are anagrams if they contain the same letters but in a different order. For example ant and tan are anagrams, but ant and ton are not. In this problem you will be supplied with a list of words. All you have to do is to pick out..

  • format_list_bulleted Algorithms
  • · 2023. 2. 25.
  • textsms
잘못 쓰면 백 배 느린 for 문-이중 for 문 제대로 쓰는 법, 캐시 친화적 반복문

잘못 쓰면 백 배 느린 for 문-이중 for 문 제대로 쓰는 법, 캐시 친화적 반복문

개요 프로그래밍을 하다보면, 혹은 백준 문제를 풀다 보면 자주 이중 for문, 혹은 그 이상의 중첩된 반복문을 사용해야 할 때가 있는데, 이때 이중 for 문을 잘 못 쓰면 코드가 100배 가까이 느려질 수도 있다. 이건 비단 C++만의 문제는 아니고 모든 프로그래밍에 적용되는 이야기이다. 백 배 이상 느린 중첩 반복문 // 1번 방법 for (std::size_t i = 0; i < N; ++i) { for (std::size_t j = 0; j < M; ++j) { arr[i][j] *= 2; } } // 2번 방법 for (std::size_t i = 0; i < M; ++i) { for (std::size_t j = 0; j < N; ++j) { arr[j][i] *= 2; } } 위에 코드를 보..

  • format_list_bulleted C++
  • · 2023. 2. 23.
  • textsms
[C++] vector iterator, range base loop 사용 시 emplace_back 쓰지 마세요

[C++] vector iterator, range base loop 사용 시 emplace_back 쓰지 마세요

iterator 사용 시 흔히 하기 쉬운 실수 C++ 개발자라면 무조건 알아야 하는 주의 사항 iterator 사용 시 push, emplace 사용 시 발생하는 버그 iterator를 사용하면 C++에서 STL 라이브러리들을 쉽게 다룰 수 있습니다. iterator에 대한 글을 보고 싶다면 iterator, 왜 사용할까?라는 글을 참고하세요. vector를 사용할 때 iterator는 아주 유용하죠. 그런데 vector iterator 사용 시 모든 사람이 꼭 알아야 주의해야 할 점이 있습니다. 바로 iterator 사용 시 그 안에서 push_back, emplace_back과 같은 연산을 사용해선 안 된다는 것입니다. 이건 정말 C++를 다루는 사람이라면 반드시 알아둬야 할 사항이고, 이로 인해 심..

  • format_list_bulleted C++
  • · 2023. 2. 20.
  • textsms
[C++] std::iterator, 왜 사용할까?

[C++] std::iterator, 왜 사용할까?

iterator, 왜 사용할까? iterator의 개념 먼저 C++로 코딩을 하신다고 하면, 반복자 iterator에 대해서 꼭 아시는게 좋습니다. iterator는 C++98 이전부터 있어왔던 포인터의 일종입니다. 매우 강력한 기능이고, 의외로 C++을 사용할 때 C와 다르게 포인터를 사용할 일이 정말 특이한 경우가 아니라면 거의 없는데, iterator는 정말 많이 사용합니다. iterator에서 가장 많이 사용하는 메소드는 begin()과 end()인데, 각각 컨테이너의 시작점, 그리고 끝점 + 1 칸을 리턴합니다. (그림 출처: cppreference vector begin, end) end()가 가장 끝점이 아닌, 가장 끝점에서 한 칸 더 나아간 위치를 리턴한다는 것을 주의하십시오. 그리고 it..

  • format_list_bulleted C++
  • · 2023. 2. 20.
  • textsms
[모던 C++] std::string_view, 왜 사용할까?

[모던 C++] std::string_view, 왜 사용할까?

std::string_view 란 std::string_view 는 C++17부터 추가된, 문자열을 다루는데 아주 강력하고 효과적인 컨테이너입니다. 내부 구현은 다르겠지만, std::string_view의 동작과 기능은 std::span과 거의 비슷합니다. std::span이 std::vector, C-style array, std::array 등의 다양한 형태의 배열을 효율적으로 다루기 위해서 존재했다면, std::string_view는 std::string, const char *, char [] 와 같은 다양한 형태의 문자열을 효율적으로 다루기 위해서 존재합니다. 한편 std::span에 대해서 궁금하시다면, [모던 C++]std::span, 왜 쓰는 걸까?라는 글을 보고 오시면 도움이 될 것 같습..

  • format_list_bulleted C++
  • · 2023. 2. 16.
  • textsms
[C++] OOP는 만능이 아니다. 데이터 중심 프로그래밍

[C++] OOP는 만능이 아니다. 데이터 중심 프로그래밍

객체 지향 프로그래밍은 만능이 아니다라는 말은 다소 논란의 여지가 있다. 그러나 OOP도 결국 하나의 프로그래밍 패러다임에 지나지 않고, 장점이 있는만큼 단점 역시 있기 마련이다. 그리고 OOP를 개선하기 위해, 혹은 새로운 프로그래밍 패러다임을 만들고자 다양한 패러다임이 등장하였다. C++는 기본적으로는 OOP 중심의 언어이지만, 람다 함수와 function 객체를 이용한 함수형 프로그래밍, 그리고 C언어 스타일의 절차 지향 프로그래밍 등 역시 지원한다. 이렇듯 시대의 변화에 맞추어 OOP 역시 다른 패러다임과 맞물려서 변형되어 사용되고 있고, 이제 단순히 OOP만을 지원하는 언어는 살아남기 힘들어졌다. OOP는 기본적으로 프로그래밍 역사상 가장 성공한 프로그래밍 패러다임이고, 또한 가장 널리 쓰이는 ..

  • format_list_bulleted C++
  • · 2023. 2. 13.
  • textsms
[Flutter] Error: Dart library 'dart:ui' is not available on this platform. 해결 방법

[Flutter] Error: Dart library 'dart:ui' is not available on this platform. 해결 방법

처음 플러터를 시작하였을 때 다음과 같은 에러가 뜨는 경우가 있다. Error: Dart library 'dart:ui' is not available on this platform. import 'dart:ui' show lerpDouble; ^ 이는 플러터 프로젝트를 다트 프로젝트 컴파일하는 것으로 세팅이 잘못 맞춰져 있어서 그렇다. vscode라면 터미널에 flutter run 을 직접 입력하면 문제를 해결할 수 있다.

  • format_list_bulleted Flutter, Dart/Flutter
  • · 2023. 2. 9.
  • textsms

[Dart] Dart 문법 정리 (1) 변수

다트 문법 정리 (1) 변수 본 글은 내가 보려고 정리한 글이다. 다트를 처음 배우는데, 플러터 개발할 때마다 다트 문법 찾아보기 힘들어서 여기에 한 번에 정리하려 한다. 다트를 가장 쉽게 설명하는 튜토리얼, 그리고 이펙티브 다트 문서까지 제공하는 곳이 바로 다트 공식 문서이다. 이 중 Dart Tour의 내용을 요약하는 중이다. 그 첫 번째가 다트의 변수 관련 문법이다. 다트는 타입 언어이며, 변수마다 타입을 지정해줘야 한다. 또한 기본적으로 null safety가 적용되어 있어서, null을 사용하려면 타입 키워드 뒤에 ?을 붙여주어야 한다. 또한 C++의 템플릿과 마찬가지로 다트에선 제네릭을 제공한다. 또한 다트에서는 C++의 auto와 마찬가지로 타입 추론을 지원한다. 그게 바로 var인데, va..

  • format_list_bulleted Flutter, Dart/Dart
  • · 2023. 2. 9.
  • textsms
[모던 C++] std::span, 왜 쓰는 걸까?

[모던 C++] std::span, 왜 쓰는 걸까?

std::span std::span 이란 C++의 데이터 컨테이너를 메모리 상의 저장 방식의 차이로 나눠보자면, 크게 연속적인 컨테이너(Sequential Type)과 비연속적인 컨테이너(Non sequential Type)로 나눌 수 있습니다. 연속적인 컨테이너는 C-스타일 배열, std::array, std::vector, std::string 등이 그 예시입니다. 반면 비연속적인 컨테이너로는 std::list, std::map, std::unordered_map, std::set, std::unordered_set, std::stack 등이 있습니다. 이러한 컨테이너는 주로 내부적으로 포인터를 통해 연결되어 있으며, 그렇기 때문에 메모리 구조상에서 서로 떨어져 있습니다. std::span 연속적인 ..

  • format_list_bulleted C++
  • · 2023. 2. 6.
  • textsms

C++에서 환경의 쓰레드 개수 구하기

C++에서 쓰레드 개수 구하기 C++11 이후 C++11에서 지원하는 라이브러리를 이용한다면 쉽게 쓰레드 개수를 구할 수 있다. thread 라이브러리의 std::thread::hardware_concurrency 메소드를 이용하자. hardware_concurrency()는 현재 시스템의 쓰레드 개수를 반환한다. 만약 쓰레드 개수를 알 수 없다면, 0을 반환한다. std::thread::hardware_concurrency 는 이식 가능한 (포터블)한 코드로써 리눅스, 맥os, 윈도우에서 모두 사용 가능하다. static unsigned int hardware_concurrency() noexcept; 사용 예시 #include #include int main() { const auto n = std:..

  • format_list_bulleted C++
  • · 2023. 1. 31.
  • textsms
논문 읽는 법

논문 읽는 법

개요 출처는 아는 학교 선배로부터이다. 내게 이 정보를 알려준 분의 깃허브를 링크하겠다. 상황에 따라 다르겠지만, 우리는 살면서 적어도 하나 이상의 논문을 읽게 될 확률이 높다. 특히 일하고자 하는 분야를 막론하고, 그 분야의 끝을 탐구하기 위해선 논문을 반드시 읽어야 할 것이다. 또한 논문은 그 끝을 탐구하지 않더라도, 해당 분야의 전체를 개괄적으로 보기 위한 목적에도 훌륭한 도구이다. 무엇이 됐든 논문은 읽을 수 있으면 편하다. 그런데 논문이라고 해서 막연히 어렵지 않은가? 논문이라고 해서 그냥 지루하지 않은가? 나도 논문이라고 하면 막연히 어렵고 지루한 것이라는 인식을 갖고 있었다. 그러다가 얼마 전 한 선배로부터 어떻게 논문을 읽어야 하는 지에 대해서 알게 됐는데, 그 내용이 매우 유익해서 이를 ..

  • format_list_bulleted Computer Science
  • · 2023. 1. 29.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (76)
    • C++ (19)
    • Flutter, Dart (13)
      • Flutter (11)
      • Dart (2)
    • Database (8)
    • Web (5)
    • 회고록 (6)
    • 개발일지 (6)
    • Review (7)
      • Books (2)
      • Conference & Seminar (4)
      • IT Products (1)
    • Notion (2)
    • Algorithms (3)
    • Computer Science (6)
최근 글
인기 글
최근 댓글
태그
  • #관계형 데이터 베이스 모델링
  • #Flutter 페이지네이션 구현
  • #C++
  • #GDSC
  • #Flutter
  • #DevTalk 후기
  • #모던 C++
  • #모던C++
  • #Cursor-based Pagination
  • #MySQL
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바