반응형


int 형 숫자를 문자열로 변환하기

 

int 형을 char *로 변환하기 - sprintf 사용 방식

 

C/C++에는 sprintf라는 함수가 있다.

printf와의 차이점은 printf의 경우 기본 출력인 모니터로 문자열이 출력된다는 것이고, sprintf는 지정해준 변수로 출력이 되어 입력 문자열이 저장된다는 차이점이 있다.

 

함수의 원형은 다음과 같다.

 

#include <stdio.h>

int sprintf (char *buffer, const char *format, ...)
int snprintf(char *buffer, int buf_size, const char *format, ...)

// 헤더 파일: stdio.h
// 파라미터: 버퍼 변수, 입력 포멧, 가변 파라미터
// 리턴값: 문자열의 길이 
// snprintf: sprintf의 버퍼 사이즈 초과 오류를 해결하기 위해 나온 함수

 

즉 int형을 char *로 바꾸기 위해서는 아래와 같은 코드를 사용할 수 있다.

 

int num = 500;
char buffer[10];
sprintf(buffer,"%d",num);

 

int형을 char*로 변환하기 - itoa 사용 방식

 

itoa 함수는 atoi함수와 반대로 Interger TO Alphabet을 의미한다. 

함수의 원형은 다음과 같다.

 

#include <stdlib.h>

char *itoa(int value, char *str, int radix)


// 헤더 파일: stdlib.h
// 파라미터: 바꾸고자하는 int 값, 저장될 문자열, 진수결정(2진수,10진수)
// 리턴값: 문자열 str의 포인터

 

itoa를 활용하여 int형을 char*로 변환하기 위해서는 아래와 같은 코드를 사용할 수 있다.

 

char buffer[10] = {0,};
int num = 100;
itoa(num,buffer,10);

 

다만 itoa함수는 비표준함수이기 때문에,C99/C11에서 정의되어있지 않고 MS 컴파일러를 통해서만 사용이 가능하다.

그러다보니, 리눅스나 맥 유저에게는 동작하지 않을 수 있기 때문에 itoa 방식보다는 sprintf를 사용하는것이 더 적절하다고 볼 수 있다.

 

int형을 string으로 변환하기 - to_string 사용

 

char형 배열이 아니더라도 C++에서 제공하는 string으로도 변환이 가능하다.

to_string 함수의 원형은 다음과 같다.

 

#include <string>

string to_string(int num)
string to_string(long num)
string to_string(long long num)
...

// 헤더 파일: string
// 파라미터: 바꾸고자하는 숫자
// 리턴값: 변경된 string

 

to_string으로 int형을 string으로 변환하기 위해서는 아래와 같이 코드를 작성하면 된다.

 

int num = 100;
string str;
str = to_string(num);

 

만약 이렇게 얻은 string을 char * 로 변환하려고 할 경우 c_str()를 사용하면 된다.

 

 

string str = "Hello";
char* arr = str.c_str();
반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,
반응형


Char 형 int 형으로 변환하기

 

Char 형

 

  • C언어에서 Char형은 Character의 줄임말로 기본적으로 문자를 저장할 때 사용되는 자료형이다.
  • 해당하는 문자의 ASCII 코드 값이 정수로 저장되어있다.

 

ASCII 코드

 

 

  • 위의 표는 아스키 코드 테이블로, 48번부터 숫자 0~9를 할당하고 있다는 것을 알 수 있다.
  • 위에서 말했듯이 Char 변수형은 이러한 아스키 코드값을 정수 형태로 저장하므로, 사칙연산이 가능하다.

 

Char 형 숫자를 int형으로 변환하는법

 

  • 숫자의 아스키 값은 48번부터 0~9를 할당하고 있으므로, char형 '1'은 정수값 49를 가진다. 
  • 따라서 0의 아스키 값인 48을 char형의 값에서 빼주면 순수한 숫자를 얻어낼 수 있다.

 

char c = '1';
int n = c - 48;
// n = 1

 

  • 위와 같은 코드는 정상적으로 작동은 하지만, 가독성면에서는 좋지 않을 수 있다. 왜냐하면 다른 개발자들이 봤을 때, 48이라는 숫자가 어디서 나온건지 이해가 가지 않을 수 있기 때문이다.
  • 아래와 같이 작성하면 보다 직관성있는 코드를 작성할 수 있다.

 

char c = '1';
int n = c - '0';
// n = 1

 

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,
반응형


[Review/서평] 이젠 나도! 자바

 

성안당에서 진행하는 베타리더 프로그램을 통해 이젠 나도! 자바 책을 받게 되었다.

