전체 글 (356)

💻 Programming

[Node.js] npm 업데이트 하기

최근에 React.js 개발을 공부하기위해 node.js부터 업데이트 하기로 했어요.

우선 커맨드창에서 아래와 같이 입력해보니

$ npm --help

명령어 사용법이 틀렸다고 하면서 사용법을 출력해주더니

마지막에는 친절하게도 npm 현재 버전이 낮으니 최신버전으로 업데이트하라는 안내 문구가 나오네요.

안쓴지 오래되서 버전이 5.6.0 이네요 ㅠㅠ

 

실행명령어를 가르쳐줬으니 실행해볼게요~

$ npm i -g npm

근데 잘 실행하다가 아래처럼 에러가 나네요. 아흑 ㅜㅜ

npm 업데이트 오류

에러메시지를 보니 디렉토리에 권한이 없었네요. 

아래 명령어로 다시 시도해볼게요.

$ sudo npm i -g npm

npm 업데이트 완료

슉~슉~ 뭐가 나오더니 11초만에 업데이트가 끝났어요.

 

#npm버전확인명령어 로 업데이트가 잘 되었는지 확인해볼게요.

$ npm -v
6.9.2

 6.9.2로 업데이트가 된 것을 확인할 수 있네요.

 

업데이트 성공~

JSP와 Javascript의 차이가 뭘까요? 라는 질문을 받은 적이 있습니다.

초보자 분들이 충분히 할만한 질문이죠. JSP도 자바스크립트도 제대로 사용해보기 전에는 두 가지가 뭐가 다른지 잘 모를 수 있습니다.

 

초보자 분들이 이해할 정도로 간략하고 쉽게 요점만 설명드리겠습니다.

 

Javascript웹브라우저(사용자의 컴퓨터)에서 실행이되는 스크립트 언어입니다.

자바스크립트 파일은 .js 확장자를 가지며, 자바스크립트 문법에 따라 작성을 해야합니다.

프로그래밍 언어 중 하나라고 생각하시면 됩니다.

반면, JSP는 Java Server Page의 약자로 .jsp 확장자를 가지며, 언어의 종류를 나타내는 것은 아닙니다.

.jsp 파일에는 html태그와 javascript 함수도 사용이 가능하며, 추가로 아래와 같이 <% java code %> 형태로 자바문법을 사용할 수 있습니다.

 

<html>

<head><title>Hello World</title></head>

<body> Hello World!<br/>

<% out.println("Your IP address is " + request.getRemoteAddr()); %>  <!-- 여기가 JSP 문법 -->

</body>

</html>

 

JSP에 작성된 내용은 서버에서 실행되고, 그 결과가 웹브라우저(사용자 컴퓨터)로 전송됩니다.

 

이제 JSP와 자바스크립트의 차이점이 뭔지 아시겠죠?

 

가시기 전에 공감 꾸~~~~욱 눌러주고 가세요 ^-^

💻 Programming/Java

[Java] 자바 8진수를 10진수로 변환하기

자바에서 8진수 숫자를 사용자(키보드)로부터 입력받아서 10진수로 변환하여 출력하는 예제입니다.


import java.util.Scanner;

public class OctalToDex
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);
    String b=sc.nextLine();
    int a=Integer.valueOf(b, 8);
    sc.close();
    System.out.println(a);
   }
} 


Java에서는 Integer클래스가 존재하여 2진수, 8진수, 16진수의 숫자를 10진수로 쉽게 변환이 가능하며, 그 반대로 10진수를 2진수,8진수,16진수로 변환하는 것을 쉽게할 수 있습니다.

메서드는 아래와 같습니다.
 10진수 -> 2진수 변환 : Integer.toBinaryString(int);
 10진수 -> 8진수 변환 : Integer.toOctalString(int);
10진수 -> 16진수 변환 : Integer.toHexString(int);
 10진수 -> 2진수 변환 : Integer.toBinaryString(int); 
 10진수 -> 8진수 변환 : Integer.toOctalString(int);
 10진수 -> 16진수 변환 : Integer.toHexString(int);​


위 메서드는 10진수 숫자(int)를 2진수/8진수/16진수 스트링으로 반환합니다.

 2진수 -> 10진수 변환 : Integer.valueOf(string, 2);
 8진수 -> 10진수 변환 : Integer.valueOf(string, 8);
16진수 -> 10진수 변환 : Integer.valueOf(string, 10);
2진수 -> 10진수 변환 : Integer.valueOf(string, 2);
8진수 -> 10진수 변환 : Integer.valueOf(string, 8);
16진수 -> 10진수 변환 : Integer.valueOf(string, 10);​