표지 디자인은 굉장히 심플하고, 표지부터 복잡하고 어려워보이는 타 Java 책에 비해서 가볍게 접근할 수 있을 것 같은 느낌을 주는 디자인이다.

 

 

본 책에서 가장 차별적이고 흥미로웠던 부분은 바로 이 부분이었는데,

필자는 정보처리기사나 토익, 토플등의 수험서를 제외하고는 이러한 학습 계획표가 수록된 책을 본적이 없었다.

하지만 본 책에서는 자바 20일 계획표를 제시함으로서, 처음 자바를 접하는 사람들에게 어떤 템포와 진도로 공부하는 것이 적절한지에 대해서 친절히 소개하고 있다. 

아마 방학기간등에 자바를 독학하고자 하는 사람들에게는 굉장히 유용한 부분일 것 같다.

 

 

챕터는 16개로 구성되어 있으며, 자바 개발 환경같은 아주 기초적인 내용부터 시작하며 변수,자료형, 주석 개념에 대한 설명과 연산자, 조건문 반복문 등을 다루는 개발 기초 내용 또한 포함되어있다.

 

 

사실 개발을 처음 접하는 사람들에게는 변수, 자료형, 주석 등의 용어 자체가 생소하여 개발 독학 서적을 보더라도 어려울 수가 있는데, 이 책같은 경우에는 코딩 자체를 처음 접하는 사람이라도 독학이 가능하게끔 내용을 구성한 것 같다.

 

 

또한, 자바와 객체지향언어의 특징인 클래스와 객체, 상속, 추상 클래스, 제네릭, 스레드를 설명하며, 자바 자체에 대한 설명을 충실히 진행하고 있다. 뿐만 아니라, 유용한 패키지와 클래스들을 소개하고 자바 8에서 추가된 람다 표현식등을 소개하며 코드의 가독성까지도 높일 수 있도록 다양한 코딩 방법을 소개한다.

 

또한 모든 개념은 간략한 코드와 함께 설명이 되며, 코드의 아주 세세한 부분까지도 언급을 하며 설명을 진행하기 때문에, 소스 코드 내에서 이해가 안되는 경우나 개념이 모호할 경우가 없을 것이라고 생각된다.

 

 

 

총평


장점

 

  • 개발을 전혀 할 줄 모르는 직장인/학생등이 쉽게 Java를 배울 수 있다.
  • 273개의 예제 소스코드가 포함되어있어, 개념을 코드를 통해 머리에 확실히 인식시킬 수 있다.
  • 디자인이 심플하여 개발 서적 특유의 딱딱함을 벗어났다.
  • 개발 환경 구성에 대한 설명이 친절하여 Java 설치등을 쉽게 따라할 수 있도록 하였다.
  • 20일간의 계획표를 제공하여 적절한 진도 속도와 빠르고 효율적인 학습이 가능하도록 하였다.

 

아쉬운 점 

 

  • 본 책은 자바를 제대로 공부하기보다는 입문서에 가까운 느낌이기 때문에 Java를 배워 취업을 하려하거나, 프로젝트를 진행하려고 하는 경우 이 책에서 다루는 내용만으로는 다소 버거울 수 있다.
  • 전공자들이 보기에는 다소 난이도가 쉽고, 개념을 정리하는 용도 정도로는 쓸 수 있지만 Java를 완벽히 이해하기엔 깊이가 다소 얕다.
  • 예제코드가 많긴 하지만, 학생들이 스스로 해볼 수 있게끔 Quiz나 Assignment등의 명세가 책 중간중간에 있었으면 더 좋았을 것 같다. 코드를 단순히 따라해보기만하고 동작하는것만 확인할경우, 제대로 된 공부가 안될 수 있기 때문에 스스로 응용하여 프로그램을 작성하는 심화 내용이 필요하다고 생각한다.
  • 개발환경을 윈도우로만 설명하여, 리눅스 OS나 애플의 OS X를 사용하는 비전공자 학생의 경우 설치를 어려워 할 수 있을 것 같다.

이런 사람에게 추천!

 

  • 코딩을 배워본 적이 없지만 Java를 배워보고 싶은 비전공자
  • 방학 등의 짧은 기간 안에 빡세게 Java언어를 익히고 싶은 사람
  • 길고 긴 줄글보다는 간단한 그림과 잘 정리된 소스코드를 보며 공부하는것이 더 좋은 사람
  • Java를 오래전에 배웠지만, 내용이 기억이 안나 간단히 Remind해보고 싶은 전공자

 

참조