위 메서드는 2진수/8진수/16진수를 나타내는 숫자스트링을 10진수 int로 반환해줍니다.

자바 웹앱을 개발할 때 가장 많이 사용하는 툴이 이클립스와 스프링부트입니다.

이번 시간에는 이클립스에서 스프링 프레임웍을 사용할 수 있도록 스프링을 설치해보도록 하겠습니다.

우선, 이클립스가 설치되어있다고 가정합니다.

최신 이클립스는 우측 링크에서 받으실 수 있습니다. -> https://www.eclipse.org/downloads/

 

이클립스 상단 메뉴에서 Help > Eclipse Marketplace... 을 선택합니다.

그리고 검색창에서 "sts"를 검색합니다.

위 화면처럼 나오면 "Spring Tools 4 - for Spring Boot (aka Spring Tool Suite 4)"를 install 버튼을 눌러 설치합니다.

Spring Tools 4 플러그인을 설치할 때 어떤 것들을 설치할 수 있는지 목록을 조회해 오고 있습니다.

상세 목록을 위 사진처럼 보여주는데, 기본적으로 모두 체크가 되어있습니다.

그냥 "confirm" 눌러주세요.

소프트웨어 라이센스에 동의하는지 묻는 질문에는 "I accept the terms...."를 선택하고 "Finish"버튼을 눌러주시면 됩니다.

 

STS 4 설치 진행 상태

우측 하단의 "Progress" 버튼을 클릭하면 Progress 창으로 focus가 맞춰지면서 설치 상태를 보여줍니다.

인터넷 환경에 따라 시간이 좀 걸릴 수도 있습니다.

 

 

세로로 나열된 5개의 네스프레소 배열

이번에는 자바로 1차원 배열을 만들어 보도록 하겠습니다.
자바로 배열을 만드는 방법은 여러 가지가 있습니다.
우선 용어부터 정리하고 가겠습니다.
제가 만든다라고 얘기한 것은 일반적으로 얘기하려고 한 것인데 이는 두 가지 의미를 포함하고 있습니다.
바로 "선언"과 "초기화"입니다.
여기서 "선언"이라는 것은 변수의 이름을 지어주는 것을 얘기하며,
"초기화"라는 것은 그 변수에 값을 할당하는 것을 의미합니다.
이 용어들을 머릿속에 넣고 출발하도록 하겠습니다.

배열을 선언하는 방법

자바에서 배열을 선언하는 방법은 아래와 같이 3가지가 있습니다.

public static void main(String[] args) {

        // 배열을 선언하는 방법
        int[] intArr1;
        int []intArr2;
        int intArr3[];
}

위에서는 int 타입의 배열을 3가지 방법으로 선언해 보았습니다.
int타입 대신 long, double, Integer, Long, Double, String 등 다른 타입을 사용할 수도 있습니다.
이렇게 선언을 해 놓아도 공간(메모리)을 차지하지는 않습니다.
배열은 초기화를 하면서 사이즈를 정해줘야 공간(메모리)을 차지하게 됩니다.
그럼 배열 초기화는 어떻게 할까요?

배열을 초기화하는 방법

배열을 초기화할 때는 아래와 같이 합니다.

public static void main(String[] args) {

        // 배열을 선언하는 방법
        int[] intArr1;

        // 배열을 초기화하는 방법
        intArr1 = new int[3];
}

위 예제에서는 intArr1이라는 이름을 가진 배열을 사이즈가 3인 배열로 초기화를 하였습니다.
이렇게 초기화를 하면 int 타입의 경우 기본값 0으로 세팅이 됩니다.

배열의 선언과 초기화를 동시에 하는 방법

자바에서는 아래와 같이 배열의 선언과 초기화를 동시에 할 수도 있습니다.

public static void main(String[] args) {

        int[] intArr1 = new int[10];    // size 10, index range from 0 to 9
        int []intArr2 = new int[20];    // size 20, index range from 0 to 19
        int intArr3[] = new int[20];    // size 20, index range from 0 to 19
}

위에서 설명드린 선언문과 초기화문을 한 줄에 붙여 쓰면 동시에 선언과 초기화가 가능합니다.

자, 그런데 이렇게 하면 int 타입의 배열에는 모두 0으로 값이 세팅이 됩니다.

전, 제가 원하는 값으로 세팅을 하고 싶은데 그렇게도 할 수 있나요?

물론이죠~ 그렇게도 할 수 있습니다.
아래와 같이 하시면 됩니다.

public static void main(String[] args) {

        int[] intArr4 = {1, 2, 3, 4};   // size 4, index range from 0 to 3
        int[] intArr5 = {0, 0, 0, 0, 0, 0, 0};  // size 7, index range from 0 to 6
}

intArr4에는 [1, 2, 3, 4]가 저장됩니다.
intArr5에는 new int[7] 로 초기화한 것과 같이 0으로 값이 들어갑니다.

배열 출력하기

그럼 이렇게 배열에 들어간 값을 출력해보고 싶을 땐 어떻게 할까요?
자바에서 콘솔창에 출력을 할 때에는 System.out.println() 메서드를 사용하는 것은 다들 알고 계시죠?
Hello World를 해보셨다면 다들 알고 계실겁니다.
그럼 이 메서드를 이용해서 변수이름을 넣어주면 될까요?
아닙니다. 배열이 담긴 변수명만 넣어주면 쓰레기값이 출력이 됩니다.
이런 경우에는 Arrays.toString() 메서드를 이용하면 됩니다.

public static void main(String[] args) {

        int[] intArr1 = new int[10];    // size 10, index range from 0 to 9
        int []intArr2 = new int[20];    // size 20, index range from 0 to 19
        int intArr3[] = new int[20];    // size 20, index range from 0 to 19
        int[] intArr4 = {1, 2, 3, 4};   // size 4, index range from 0 to 3
        int[] intArr5 = {0, 0, 0, 0, 0, 0, 0};  // size 7, index range from 0 to 6

        System.out.println(Arrays.toString(intArr1));
        System.out.println(Arrays.toString(intArr2));
        System.out.println(Arrays.toString(intArr3));
        System.out.println(Arrays.toString(intArr4));
        System.out.println(Arrays.toString(intArr5));
}

출력 결과

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 2, 3, 4]
[0, 0, 0, 0, 0, 0, 0]

이상으로 배열의 선언과 초기화에 대한 포스팅을 마치겠습니다.
궁금한 점이 있으시면 댓글 달아주시면 답변드리겠습니다.

2차원 배열에 대한 내용은 [Java] 자바 2차원 배열 생성(선언 및 초기화)에서 더 다루고 있으니 참고하시구요~

도움이 되셨다면 공감 꾸~~~~욱 눌러주고 가세요 ^-^

감사합니다.

지난 시간에는 프로그래밍이란 무엇인지에 대해 간략하게 설명을 해보았습니다.

너무 지루한 이론적인 이야기 보다는 개발자로 개발을 하면서 느낌점을 바탕으로 정의를 내렸었는데

이해하는데 도움이 되었으리라 생각합니다. 

 

이번 시간에는 무작정 따라하기 시간을 가져보겠습니다.

우선 여러분들 컴퓨터에 아래와 같은 것들을 준비해야 합니다.

 

1. JDK (Java Development Kit)

2. 이클립스 IDE (Integrated Development Environment)

 

설치하기 전에 이친구들이 뭔지부터 알고 설치를 해야겠죠? 해킹프로그램이면 큰 일 날 테니까요.

우선, JDK라는 친구는 "자바 개발 툴" 줄여서 "자개툴"이라는 녀석이죠. 자바 언어 사전이라고 생각하시면 됩니다.

이 녀석이 있어야 여러분들이 작성한 자바소스코드를 컴퓨터가 이해하는 언어로 변경이 가능하고,

자바 프로그램을 실행시킬 수가 있습니다. 태생부터 현재까지 무료입니다. (Java 8의 특정 버전 부터는 유료라이센스로 전환되었습니다)

 

다음으로 이클립스라는 친구는 여러분들이 개발을 좀 더 쉽게 할 수 있도록 하기위해

오픈소스로 공개된 무료로 사용가능"통합 개발 환경"을 제공하는 도구입니다.

개발자가 소설작가라면 이클립스 IDE는 워드프로세서와 같은 것입니다.

 

 

자, 그럼 설치를 하러 가볼까요??

 

1. JDK 8 (Java SE Development Kit 8) 설치 -> 다운로드 링크

-> 혹시 다운로드 링크 들어갔는데 cookie 관련 아래와 같은 창이 뜬다면 그냥 I agree 하지마시고 아래처럼 따라해주세요.

1. 주황색 버튼 클릭
2. Required Cookies 만 선택되도록 한뒤 Submit Preferences  선택
3. Close 버튼 선택
4. Accept License Agreement 선택 후 본인 운영체제에 맞는 버전을 다운로드

2. 이클립스(개발툴, IDE) 설치 -> 다운로드 링크

 

1. Download 선택

 