이젠 나도! 자바 - 이지선 지음, 성안당 출판사, 2019

 

좋은 책 지원해주신 성안당 출판사에게 감사인사를 드립니다!

 

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,
반응형


JVM, JRE, JDK의 차이

 

많은 사람들이 자주 궁금해하는 주제인, 

JVM, JRE, JDK의 차이점에 대해서 알아보자

 

JVM

 

  • Java Virtual Machine의 약어
  • 자바가상머신이라고도 불린다.
  • 자바 프로그램을 컴파일 해서 나온 결과인 바이트코드를 실행시켜주는 가상 머신이다.

 

JVM - WORA(Write Once Run Anywhere)

 

 

 

  • 어플리케이션을 실행시켜주는 가상머신을 사용함으로써, 윈도우와 리눅스/맥 등 다양한 환경에서 언제나 동일하게 실행되도록 할 수 있다는 장점을 가지고 있다.
  • 각 운영체제별 JVM은 자바측에서 개발하여 배포하므로, 프로그래머는 운영체제에 관계없이 프로그램을 개발할 수 있어, 한번 컴파일 됐으면 운영체제에 따라 다시 컴파일할 필요가 없는 WORA(Write Once Run Anywhere)를 만족한다.

 

JRE

 

  • Java Runtime Environment의 약자로, 자바 실행 환경을 의미한다.
  • JVM을 동작하는데에 필요한 각종 자바 라이브러리를 담고 있다.

 

JDK

 

  • Java Development Kit의 약자로, 자바 개발 키트를 의미한다.
  • JRE와 javac 등의 컴파일러, 디버거등을 포함하는 프로그램이다.
  • 오라클사에서 제공하는 오라클 JDK와 오픈소스로 개발된 OpenJDK가 있으나, 일반적으로 사용되는것은 오라클 JDK이다.

 

포함관계 도식도

 

 

JVM과 JRE, JDK의 포함관계를 나타낸 가장 간단하고 이해가 쉬운 그림이다.

JVM를 사용하기 위한 라이브러리가 JRE이며, 일반적인 자바 프로그램을 실행하기 위해 사용되는것이 JRE이다.

JDK는 JRE를 포함하고 있으며, 컴파일러와 디버거등이 포함된 버전이다. 개발자라면 JDK를 설치해야한다.

 

 

참조


https://www.javacodemonk.com/

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,
반응형


Github와 Circleci 연동

 

CI

  • Continuous Integration의 약자로, 지속적 통합이라는 의미를 가지고 있다. 
  • 대형 프로젝트의 경우, 다수의 개발자들이 지속적으로 개발을 진행하면서 점점 저장소가 기존 개발 베이스에서 크게 달라지게 되는데,
    이로 인해 개발된 코드를 통합(Integration)하는데에 작업하는 시간보다 통합하는 시간이 오히려 더 오래 걸릴 수 있고, 심지어는 아예 제로베이스에서 처음부터 개발을 진행하는 것이 더 빠른 경우도 있다고 한다.
  • 이러한 문제점을 해결하기 위해 나온 개념이 커밋 단위로 통합과정과 테스트를 거치는 CI개념이다.

CD

  • Continuous Deploy의 약자로, 지속적 배포의 의미를 가지고 있다.
  • 소스코드를 배포하기 위해 해야하는 과정을 자동화하여 실행하는 것으로, CircleCI의 경우 깃허브의 커밋당 한번씩 배포를 진행한다.
  • 배포 과정은 사용자가 정의할 수 있으며, React에서는 빌드한 결과물을 웹서버에서 돌린다거나, npm install을 실행시킨다거나, make 명령어를 통해 테스트를 진행하는등의 과정을 진행한다.

Circleci

  • 무료 CI/CD 툴, Bitbucket이나 Github와의 연동이 쉽고 간단하여 많이 사용된다.
  • 빌드는 한번에 1개만 가능하다는 한계점이 있다.
  • 개인프로젝트 등에서는 CI(Continuous Integration)보다는 CD(Continuous Deploy)의 목적으로 많이 사용된다.
  • Docker기반으로 OS를 실행시켜 빌드를 실행할 수 있도록 컨테이너를 지원해준다.

1. 회원 가입

 

 

공식웹페이지 : https://circleci.com에 접속 한 뒤, SignUp을 클릭한다.

 

 

그 후, 연동하고자 하는 버전관리 툴에 따라서 Github나 Bitbucket 버튼을 클릭한다.

 

 

연동이 완료되었다면, 자신의 깃허브 레포지토리가 나타난다. 