3. 이제 다운로드 받은 JDK 설치 파일을 "더블클릭"해서 설치해주세요.

-> 설치 시 세팅(설치 경로 변경 등)은 하지말고 기본값 그대로 Next, Next 하시면 됩니다.

 

설치가 완료되면 윈도우에서는 cmd창, Mac에서는 터미널창에서 아래와 같이 자바의 버전을 확인하는 명령어를 입력해보세요.

java -version

결과는 아래처럼 나와야 합니다. 물론 버전을 나타내는 숫자는 다를 수 있습니다.

자바 버전 확인

여기서 확인할 것은 세 번 째 줄에 HotSpot이라고 뜨는지가 중요합니다.

(자바는 실행환경만 제공하는 JRE와 개발환경까지 제공하는 JDK가 있습니다.

저희는 JDK를 설치한 것이고 JDK의 버전에는 저렇게 HotSpot Server VM이라는 게 출력됩니다.)

 

여기까지 잘 따라오셨다면 이제 이클립스를 설치해주세요.

이클립스 설치 화면

우리는 이클립스 인스톨러에서 위에서 두 번째 꺼를 선택해서 설치할겁니다. 

설치 위치는 기본적으로 세팅이 되어있습니다. 그냥 INSTALL 버튼을 꾹 눌러주시면 됩니다.

만약 Java 경로가 나오지 않는다면 Java 설치가 제대로 안되었다는 의미이므로 확인을 해보셔야 합니다.

 

설치가 진행되고 있습니다. 

이런 저런 파일들을 인터넷에서 다운로드 받아가면서 설치를 합니다.

 

중간에 이런 라이센스 동의 팝업창이 뜨면 "Remember accepted licenses"에 체크해주고 "Accept"버튼을 눌러줍니다.

여기도 마찬가지입니다. "Remember choice"에 체크해주시고, "Accept" 고고싱~

이 화면은 윈도우 운영체제에서는 안나올 수 있으니, "이런 화면은 왜 안나오지?"하실 필요가 없습니다.

윈도우에서는 그냥 next, next 하시면 될겁니다.

여기서도 체크해주고 "Accept selected" 고고싱~

설치가 완료되면 Launch 버튼이 활성화됩니다.

이클립스 설치 완료 화면

이제 Launch 버튼을 눌러 실행을 시켜보도록 하겠습니다.

workspace 경로 설정창

실행하면 위와 같은 창이 뜨는데 무시하고 그냥 "Launch" 버튼을 클릭합니다. (경로는 다를 수 있습니다.)

welcome 창

welcome 창이 떠있습니다. 이런저런 메뉴가 보이고 바로 프로젝트를 만들어 볼 수 있는 메뉴도 보입니다.

이제 간단한 프로젝트를 하나 만들어 보겠습니다.

바로 "안녕 프로젝트"입니다.

welcome 창의 우측에서 "Tutorials"를 선택합니다.

"Create a Hello World application"을 선택합니다.

뭔가 바둑판처럼 생긴 복잡해보이는 화면이 나왔는데 신경끄고 오른쪽에 보이는 "웰컴창"만 보시면 됩니다.

따라하기처럼 되어있는데 버튼만 누르면 알아서 이것저것 해줍니다.

여기서 중요한 것은 순서입니다.

Hello World 애플리케이션을 만들기 위한 작업 순서를 한번 연습하고

다음에 다른 애플리케이션을 만들 때 동일한 순서로 작업을 진행하면 됩니다.

 

가운데 파란색으로 "Click to Begin"을 클릭해봅시다.

바로 아래쪽에 있는 "Open the Java perspective" 메뉴가 열리면서 이런저런 설명이 또 나옵니다.

설명은 어렵지 않으니 한번 읽어보고, "Click to perform"을 클릭합니다.

Java Perspective가 선택됨

뭔가 실행하는 듯 하더니 이클립스 창 우상단에 선택된 아이콘이 변경되었습니다.

원래 커피콩 모양이 있는 아이콘이 선택되어있었는데, 이제 J라는 글자가 있는 아이콘이 선택되어져 있네요.

그리고 웰컴창에서는 다음 단계인 "Create a Java project" 메뉴가 열렸습니다.

설명을 한번 읽어보고 또 "Click to perform" 을 클릭합니다.

자바 프로젝트 생성창

자바 프로젝트 생성창이 떴는데 여기서 "Project name"만 입력해주고 "Finish"버튼을 클릭합니다.

좌측의 "Project Explorer" 뷰에 입력만 프로젝트명이 보이는지 확인합니다.

생성된 HelloWorld 프로젝트

이제 다음 단계인 "Create your HelloWorld class" 를 진행합니다.

설명에 있는대로 따라하거나 "Click to perform"을 클릭합니다.

HelloWorld 클래스 생성창

클래스 생성창이 뜨는데 여기서는 "Name""HelloWorld" 입력 후 아래쪽에 "public static void main(String[] args)" 옆의 체크박스를 체크하고 "Finish" 합니다.

생성된 HelloWorld 클래스

HelloWorld 클래스가 생성되어 좌측의 Package Explorer 에도 파일이 생성된 것을 확인할 수 있고,

가운데 텅텅 비어있던 창에도 뭔가가 나타났습니다. 

이것이 바로 자바 문법에 기초한 소스코드입니다.

자, 이제 처음으로 소스코드를 작성해볼 차례입니다.

웰컴창의 설명대로 아래처럼 출력문을 하나 작성해 주세요.

Hello world! 출력문 작성

위 처럼 한줄을 추가하고 저장합니다.

이제 마지막으로 우리가 작성한 코드를 실행해보겠습니다.

웰컴창 마지막 단계의 설명을 따라서 실행해봅니다.

HelloWorld 실행하기
HelloWorld 실행 결과

HelloWorld에 작성한 출력문에 따라 그대로 출력되는 것을 확인할 수 있습니다.

여기까지가 HelloWorld 튜토리얼의 끝입니다.

 

우리는 하나만 더 해보죠.

System.out.println("Hello world!");

여기서 "Hello world!""안녕 프로젝트 성공" 으로 바꿔서 출력할겁니다.

아래처럼 변경해주시면 됩니다.

System.out.println("안녕 프로젝트 성공");

이제 다시 실행해보세요. 

아래처럼 결과가 잘 나오면 됩니다. 

 

여기까지 잘 따라 오셨습니다.

여러분은 이제 개발자가 되었습니다. 

 

이번 시간에는 JDK 설치와 이클립스 IDE 설치 그리고 헬로월드 애플리케이션 만들기 까지

무작정 따라해보는 시간을 가졌습니다.

이제 개발을 위한 기본적인 준비는 모두 끝났습니다.

 

다음 시간부터는 자바언어를 이용하여 간단한 애플리케이션을 직접 만들어보는 시간을 가지도록 하겠습니다.

 

 

프로그래밍 소스 코드 일부

서문

나는 이 글을 쓰는 지금 7년차 자바 백엔드 개발자이다.

나는 자바를 제대로 공부하지도 않고 개발자가 되었고, 개발자가 된지 5년이 지나서야 책을 읽어봤다.

수많은 책들이 있었고 그 중 제일 유명한 남궁성님의 책과 윤성우님의  책을 사서 훑어보았다.

책은 너무 두꺼웠고 다시금 까먹고 있던 기초지식을 확인하는 기회가 되었다.

그러다가 한 학생을 가르치게 되었는데 비전공자라 책의 내용을 이해하는데 힘들어했다.

언젠간 나도 책을 내봐야지라는 생각을 가지고 있던터라 이참에 책의 기초가 될만한 강의를 여기서 해볼까 한다.

일반인들, 개발자가 되려는 비전공자들, 그리고 어린 학생들이 읽어도 쉽게 이해할 수 있는 내용으로 강의를 하려 한다.

내 아이가 나중에 커서도 자바가 많이 사용된다면 읽어보도록 추천할 수 있을 정도의 퀄리티를 갖는 내용으로 말이다.

그래서 어떻게 쉽게 전달할 수 있을지 많은 고민을 해야할 것이기에 강의가 빨리 진행되기는 어려울 수 있으나 조금씩 꾸준히 해보려고 한다.

 

 

오늘은 그 1일차로 프로그래밍이란 무엇인지에 대해 얘기를 해보겠습니다.

 

자바란?

세상에는 많은 언어들이 있습니다. 한국어, 중국어, 영어, 일본어, 스페인어, 불어, 독어 등등 말이죠.

한국사람들은 한국어를 사용하고, 일본사람들은 일어를 사용합니다.

어떤 사람들은 3개국어 4개국어를 하기도 합니다.

일본어는 한국어와 문법이 유사해서 쉽고, 영어는 문법이 달라 배우기 어렵다고들 합니다.

언어마다 특정 표현을 할 때 좀더 공감이 가는 문장이 있습니다.

한국어로 직역 또는 의역해도 영어의 특정 문장의 느낌을 그대로 전달하기는 힘들 때가 있는 것처럼 말이죠.

 

프로그래밍 언어에도 그러한 내용이 딱 들어맞습니다.