여기서 Set Up Project 버튼을 클릭하면 연동이 완료된다.

 

2. 빌드 workflow 정의

 

 

아마 연동후에 바로 빌드를 하게 되면 연동이 완료는 되었지만, 아마 Build Error라는 오류 메세지를 보게 될 것이다.

그 이유는 아직 빌드를 어떻게 할건지를 결정하는 Job workflow를 정의하지 않았기 때문이다.

Circleci에서는 일종의 단위 작업인 job과, job들을 호출하는 workflow를 정의한 config.yml 파일을 필요로 하므로 이 파일을 생성해주어야 한다. 해당 리포지토리의 루트 디렉토리로 이동한 뒤 .circleci 폴더를 만들고, 그 안에 config.yml 파일을 만든다.

 

최근 필자가 진행하고 있는 블록체인 프로젝트의 config.yml 파일 예시를 통해 config.yml 작성법을 소개한다.

 

# Golang CircleCI 2.0 configuration file
version: 2
# 빌드 작업을 정의한 jobs 스크립트 형식으로 작성
jobs:
  # job의 이름을 정의, 굳이 build로 할 필요는 없지만 일반적으로 build를 사용한다.
  build:
  	# 빌드를 실행할 도커 이미지를 설정한다.
    # circleci에서 제공하는 이미지를 사용해야 한다.
    # https://circleci.com/docs/2.0/circleci-images/
    docker:
      # Ethereum의 프로그래밍 언어인 Go 컴파일을 해야하므로 go 이미지 세팅
      - image: circleci/golang:1.9
	
    # Go의 workspace를 설정해준다.
    working_directory: /go/src/github.com/Votereum/votereum-core
    
    steps:
    # Deploy의 과정을 한단계씩 정의한다.
      # 소스를 checkout 하는 과정
      - checkout
      # 코드 전체를 컴파일 하는 과정
      - run: make all
      # 테스트 실행
      - run: make test
      # 테스트 성공시 good 출력
      - run: echo "good"

workflows:
  version: 2
  build:
    jobs:
      # 위에서 작성한 job의 이름을 기입하면 된다.
      - build

 

3. 배포 및 테스트

 

프로젝트 소스에 맞는 config.yml을 작성하였다면, Github에 config.yml을 Push한다.

 

$ git add .circleci
$ git commit -m "Activate Circleci config"
$ git push

 

그러면 Github와 연동되어있는 Circleci에 커밋이 Trigger가 되어 자동으로 빌드 및 배포가 진행된다.

 

 

배포가 성공하면 아까 정의했던 echo "good" 명령에 의해 good이 출력되고 종료된다.

만약 오류가 발생한다면 에러 로그를 확인할 수 있기 때문에, 번거롭게 깃허브에 올리고 로컬에서 테스트할 필요가 없어진다.

 

 

참조


  • https://circleci.com
  • https://circleci.com/docs/2.0/writing-yaml/#section=configuration
반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,
반응형

개발자들이라면 익숙할 Git


git에서 .gitignore 활용하기

 

.gitignore?

 

  • 현재 디렉터리에서 깃 원격 저장소에 저장하고 싶지 않은 파일, 예를 들어 용량이 큰 Build 파일이나 Data파일, Backup 파일등을 무시(ignore)시킬 수 있는 일종의 설정 파일이다.

.gitignore 파일 생성하기

 

  • vim이나 메모장이여도 상관없다. 아무 에디터를 이용해서 .gitignore 파일을 만든다.
  • 단, .gitignore 파일은 Git 디렉터리의 최상위에 존재해야한다.
  • 예시

 

  • 작성하는 방법은 아래와 같다.

# : 주석처리

# 모든 .a files 제외
*.a

# 모든 .a files는 제외하지만, important.a 파일은 깃에서 추격하도록 설정
!important.a

# 현재 디렉토리의 build 파일 제외
/build

# 디렉토리의 모든 파일 제외
dir/


.gitignore 파일 적용하기

  • 해당 Git 디렉토리에서 .gitignore 파일을 푸시하면 적용이 완료된다.

git add .gitignore
git commit -m "[ADD] Git ignore files"
git push

 

  • 만약 오픈소스 프로젝트를 Fork했거나, gitignore파일을 소스코드를 푸쉬한 뒤에 생성할경우 적용이 안되는 경우가 있다.
  • 이럴 경우에는 다음과 같은 명령어를 활용하면 해결된다.

git rm -r --cached .
git add .
git commit -m "[MOD]Activate .gitignore file"

 

참조


  • https://www.gitignore.io
반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,