자바는 수많은 프로그래밍 언어(세계 각국의 언어)들 중 하나입니다. 

자바 개발자(한국인)들은 자바(한국어)로 개발을 합니다.

모국어는 한국어이지만 3개국어, 4개국어를 할 줄 아는 사람들이 있듯이,

자바 개발자들도 자바만 하는것이 아니라 파이썬, 자바스크립트, C# 등의 언어를 제2외국어처럼 하기도 합니다.

자바와 문법이 유사한 언어는 자바개발자들에게는 learning curve가 낮지만, 너무 다른 언어는 적응하기가 힘들죠.

마치 한국어와 일본어, 한국어와 영어의 차이처럼 말이죠.

자바로는 구현하기 쉬운 기능이 다른 언어에서는 구현하기 힘들 수도 있습니다.

 

사람들은 언어를 이용하여 다른 사람들과 소통을 합니다.

어휘력이 좋은 사람이 있고 안좋은 사람도 있죠.

대화의 논리가 확실히 잡혀있는 사람도 있고 논리는 없고 앞뒤없는 대화를 하기도 합니다.

개발자들은 소스코드를 이용하여 소통을 합니다.

자바 언어에서 제공하는 문법을 많이 알고있는 개발자도 있고 기초적인 것만 알고있는 개발자도 있죠.

동일한 문제를 풀때에도 알고리즘이 간결하고 명확한 개발자도 있고, 그렇지 않은 개발자도 있습니다.

즉, 자바라는 언어는 개발자들이 프로그래밍을 할 때 사용하는 제2외국어와 같은 존재입니다.

 

소스코드와 소설

제 와이프는 제가 IDE(개발툴)화면에 코딩을 하는 모습을 보고, "이게 뭐야? 도대체 뭐라고 쓰는건지 하나도 모르겠네. 이런게 이해가 되?" 라고 질문을 합니다. 당연히 그런 반응이 나올 수 밖에 없습니다. 와이프 입장에서는 제가 오지의 인디언이 사용하는 언어로 글을 쓰고있는 것처럼 느껴질 테니까요. 

개발자들은 자신이 사용하는 프로그래밍 언어(제2외국어)를 이용하여 자신들만의 글을 써내려 갑니다. 같은 내용에 대해서 개발을 한다해도 개발자들 성향에 따라 1. 효율성은 조금 떨어지지만 가독성이 좋은 코드를 작성할 수도 있고, 2. 효율성은 극대화했지만 다른 개발자가 이해하기 힘든 코드를 작성할 수도 있습니다. 물론 저는 전자를 지향하고 후배들에게도 전자를 지향하도록 조언합니다.

 

시인, 소설작가, 수필가 등 글을 쓰는 분들이 단어 하나하나에 고심을 하듯 저도 코딩을 할 때 고민을 많이 합니다. 동일한 기능을 하더라도 좀 더 간결하고 명확하게 효율적인 코딩을 하려고 말이죠. 좋은 글을 작성하기위해 첨삭을 받는 것처럼, 개발자들도 코드리뷰 시간을 통해 고급개발자들의 조언을 듣습니다. 그래서 저는 프로그래밍을 이렇게 정의합니다. "프로그래밍이란 개발자들이 써내려가는 글이다"라고 말이죠. 내가 작성한 코드가 짧지만 이해하기 어려운 시가 될 수도 있고, 좀 길어도 술술 읽어내려갈 수 있는 판타지 소설이 될 수도 있습니다. 어떤 글을 작성하느냐는 순전히 개발자들의 몫이죠. 

 

 

Wrap Up

프로그래밍 언어란 개발을 위한 언어로 일어, 중국어, 영어와 같은 제2외국어의 하나다.

프로그래밍 언어에는 여러 언어들이 존재하는데 그 중 하나가 자바(java)다.

 

고급내용 보충

자바는 다른 언어들과는 다르게 JVM(Java Virtual Machine)이라는 가상머신 위에서 실행이 됩니다. 이 때문에 플랫폼(OS, 운영체제)에 의존적이지 않죠. Linux계열에서도 실행이 가능하고, Windows에서도 실행이 가능합니다. 심지어 안드로이드 애플리케이션도 자바로 개발합니다(요즘은 Kotlin이라는 언어도 많이 사용하시더군요). 또한, JVM이 직접 메모리 관리를 해주기 때문에 별도로 개발자가 메모리 관리를 하지 않아도 됩니다. C언어는 개발자가 직접 메모리에 접근을 하여 사용할 수 있기 때문에 관리도 직접 해야하죠.

자바는 웹개발에 많이 사용됩니다. Python(파이썬)은 빅데이터 영역에서 많이 사용되고, C, C++은 임베디드 영역에서 많이 사용되며, C#은 게임개발에서 많이 사용됩니다.

 

 

💻 Programming/Java

[Java] 로또 번호 자동 생성기 만들기

2019년 6월 15일 로또 1등 당첨번호

이번에는 자바로 로또 번호 자동 생성기를 만들어보도록 하겠습니다.

자바로 프로그래밍을 하기전에 우선 로또의 규칙부터 알아야 겠죠.

로또에는 1부터 45까지의 숫자가 존재하고

보너스 번호를 포함하여 총 7개의 숫자를 랜덤하게 뽑습니다.

각 숫자는 중복되어 선택할 수 없습니다.

여기서 키 포인트 단어는 바로 랜덤과 중복 입니다.

자바에서 중복을 제거하는 가장 좋은 방법은 Set을 이용하는 방법입니다.

 

자, 그럼 랜덤하게 숫자를 구하는 것부터 해보도록 하겠습니다.

자바에서 랜덤한 숫자를 얻을 때는 Math.random() 메서드를 이용합니다.

그런데 이 메서드는 0부터 1사이의 double 형태의 소수를 리턴해줍니다.

오잉?? 그럼 어떻게 1부터 45까지의 숫자를 얻는다는 걸까요??

이제부터 트릭을 알려드리겠습니다.

 

Math.random()은 0보다 크거나 같고 1보다 작은 숫자를 반환해줍니다.

내가 얻고자하는 max숫자를 곱해주면

0부터 max값 사이의 double 형태의 숫자를 얻을 수 있습니다.

그럼 이 숫자를 다시 int형태로 casting을 해버리면?

0<= 원하는 숫자 < max 사이의 int 값을 얻을 수 있습니다.

 

예제를 한번 보여드리도록 하겠습니다.

public static void main(String[] args) {
  getRandomNumber();
}
	
private static void getRandomNumber() {
  final int max = 46;
  for(int i = 0; i < 10; i++) {
    int randomNumber = (int)(Math.random() * max);
    System.out.println(randomNumber);
  }
}

위 코드를 실행시키면 아래와 같은 결과를 얻을 수 있습니다.

0
12
34
27
5
21
10
24
43

위 결과에는 중복된 숫자가 나오지 않았지만

몇 번 실행하다보면 동일한 숫자가 연속으로 나오는 경우도 있습니다.

따라서 중복을 제거해주는 과정이 필요하게 됩니다.

이때 필요한 것이 바로 Set입니다.

Set은 자바에서 중복을 제거하고자 할 때 아주 유용하게 쓰이는 자료구조입니다.

Set의 구현체는 여러가지가 있는데 일반적으로 많이 쓰이는 것은 HashSet입니다.

아래 예제 코드를 한번 보겠습니다.

public static void main(String[] args) {
  removeDuplicate();
}
	
private static void removeDuplicate() {
  Set<Integer> noDuplicated = new HashSet<>();
  noDuplicated.add(30);
  noDuplicated.add(30);
  noDuplicated.add(31);
  System.out.println(noDuplicated);
}

위 코드를 실행하면 아래와 같이 출력됩니다.

[30, 31]

보시는 바와 같이 30을 두 번 add 했는데 1개만 저장이 되었습니다.

이것을 이용해서 이미 뽑은 숫자는 저장하지 않고 새로운 번호를 뽑도록 할 수 있습니다.

 

아래는 완성된 로또 번호 생성기의 샘플입니다.

private static void lotto() {
  final int min = 1;
  final int max = 45;
		
  Set<Integer> selected = new HashSet<>();
  while(true) {
    int randomNumber = (int)(Math.random() * (max - min +1) + min);
    if(selected.add(randomNumber)) {
      if(selected.size() == 6) {
        break;
      }
    }
  }
  System.out.println(selected.stream().sorted().collect(Collectors.toList()));
}

위 메서드를 main 함수에서 실행시키면

1~45까지의 숫자들 중에서 중복되지 않은 6개의 숫자를 출력해줍니다.

랜덤 번호 생성하는 부분이 조금 수정된 것을 눈치채셨나요?

저 위에서 보여드린 로직으로는 0이 나올 수 있기 때문에 수정을 한 것입니다.

자바로 랜덤 숫자 구하는 방법에 대한 자세한 내용은 랜덤 숫자 구하기 에서 확인하실 수 있습니다.

 

위 메서드를 10번 실행한 결과는 아래와 같습니다.

[5, 17, 18, 25, 29, 33]
[9, 13, 16, 26, 30, 34]
[21, 24, 27, 30, 31, 42]
[9, 15, 17, 34, 36, 42]
[2, 3, 15, 35, 38, 41]
[8, 16, 30, 31, 36, 39]
[1, 5, 11, 40, 43, 44]
[1, 3, 4, 18, 21, 39]
[4, 7, 19, 28, 38, 40]
[7, 9, 14, 18, 30, 41]

이상으로 자바로 심플한 로또 번호 자동 생성기 만들기 포스팅을 마치도록 하겠습니다.

궁금한 점이 있으시면 댓글 달아주시고,

포스팅 내용이 도움이 되셨다면 공감 꾹 부탁해요 ^-^

 

💻 Programming

스프링부트 스케쥴러 사용하기

스프링부트 스케쥴러

이번 포스팅에서는 스프링부트 프로젝트에서 스케쥴링 작업을 등록하여 사용하는 방법에 대해서 설명합니다.

스프링 부트에서 스케쥴러를 사용하려면 우선 아래처럼

@EnableScheduling 어노테이션을 @Configuration이 붙은 클래스에 등록해줘야 합니다.

 

스케쥴링 활성화를 위한 @EnableScheduling 사용

 

위 처럼 어노테이션을 붙여주면

스프링이 관리하는 빈 중에서 아래와 같이

@Scheduled 어노테이션이 붙어있는 것들을

찾아서 활성화 시켜주는 역할을 하게됩니다.

 

위 처럼 @Scheduled 어노테이션을 붙여주고 실행주기를 특정지어주면

해당 애플리케이션이 실행되면 자동으로 실행이 됩니다.

 

실행주기를 설정하는 방법은 기본적으로 세 가지가 있습니다.

 

fixedRate : 매 특정 밀리초마다 동작

fixedDelay : 해당 기능이 종료된 후 특정 밀리초 이후에 다시 동작

cron : 크론표현식에 정해진 내용대로 동작

 

여러 개의 스케쥴 잡을 등록할 때에는 주의할 점이 있습니다.

위 처럼 두 개의 스케쥴 잡이 등록되어있을 경우 한 번에 하나의 잡만 동작한다는 점입니다.

즉, @Scheduled가 붙은 기능들이 실행되는 시간이 중복될 경우 한 번에 하나의 작업만 실행됩니다.

 

만약 두 개 이상의 기능이 한꺼번에 실행되어도 성능에 문제가 없을 경우에는

아래처럼 @Async처리를 할 수 있습니다.

 

@Async 처리한 스케쥴 tasks

 

물론, @Async 가 적용되려면 @Configuration에 @EnableAsync도 추가해줘야 합니다.

 

여기까지 설정이 되었다면 위 두 scheduled task들은 동시에 실행됩니다.

 

추가로 @Async를 붙이지 않은 task를 하나 더 추가하면 어떻게 동작할까요?

task를 하나 더 추가해서 꼭!! 테스트해보세요.

 

이상으로 스프링부트에서 스케쥴링 잡을 등록하여 활용하는 방법에 대해 간단히 포스팅 해보았습니다.

유용했다면 좋아요 꾹!꾹!꾹! 눌러주세요 ^-^

💻 Programming

안드로이드 폰에 웹사이트 바로가기 만들기

인터넷 서핑을하다가 앱버전이 별도로 없는 사이트를 홈화면에 등록하여 

앱을 실행하듯 사용할 수 있도록 바로가기를 만들어보도록 하겠습니다.

갤럭시 S8 & 크롬(Chrome)브라우저 기준으로 스샷을 첨부하였습니다.

참고로 기종(정확히는 안드로이드OS 버전) 및 

사용하시는 브라우저의 종류에 따라 스샷의 내용이 상이할 수 있습니다.



1. 우선 크롬브라우저를 이용하여  바로가기를 만들고 싶은 웹사이트로 이동을 합니다.

2. 크롬 브라우저 우상단의 메뉴버튼(세로로 나열된 동그라미 세개)을 터치하여 메뉴를 확인합니다.


3. 홈 화면에 추가를 선택합니다.




4. 바로가기 이름을 입력하고 추가를 터치합니다.




5. 다시 한번 추가를 터치합니다.




6. 아래처럼 홈 화면에 아이콘이 생긴 것을 확인하시면 됩니다.


7. 이제 생성된 바로가기를 터치하여 실행해보세요~


이상으로 안드로이드 폰의 홈 화면에 웹사이트 바로가기 만들기 포스팅을 마칩니다.