형변환이란? 리터럴과 변수에는 기본적으로 타입이 있다. (정수형, 실수형, 문자형 등등) 하지만 프로그래밍을 하다보면 서로 다른 타입 간에 연산이 필요한 경우가 있다. 그래서 이러한 경우 타입을 변환해줘야 하는 경우가 생기는데, 이러한 경우에 행하는 연산을 형변환이라 한다. (타입을 일치시키기 타입을 변환시키는 것을 형변환이라 한다.)

 

   자바 컴파일러는 자동으로 형변환을 해줌으로써 프로그램을 자연스럽게 동작하게끔 만들어준다. 실상 형변환은 프로그래머가 신경써야 하는 일 중 하나지만, 그렇지 못할 경우 자동 형변환을 함으로써 편하게 만들어주지만, 이러한 편함 속에는 논리적 오류가 생기기 마련이다. 

 

그래서 이러한 형변환에 대해 간략하게 알아보도록 하자.

 

1. 형변환하는 방법


기본적인 형변환은 별로 어렵지 않다. 단순히 변수나 리터럴 앞에 변환하고자 하는 타입을 괄호 안에 넣어서 써주기만 하면 된다. 

int a = 10;
double b = (double)a;

int 타입의 a라는 변수를 double의 형변환을 한 뒤에 b에 할당하는 것이다. 

 

class Main {
    public static void main(String[] args) {
        int a = 10;
        double b = (double)a;

        System.out.println(a);
        System.out.println(b);
    }
}

실제로 출력을 해보면 출력 결과로 

10
10.0

으로 나오는 것을 확인할 수 있다. 정상적으로 형변환 됨을 확인가능하며, 형변환이 이루어진 int a는 형변환이 이루어지고 값이 할당된 뒤에는 값의 변화가 없는 것을 확인할 수 있다. (여전히 int형이다.)

 

기본적으로 형변환은 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다. 하지만 주의할 점이 있다. 실수형과 정수형에서는 기본적인 데이터를 표현하는 방법 자체가 다르기 때문에 데이터 손실이 발생할 수 있다.

 

2. 타입별 형변환


타입별 형변환에서 주의할 점은 데이터의 손실 가능성이다. int 형은 32비트, byte형은 8비트이다. 그렇다면 int형에서 byte형으로 형변환이 일어나면 데이터 손실 가능성이 있는 것이다. 

 

실제로 코딩을 통해 실험해보도록 하자. 

 

class Main {
    public static void main(String[] args) {
        int a = 10;
        byte b = (byte)a;

        System.out.println(a);
        System.out.println(b);

        a = 500;
        b = (byte)a;

        System.out.println(a);
        System.out.println(b);
    }
}

이 코드의 결과값은

 

10
10
500
-12

이러한 형태로 나온다. 초기에 값인 10을 입력할 때는 int와 byte에서 데이터 손실이 일어나지 않았지만, 두번째 값에서는 손실이 일어나고 있다. 이는 byte의 값의 범위에서 벗어난 범위를 넣었기 때문에 원치 않는 출력이 나오고 있는 상태이다. [ byte의 범위는 -128 ~ 127까지이며, 이 범위를 넘어서면 우리가 생각하는 값과는 다른 의도치 않은 값이 나올 수 있다.]

 

데이터 형에 따른 조금 더 자세한 형변환은 나중에 다루도록 하겠다.

 

3. 자동형변환


기본 형 변환은 다음과 같은 순서로 이루어진다.

이러한 형변환이 만들어진 이유는 데이터의 손실이 없는 방향으로 형 변환이 이루어진다. 일반적으로 타입에 따른 범위 내에서는 자동형변환이 일어나지만 범위를 벗어나는 데이터를 할당하려고 하면 오류 메시지를 보내준다. 

* 기본형과 참조형은 서로 형변환이 불가능하다.

 

예를 들어,

byte a = 10000;

byte의 범위인 -128 ~ 127을 넘는 범위를 저장하게 되면 오류메시지를 보내준다. 

java: incompatible types: possible lossy conversion from int to byte 를 자바 컴파일러가 보내주며, 오류가 났다고 명시해준다. 하지만 여기서 명시적 형변환을 지시해주게 되면 오류가 나지 않는다. 

 

byte a = (byte)10000;

이렇게 컴파일하면 컴파일 오류가 나지 않는다. 프로그래머가 의도한 오버플로라 컴파일러가 판단하는 것이다. 

 

또 다른 경우는 연산 과정에서 형변환이 자동으로 일어난다. 연산에서는 범위가 조금 더 넓은 범위로 형변환해서 타입을 일치시킨 뒤 연산을 시행한다. (이렇게 하는 이유는 범위가 넓은 쪽으로 형변환해서 연산해야 데이터의 손실이 가장 적어지기 때문이다.)

 

int a = 10;
double b = 10.0 + a;

a는 int형이지만, 실제로 계산할 때는 a가 double형으로 형변환한 뒤에 계산한다. 

 

만약에 최댓값에 대해 기억이 안난다면,

int i = Integer.MAX_VALUE;

를 사용함으로써 최댓값을 확인할 수 있다.

  객체지향은 이야기하기에는 너무나 방대한 이야기이지만 자바를 배우기 위해서 꼭 필요한 이야기이므로 하고 넘어가도록 하자. 

 

1. 객체지향


  객체지향은 자바 프로그래램을 구현하는 하나의 방법이다. 소프트웨어는 하드웨어와 달리 구체화된 상태가 없어서 오히려 설계하기가 힘들다. 그 이유는 제약 사항이 없기 때문이다. 우리에게 무한한 자유를 주기 때문에 오히려 무엇을 할지 못하는 상태가 되버리는 것이 소프트웨어의 제약이다. 무엇이든 할 수 있지만 그렇기에 모든 것을 할 수 없는 상태가 되는 것이다. 현실 세계에서 톱니바퀴를 만든다면 현실 세계의 톱니바퀴는 만드는데 제약이 아주 많다. 재질부터 시작해서 만들어내기 위한 틀 또한 모든 것이 제약 사항이 될 것이다. 하지만 프로그램에서는 제약이 없다. (또 다른 예로는 수식을 만들고자 한다고 생각해보아라, 어떻게 만들어야 할지, 어떤 것을 변수로 놔야 할지 잘 모를것이다.)

 

  그래서 프로그램을 모델링 하기란 너무나 어려운 것이다. 이를 사람이 설계하기 쉽게 만들기 위해 생각한 것이 객체지향 프로그래밍이다. 객체지향 프로그래밍은 일상 생활을 객체로 표현함으로써 이러한 설계 과정을 추상화하기 위해 노력했다.

 

  예를 들어보자, 커피숍에서 커피를 시키는 상황을 생각해보자. 커피숍에는 바리스타와 손님 그리고 커피머신이 있다. 여기서 바리스타, 손님, 커피머신은 각각 하나의 객체라 볼 수 있다. 손님은 바리스타에게 커피를 주문하는 메시지를 전달할 것이며, 바리스타는 이러한 메시지를 받아서 처리해준다. 그리고 바리스타는 커피머신을 활용해서 커피를 만들게 될 것이다. 그리고 다시 커피머신에 의해 만들어진 커피는 바리스타에게 전달되고, 다시 커피는 손님에게 전달됨으로써 상황이 마무리가 된다.

 

이러한 상황을 모델링 하는 것을 객체지향이라 볼 수 있다. 대부분의 일을 처리할 수 있는 상상력을 가질 수 있게 되는 것이다. C++과 Java는 이러한 객체지향적 언어라 볼 수 있다. 

 

 

2. 어떠한 방식으로 만들 것인가?


  그러면 이를 만들기 위해서 어떠한 방식으로 설계할 것인가가 새로운 문제가 된다. 어디서부터 어디까지가 하나의 객체이며, 어떠한 방식으로 표현하는가가 문제가 된다. 그래서 객체지향은 기본 원칙을 둠으로써 설계할 때, 너무 많이 벗어난 설계를 하지 않도록 하고 있다. 설계의 기본 방향은 네 가지 기본 원칙으로부터 시작된다.

  1. 캡슐화
  2. 추상화
  3. 상속
  4. 다형성

이렇게 네 가지 기본 원칙이 존재한다. 

 

캡슐화는 데이터와 데이터에서 작동하는 하나의 단위로 묶는다. 그리고 그 내부의 속성과 메소드의 내부 구조를 숨기는 것을 나타낸다. 이전에 설명한 것처럼 해열제(알약) 안에는 어떠한 성분이 들어있는지 모르더라도 우리는 해열제(알약)이 먹으면 열을 내리는 작용을 한다는 것을 안다.

 

데이터의 추상화 는 객체의 구현은 현실 세계의 복잡함을 그대로 표현하기 위함이 아닌 추상화된 형태를 표현해야 함을 이야기 한다. 추상화는 특정 일에 대한 구체적인 상황을 제거하고 일에 대한 본질을 표현하는 형태를 이야기한다. (예를 들어, 동사무소에서 하는 일은 민원 처리, 장비 대여, 행정 업무 등 다양한 업무를 보고 있지만 그에 따른 본질은 동에 사는 주민들에 대한 편의를 위한 업무 처리이다.)

 

상속 은 클래스에서 부모와 자식 간의 관계를 정의하는 메커니즘이다. 사실 이 관계는 부모로부터 물려받은 특정 클래스의 특징을 이야기하는데, 여기서 특징은 부모 클래스에서 가지고 있는 어떠한 기능을 이야기한다. 예를 들어, 부모가 가지고 있는 정수를 처리하는 능력은 자식에게 상속되어 그대로 정수를 처리하는 능력을 가지게 되는 것이다. 이는 중복된 기능에 대한 개발을 막기도 하며, 효율성 증대와 더불어 설계의 계층 구도를 생각하기 위함이라 봐도 좋다. 

 

다형성 이란 하나의 이름에 여러 형태를 의미한다. 프로그래머에 따라 같은 이름을 가지더라도 해석은 다를 수 있다. 이러한 것을 객체지향은 받아들여서 다형성이란 이름으로 새롭게 재해석될 수 있는 것이다. 이전에 우리가 배운 println에서 정수형을 받아들이는지, 실수형을 받아들이는지, 문자형을 받아들이는지 모두 다를 수 있다. 프로그래머가 '특정 값을 받아서 출력한다.'의 의미가 프로그래머마다 다를 수 있는 것이다. 특정 값이 어떤 사람은 정수로 받아들일 수도 있는 것이고, 어떤 사람은 실수로 받아들일 수도 있는 것이다. 이러한 부분을 처리하기 위해 다형성을 두게 된 것이다. 

또 다른 예로는 우리가 특정 웹사이트에서 게시판을 만들 때, 게시판의 제목과 글쓰기 등의 형태는 유사하지만, 그걸 실제로 구현하는 게시판에 해당하는 제목과 날짜 그리고 디자인은 다를 수 있음을 이야기한다. 즉 실제로 구현하는 사람의 해석에 따라 그 형태가 달라지는 것이다.

 

3. 클래스와 인스턴스


자바에서는 클래스란 개념이 있는데, 객체지향에서는 객체란 개념이 있다. 이를 매칭시켜야 설계를 할 것이다. 일반적으로 자바에서 클래스를 이용해서 객체를 설계한다. 하지만 이는 하나의 설계도일 뿐이다. 자동차를 예를 들어보자, 자동차는 기본적으로 동일한 속성이 존재한다. 

  • 바퀴
  • 엔진
  • 기본 프레임

더 많은 속성이 있겠지만 이정도라 생각하자. 자동차는 이러한 속성은 같지만 실제로 갖는 값은 서로 다르다. H사에서 만든 자동차와 K사에서 만든 자동차는 실제 속성의 값이 틀리다. 엔진도 있고 바퀴도 있고 기본 프레임도 있지만, 엔진의 출력도 다르고 바퀴의 크기도 다르며, 프레임의 색도 다르다. 우리는 이렇게 기본 설계가 되는 형태를 클래스라 하며 실제로 갖는 값을 인스턴스라 할 수 있다.

  • 기본 예시로 H사의 그랜저와 K사의 K9는 인스턴스라 볼 수 있는 것이다. (자동차 객체를 갖는)

 


객체지향은 이 보다 더 많은 이야기를 담고 있지만, 처음보는 사람이 이 정도만 이해를 하면 충분하다. 대략적인 개념은 이 정도로 담아둔 상태에서 조금 더 프로젝트를 진행시키거나 조금 더 프로그래밍을 연습해보면서 특정 상황적인 부분을 프로그램으로 어떻게 담을지 고민하면서 발전시켜 나가야 한다. 이 글에서도 객체지향의 모든 것을 담지는 못했다. 이는 설계하는 사람에 따라 그 해석 과정이 계속해서 달리지기 때문에 대략적인 이야기를 바탕으로 풀어나가려고 했다.

프로그래밍 언어를 배우면서 가장 근본적인 질문은 어떻게 배워야 하는가에 대한 질문 이었습니다. 프로그래밍은 우리에게 너무나 많은 일을 할 수 있는 강력한 힘을 줍니다. 하지만 문제가 있죠. 너무 강력한 힘을 주면서 동시에 너무나도 큰 자유를 선사해준다는 점입니다. 

자유

자유... 자유는 누구나 원하는 일이지만 갑자기 주어지면 뭘 해야 할지 감이 안 옵니다. 초등학교, 중학교, 고등학교에서는 하라는 데로 하기만 하면 됩니다. 심지어 대학교 조차도 커리큘럼이 있습니다. 이러한 커리큘럼을 특정한 시간 내에 특정한 주제가 정해진 상태로 우리는 하라는 일을 하면 됩니다. 하지만 프로그래밍은 우리에게 자유를 줌과 동시에 무엇을 해야 할지 우리가 스스로 결정해서 나가야 합니다. (물론 회사에 들어간다면 해야 할 일이 주어지지만 프로그래밍을 배우는 주된 이유는 내가 원하는 것을 마음껏 펼칠 수 있기 때문입니다.)

 

그렇다면 무엇을 배워야 할지 모르는 상태에서 나름의 틀을 주는 것은 무엇일까요? 그건 책이죠. 아무것도 할 줄 모른다면 일단은 머릿속에 무언가라도 넣은 상태에서 무엇을 해야 할지 결정해야 합니다. 그것도 싫다면 자바에서 주어지는 여러 기능을 시험삼아 테스트 해봐야 합니다. 틀이 주어지건 안 주어지건 간에 우리는 주어진 기능을 시험해보고 어떻게 사용해야 하며, 쓰다보면 생기는 질문을 꼭 해결하면서 진행해야 합니다. 

 

그렇다면 오늘의 포스팅에서는 어떻게 여러 기능을 연습해볼 수 있는지 살펴보도록 하겠습니다.

1. 어떻게 테스트를 할 것인가?


우리에게 가장 처음의 프로그래밍의 시작은 Hello, World가 주어진 것은 우연이 아닙니다. 가장 기본적인 입출력 프로세스를 익히기 위함이죠. Stdout이라 하는 Standard OutPut은 프로세스에서 가장 기본적인 인터페이스이죠. 그러면 단 한 줄을 분석해보도록 합시다.

 

System.out.println("Hello, World!");

 

자바의 기본적인 API를 확인할 수 있는 곳은

docs.oracle.com/en/java/javase/15/docs/api/index.html

 

Overview (Java SE 15 & JDK 15)

This document is divided into two sections: Java SE The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start with java. JDK The Java Development Kit (JDK) AP

docs.oracle.com

이곳에서 확인할 수 있다. 필요한 내용이 있을 때마다 Search를 활용해서 사용하도록 해야 한다.

상단에 보면 Search가 있으니 궁금한 내용을 찾아보는 습관을 들이자. 참고로 영어가 잘 안되도 우리는 할 수 있다. 네이버 파파고와 구글 번역이 있으니 전혀 무섭지 않다. 번역기를 돌리면서 영어로도 한번 읽어보자. 차분히 영어 실력도 같이 늘어가는 것을 볼 수 있다. 언제까지고 영어가 두려워서 영어 페이지가 나오는 것을 외면할 것인가! 한번 시도해보자. 당장에 하루 이틀 만에 확 늘어날 수는 없지만 꾸준히 하면 영어 페이지가 나와도 읽을 만할 정도가 될 것이다. 

 

우리는 여기서 System을 찾아볼 것이다.

많은 검색 결과가 나온다. 그 중에서 java.lang.System을 클릭해서 들어가보자. 

두 가지 정보를 바로 얻을 수 있다. Module : java.base와 Package : java.lang 모듈과 패키지를 알아볼 수 있다. 그러면 우리가 모르는 정보는 모듈과 패키지란 단어를 모른다. 다시 찾아보면 된다. 어쨋든 모듈이란 기능상 비슷한 것을 모여서 만든 작은 부품이 조립된 하나의 덩어리를 모듈이라 부른다. 

 

모듈


현실 세계에서 자동차를 만들기 위해서는 수 많은 모듈이 필요하다. 모듈은 수 많은 부품으로 이루어져 있다. 이런 관점에서 보았을 때 모듈은 하나 또는 하나 이상의 기능을 하는 특정한 덩어리이며, 나사와 같은 작은 부품이 모여서 최소한의 기능을 할 수 있게 만들어주는 하나의 덩어리라고도 볼 수 있겠다. 대표적인 모듈은 ABS 모듈이다. 자동차 시스템에서 브레이크 시스템을 담당하는 녀석으로 Anti-lock Break System을 의미한다. 브레이크를 밝을 경우, 한 쪽 바퀴가 먼저 잠기는 것을 방지해서 차가 회전하는 것을 막아주는 역할을 한다.

 

ABS 모듈의 구성은 바퀴속도 감지기, ECU(전자 제어 모듈), 유압조정장치, 경고등 등이 기본적인 구성 성분이다. 여기서는 다른 모듈을 포함하기도 하는 것이 모듈이다. 소프트웨어에서도 마찬가지이다. 이러한 모듈의 크기는 천차만별인데, 모듈의 크기가 커지면 처음에 설계하기가 어려워지는 대신에, 모듈과 모듈을 합치는 과정이 편해진다. 반대로 모듈의 크기가 작아지면 처음에는 설계하기 쉽지만, 이러한 모듈들을 조립하는 단계에서 힘들어 진다. 자동차에서도 부품이 너무 많은 나머지 조립할 때, 일반인은 하지 못하는 것과 마찬가지이다. 하지만 조금 더 모듈의 크기가 큰 전자제품의 경우, 자동차 보다 조립하기는 쉬운 경향이 있다. 물론 이러한 예는 정확한 예는 아니지만 모듈에 대해 이해하기에는 충분하리라 생각한다.

 

모듈을 사용하는 이유는 사람이 다룰 수 있는 단위로 나누어서 소프트웨어를 설계하기 쉽고 유지보수 하기 쉽게 만들기 위함이다. 프로그램이 하나의 덩어리로만 이루어진다면 우리는 다음 소프트웨어 버전을 만들기 위해서 처음부터 설계해야할 것이다. 또한 특정 부분이 고장나서 고치려고 할 때, 그 소프트웨어를 다시 사야 할 것이다. 

 

지금 세상은 모듈화가 잘 이루어져 있어서 특정 예를 들긴 어렵지만, 소비자의 입장에서 예를 들어보로독 하자. 대표적인 덩어리 모듈의 예시를 들어보자면 핸드폰에서 탈착식 배터리와 일체형 배터리의 차이라 볼 수 있다. 탈착식 배터리의 장점은 배터리의 수명이 다 되어, 새 것으로 교체하고자 한다면 언제든지 교체가 가능하다. 하지만 일체형 배터리는 그렇게 하기 어렵다. 액정을 뜯어내야 하며, 그것을 다시 붙여야 한다. 이러한 과정에서 소비자가 직접 하기 힘든데다가 엔지니어에게 맡길 경우 많은 비용이 소모되는 것이다. 

 

패키지


  패키지란 Class들의 모음을 패키지라 한다. Package(패키지)란 말에서 알 수 있듯이 하나의 선물 꾸러미라 생각하면 편하겠다. 여기에 추가로 인터페이스를 같이 묶어두고 하나의 폴더에 저장해둔 것이다. 여기서 인터페이스라 하면 사용할 수 있게끔 만들어주는 장치라 보면 된다. 전자기기에서는 전기 코드가 인터페이스에 해당한다. (전기 코드 자체도 인터페이스이지만, 전자기기의 여러 버튼들 또한 인터페이스라 볼 수 있다.)Interface는 영어 단어 해석에서 보자면 [결합부], [접속기], [대면부] 등의 뜻을 가지고 있다. 특정 물체와 물체가 맞닿는 곳을 인터페이스라 할 수도 있다. 혹은 사물과 사용자가 서로 의사소통 할 수 있도록 만들어 놓은 매개체를 의미한다. 사용자와 맞닿은 인터페이스를 UI (User Interface)라 하기도 한다. 핸드폰에서 보이는 화면 대부분이 UI이기도 하다. 

  패키지를 두는 대표적인 이유 중 하나는 클래스 이름의 고유성을 보장하기 위해서이다. 프로그래밍 프로젝트가 커지면 커질 수록 패키지 이름이 겹치는 경우가 있는데, 이러한 상황에서 다른 패키지를 사용함으로써 중복을 회피할 수 있는 것이다.

  예로 들자면, A와 B는 파일 123을 저장하고 싶은 상태이다. 그런데 바탕화면에다가 저장하면 파일이 중복되서 하나의 파일이 사라질 확률이 있다. 이러한 상태에서 폴더를 따로 둠으로써 이를 피하는 것이다. A는 폴더 'A의 폴더'에 저장하고, B는 'B의 폴더'에 저장함으로써 파일 123은 유지가 되는 것이다.

  이제 불러오는 방식을 확인해보면, A의 폴더 -> 파일123B의 폴더 -> 파일123은 분명히 구분이 가능한 상태가 되었다.

 

* 이곳에서는 패키지의 사용법이 아닌 패키지가 무엇인지만 보도록 하고 나중에 패키지를 사용하는 방법에 대해 자세히 다루도록 하자.

 

 

자바에서 둘 사이의 차이점? 패키지와 모듈


그렇다면 모듈과의 차이점은 무엇인가? 패키지는 클래스와 인터페이스를 묶어놓은 하나의 폴더를 의미한다. 모듈은 이러한 패키지를 포함해서 특정 필요한 리소스를 모아놓은 하나의 컨테이너이다. 패키지보다는 모듈이 조금 더 상위 개념이라 볼 수 있지만, 그렇다고 패키지 위에 모듈이 있다고는 볼 수 없다. 실행가능하도록 최소한의 것들을 모아놓은 것이라 생각할 수 있다. 그래서 하드웨어적 성능이 떨어지는 IoT 기기 상에서도 응용 프로그램을 실행가능하다. 

 

 

다시 System.out.println으로 돌아가자.

여기서 System은 System class를 의미하고 있으며, 여러 class와 메소드를 포함하고 있는 것이다. 

module에서는 java.base, Package java.lang에 들어있다. 

여기에서는 PrintStream에서 out 필드임을 확인할 수 있다. out은 표준 출력 스트림을 의미한다. 여기서

 

스트림이란? 


  마우스와 키보드 같은 입력 장치와 모니터, 프린터기 같은 출력 장치에서 보낸 신호와 컴퓨터에서 보낸 신호는 컴퓨터 상에서 알아서 처리해준다. 우리는 하드웨어적인 부분을 신경쓸 필요가 없다. 이러한 작업을 해주는 것이 스트림이다. 

 

  스트림은 방향에 따라 두 가지로 나뉘어지는데, 컴퓨터 쪽으로 들어오는 스트림을 입력 스트림이며, 컴퓨터 쪽에서 사용자 방향으로 나가는 스트림을 출력 스트림이라 한다. 

 

여기까지만 공부해도 충분하다. 여기서 더 파고 들어서 그 원리까지 알면 좋겠지만, 마음이 허락 안할 수 있기에 이해력과 마음이 허락하는 한 파고들면 된다. 

 

 

스트림에 이어서 println


println은 특정 값을 입력받은 뒤에 사용자가 볼 수 있도록 출력해주는 역할을 한다. 하지만 println은 하나만 정의된 것이 아니다.

다양한 형태의 println이 정의되어 있다. 이렇게 하는 이유는 사용자가 어떤 값을 입력할지 모르기 때문이다. 우리가 앞서 보았듯이 컴퓨터는 한정된 형태의 데이터를 인식할 수 있다. 정수면 정수, 실수면 실수, 문자면 문자로 인식하는 것이다. 사람이야 각 형태를 따로 따로 자동으로 인식되지만 컴퓨터는 그러지 못하다. 그러므로 이를 모두 인식할 수 있도록 도와주는 것이 다양한 형태로 정의해두는 것이다. 우리는 이러한 형태를 자바의 다형성이라 불리며 실제 구현 방식 중 하나인 오버로딩(Overloading)방식이라 한다. 

 

같은 이름의 함수를 여러 개 정의하고, 매개변수와 그에 따른 유형 그리고 개수를 다르게 함으로써 사용자의 다양한 호출에 반응하기 위함이다. 그래야지 사용자가 숫자를 호출하건, 문자를 호출하건 다양하게 대응할 수 있는 것이다. 

지난 시간에는 Hello, World를 타이핑 해보았다. 그렇다면 Hello, World에 대한 이야기를 해보도록 하자.

[Java]Hello World! 출력하기 

public class Main{

}

자바 프로그램에서의 기본 골자는 이러한 형태로 생겼다. 바로 

 

1. public class이다.


자바 프로그램 상에서 public class는 가장 기본이 되는 것 중 하나이다. 자바 프로그램은 기본적으로 하나 이상의 class로 구성되어 있으며, 이러한 class 들이 모여 다양한 일을 하는 프로그램이 되는 것이다. class의 이름은 Main말고도 다양하게 가질 수 있다. 원하는 이름은 모두 class의 이름이 될 수 있지만 숫자로 시작하는 것은 안된다. public은 접근 제어자로 접근을 제한하는 기능을 하는 문법이다. 이는 접근에 제한이 없는 것을 의미하며, 접근제어자로는 protected, default, private를 사용한다. 객체지향에서 이러한 접근 제한 아주 중요한 역할을 한다. (대표적으로 객체지향에서 캡슐화라는 단어가 나오는데, 캡슐화의 장점 중 하나는, 해열제로 예를 들자면, 실제 세상에서 약을 먹을 때, 그 속에 어떤 성분이 있는지 모르지만 약을 먹으면 열이 내리는 역할을 해준다. 우리는 약에 대한 성분을 아무것도 모르더라도 약효가 무엇인지만 알고도 사용할 수 있는 것이다. ) 물론 객체지향에 대해 더 자세히 이야기하면 끝도 없지만 대략적인 느낌은 그러하다.

 

앞서 보았던 웹 컴파일러에서도 Ideone으로 클래스 이름을 지정했다. 

public static void main(String[] args) {
}

그 다음으로 오는 내용은 main 메소드이다. main은 전체 프로그램 상에서 하나의 main을 갖는다. 실제로 프로그램이 구동되는 공간으로써, 프로그램이 시작되는 공간이라 생각하면 편하다. 앞서 본 public말고도 static이 존재하는데, 프로그램이 시작하는 시작 공간이다 보니, 처음부터 메모리 상에 존재하게끔 만들어주는 역할을 한다고만 알아두자. 나중에 다시 이야기하도록 하겠다.

 

System.out.println("Hello, World");

마지막으로 Hello, World를 출력해주는 구문이다. 이는 자바 표준 입출력 클래스에 들어있는 함수이다. 세 부분으로 이루어져 있다. System + out + println으로 해석해도 좋다. 당연히 System은 시스템이라는 말에서 볼 수 있듯이 컴퓨터의 기본적인 일을 처리하는 공간이 될 것이며, out은 밖으로 나가는 출력 시스템, print + ln이므로 무엇인가가 프린트를 된다고 볼 수 있다. 마지막 ln은 새로운 라인을 넣어준다는 New Line과 같다. 

 

비슷한 메소드로써 System.out.print("Hello, World") 가 있다. 이 메소드는 데이터를 출력한 이후에 줄 바꿈을 하지 않는다. 

 

이렇듯 한 개의 간단한 프로그램을 보더라도 많은 키워드가 있음을 확인할 수 있다. 우리는 이러한 키워드를 모두 외울 필요는 없다. 다만 중간중간에 필요할 때마다 찾아봐야 한다. 이렇게 많은 키워드를 어떻게 외울 수 있겠는가? 물론 자주 쓰다보면 외울 수야 있다. 하지만 너무 많기 때문에 외우지 않고 레퍼런스를 찾아보면서 쓰는 것이다. 그러므로 레퍼런스를 자주자주 들여다 보는 습관을 갖는 것이 좋다. 

 

en.wikipedia.org/wiki/List_of_Java_keywords 

 

List of Java keywords

A snippet of Java code with keywords highlighted in blue and bold font In the Java programming language, a keyword is any one of 52 reserved words[1] that have a predefined meaning in the language; because of this, programmers cannot use keywords as names

en.wikipedia.org

위키피디아에는 많은 자바 키워드가 정리가 되어 있다. 구경하고 싶은 사람은 구경해도 좋다.

우리는 프로그래밍 언어를 배우게 되면 가장 먼저 출력해보는 단어들인 Hello, World를 출력해보도록 하자. 기본적인 출력을 해봄으로써 프로그래밍이 어떠한 과정으로 진행되는지 살펴보자라는 의미를 가지고 있다. 프로그래밍 세계로의 첫 걸음인 것이다. 중요하면서도 동시에 무섭기까지 하다.

 

우리는 Java IDE를 사용하도록 할 것이다. 다만, 유명한 이클립스를 사용하진 않을 것이다. 이유는 안 이뻐서다. (가장 중요한 이유다.) 그렇다면 무엇을 사용할 것인가? IntelliJ IDEA를 사용할 것이다.

 

이유는? 역시 이뻐서다. 그냥 필자의 마음에 들어서다. 처음에 뭐가 좋나 뭐가 좋나 고민할 필요가 없다. 이쁘고 무료로 지원되냐? 가 중요하다.

 

두 가지 다운로드 옵션이 존재한다. 하나는 Ultimate, 하나는 Community이다. 커뮤니티는 무료 버전이다. 하지만! 만약 학생이라면 학교 이메일을 통해 인증하고, 1년 간 무료로 사용해보도록 하자. 정말 편하다. 물론 우리에게는 더욱 강력한 VSCode도 있긴 하지만, 처음부터 사용하기엔 부담스럽다. 그냥 알아서 해주는 IntelliJ를 사용하도록 하겠다.

 

www.jetbrains.com/ko-kr/idea/

 

IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE

Enterprise Java, Scala, Kotlin 등을 지원하며 강력한 기능을 제공하고 인체 공학적으로 설계된 Java IDE

www.jetbrains.com

공식 홈페이지이다. 간단하게 뭐가 우수한지 말하자면, 쓰다보면 가끔 언어를 이해하고 내게 필요한 것을 추천해줄 때 편안함을 느낀다. 물론 더 다양한 이유가 많지만, 그런건 처음에는 보이지도 않는다. 누차 이야기하지만 편하고 이뻐서다!

[학생 인증이 되시면 반드시 Ultimate을 사용하도록 하세요.]

 

 

둘의 차이는 아직 우리가 못 느낀다.

 

그러나 프로그래밍을 하면 할 수록, 알아가면 알아갈수록 필요한 기능들이 보이기 시작할 것이다. 

물론 다른 IDE도 있다.

 

code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

추천한다. 무료다! 강력하다! 이쁜걸로 쓰면 되지만 VSCode는 직접 하나하나 만들어가야 한다. (플러그인을 잘 설치해야 한다.) 좋고 나쁜건 없다. 그냥 아무거나 써도 된다. 사용자가 중요하다. 전동 드릴을 사야하는데 어떤 브랜드를 써야 하나요? 삼대장 같은게 있으니 그것 중에 아무거나 골라서 쓰면 된다.

노트북은? LG, 삼성, 애플과 비슷한 이미지다. 

 

인텔리제이 설치와 더불어 초기 설정에 알고 싶다면, goddaehee.tistory.com/195

여기에 추가로 플러그인 설치를 통해 한글화를 진행하면 된다. 

 


프로젝트까지 완료되면 우리는 Hello World를 볼 수 있다.

 

class Main {
    public static void main(String[] args){
        System.out.println("Hello, Name!");
    }
}

을 치고서 실행하면 된다. 

실행하면 

이런 느낌으로 나오는 것을 확인할 수 있다.

 

 


웹 컴파일러 사용하기


IDE는 편안함을 제공한다는 점에서 아주 좋다. 하지만 설치가 번거롭고 초기 셋팅을 하기까지 귀찮을 수 있다. 게다가 많은 기능이 필요없는 사람의 입장에서 설치는 정말 하기 싫은 작업 중 하나이다. 그러므로 설치하지 않고 인터넷 웹 페이지 상에서 사용할 수 있는 웹 컴파일러를 소개하고자 한다. 많이 사용되기도 하는 웹 컴파일러 중 하나는 이곳이다.

ideone.com/

 

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

ideone.com

컴퓨터가 느리거나 설치가 싫은 사람은 웹 컴파일러를 꼭 써보기 바란다. 추가로 위에 사이트가 접속이 안 될 경우에는 웹 컴파일러라고 구글에 치면 많은 종류가 나오니 취사선택해서 사용해보는 것도 좋다.

 

이런 느낌으로 나온다.

1. 리터럴 (Literals)


우리의 일상생활을 둘러싼 모든 것은 어떠한 관점에서 보면 모두 정보라 볼 수 있다. 그러한 관점에서 우리는 변수와 상수를 나누어서 살펴볼 필요가 있다. 수학에서도 변수와 상수는 구분되어져 있다.

이 식은 우리가 중학교 때부터 봐온 이차식이다. 아주 간단한 식이다. 이 식에는 변수와 상수가 공존하고 있다. a, b, c는 상수이며, x는 변수이다. 너무 깊게 들어가지 말고 간단하게 짚고 넘어가도록 하자. 상수는 고정된 값이며, 변수는 변할 수 있는 수이다. 그래서 컴퓨터에서도 변수와 상수 두 개로 나누어져 있다. (원래 프로그래밍 자체가 학자를 위한 것이었으므로 그 기원을 생각하면 이렇게 설계된 것이 당연시 된다.) 

 

하지만 컴퓨터에서는 하나의 개념이 더 추가된다. 바로 리터럴이다. 리터럴이란 데이터 자체의 값을 리터럴이라고 한다. 예를 들어 10이란 수가 있으면, 10 자체의 데이터를 의미하는 그 자체의 값을 리터럴이라 부른다. 예를 들어 보자.

final int a = 10 

final을 붙이면 변수를 변경할 수 없게 된다. 그래서 우리가 이야기하는 상수가 된다. 변할 수 없는 값이므로 상수의 정의에 들어맞는다. 이러한 값을 초기에 한번은 정의를 해줘야 하는데, 그 값 자체를 의미하는 10은 리터럴이 된다.

 

다시 한번 정리하자면 10이란 숫자 자체는 리터럴이며, 10을 넣어서 값을 변하지 못하게 하는 한 값은 상수가 되는 것이다. 

 

프로그래밍에서는

  • 상수는 특정 공간에 넣은 변수인데, 변하지 않는 변수를 상수라 부를 것이며,
  • 리터럴은 데이터 자체로써의 변하지 않는 어떤 값을 의미한다.

Java에서 문자 리터럴와 문자열 리터럴은 차이점이 있다.

문자 리터럴은 'a', 'b' 이렇게 하나짜리 따움표를 쓴다는 점

문자열 리터럴은 "a", "abc", "Hello"의 형태를 가진다는 점이다. 문자를 하나 쓴다고 문자 리터럴이 되지 않는다. " " 의 형태는 문자열 리터럴을 가지게 된다. 다만, 컴파일러가 똑똑해짐에 따라 알아서 바꿔주지만 그래도 조심해서 사용하도록 해야 한다.

 

마찬가지로 숫자 리터럴에서도 1_000_000 이러한 값은 숫자 리터럴이다. 문자가 아니다. 이렇게 사용하는 이유는 단위를 읽기 쉽게 만들어주기 위해서이다. (가독성) 저 숫자랑 같은 수는 1000000이다. 

 

리터럴의 종류에는 다양한 종류가 있다. 우리가 생각하는 모든 변수는 모두 리터럴이 존재한다. 정수 리터럴, 문자 리터럴, 문자열 리터럴, 실수 리터럴, 논리 리터럴 등 다양한 종류가 존재한다. 이러한 리터럴의 차이점을 아는 것은 우리가 자바를 프로그래밍할 때, 나중에 객체지향프로그래밍을 할 때 중요한 초석이 된다. 리터럴로 생성된 객체의 주소값과 특정 메서드를 활용해서 비교하는 경우에가 다를 수 있다는 점을 이해할 수 있는 길이 되는 것이다. 이러한 점은 나중에 차분히 설명하도록 하자.

 

2. 변수


변수 - 메모리 상에 자리를 지정해주고 그 자리를 사용자가 사용할 수 있도록 알려주는 것이다. 

예를 들어, 서울시 성북구 117번길 1에 사는 사람의 주소를 able이라 하면 다음부터 able이라 부르면 우리는 자연스럽게 서울시 성북구 117번길 1로 찾아가게 되는 것이다. 

 

int able;

이렇게 지정해주면 int라는 자리만큼의 메모리를 배정하주고, 특정 주소지에 대한 이름을 able이라 하자 라고 선언하는 것이 변수이다. 이제 이 공간은 사용자가 사용할 수 있다. 

able = 1;

사용할 수 있는 주소와 장소가 생겼으므로 여기에 1을 넣도록 할 것이다. 여기서 1은 리터럴로 생성이 된다. 메모리 어딘가에 생성된 상태가 되는 것이다. [차후에 이야기하겠지만, 리터럴이 생성되는 공간과 변수가 생성되는 공간은 다른 메모리 상에서 생성된다. ]

 

우리는 이러한 1을 able의 공간에 넣어주는 행위를 초기화한다고 한다. 그리고 이러한 초기화 과정은 여러번 일어날 수 있다.

 

able = 1;
able = 2;
able = 3;

이러한 코드가 온다면 초기화가 3번 일어난 것이다. 

( * 그러면 왜 값을 대입하는 것을 할당이라 안 하고 '초기화'라 하는 것인가? => 이 부분에 대한 답은 메모리를 이루고 있는 하드웨어적 요소를 생각하면 초기화란 단어가 자연스럽게 와닿게 된다. RAM은 기본적으로 휘발성 메모리로 전기가 계속 인가되어 있는 동안에는 기존에 가지고 있던 정보가 유지된다. 하지만 전기가 끊기면 날라간다. 우리는 이러한 여러 특성을 활용해서 메모리를 지웠다 썼다 를 할 수 있는 것이다. 그러면 새로운 데이터가 와서 새롭게 저장하려면 리셋을 한 뒤에 다시 데이터를 써야 하지 않겠는가? 그러한 이유에서 메모리가 초기화된다고 이야기할 수 있다. ) - 이는 이해를 위해 생략된 부분이 많으므로 반드시 공부가 깊어짐에 따라 한번 다시 생각해보길 바란다.

 


 

1. 자바란 무엇인가?


Java는 범용 프로그래밍 언어로 썬 마이크로 시스템즈(Sun Microsystems)에서 개발한 언어이다. 현재는 오라클(Oracle)에서 소유권을 가지고 있으며 유료화가 진행된 상태이다. 자바의 가장 큰 특징 중 하나는 플랫폼에 귀속되지 않는 다는 점이다. 코딩을 한번 하고 어떤 플랫폼이던지 간에 사용할 수 있게 만들어졌다. 이는 JVM이라 하는 자바가상머신을 이용해서 플랫폼에 관계 없이 사용할 수 있다. 이러한 특징으로 인해 자바는 많은 인기를 얻게 되었는데, 이는 프로그래밍 언어 순위 차트를 다루는 TIOBE에 가서 확인해도 높은 순위에 있는 것을 확인할 수 있다. 

 

1순위는 C언어, 2순위는 Java, 3순위는 Python이다. 만약에 프로그래밍이 처음이라면 개인적으로 Python을 추천한다. (아니 왜 방금 전까지 Java짱짱맨 해놓고선 Python이라뇨? 정말로 프로그래밍 자체가 처음이라면 순위보다는 일단 입문을 python으로 시작하라는 것이다. 비교적 쉬운 python을 통해 접근해보고 난이도를 낮춘 뒤에 다시 Java를 접근하는 것을 추천한다. 내가 필요한 건 모래성 쌓기인데, 갑자기 중장비 끌고 와서 고층 빌딩을 지을 순 없지 않겠는가? 그렇기에 프로그래밍 경험이 전무하다면 차라리 Python이 낫다는 것이다. 물론 읽는 것을 좋아하며, 수학을 좋아하고 딱딱한 이과감성을 사랑하는 사람이라면 Java, C, C++을 추천한다. 그렇지 않다면 일단은 Python을 통해 경험한 뒤에 들어와도 늦지 않다. 어차피 프로그래밍으로 입문해서 전문가까지 가려는 사람이라면 모든 언어는 다 써봐야 한다. 직업으로 일하려면 상황에 맞는 언어를 사용해야 하므로 언제나 다양한 언어가 필요한 것이다. 고로 결론. 시작은 Python을 추천한다.)

 

C/C++에서 Java로 넘어오면서 아주아주아주 편해진 점 중 하나는 메모리 관리의 자유로움이었다. C/C++가 개발자에게 많은 자유를 주는 만큼 주의해야 할 점이 많았는데, 대표적으로 메모리 관리이다. 그래서 C/C++는 초보자가 진입하기 어려운 장벽이 생겨버렸지만, 그만큼 성능 좋은 코드를 짤 수 있게 되었다. 하지만 현대의 하드웨는 이미 끝을 달리고 있다. 그러므로 우리는 하드웨어를 신경쓸 것이 아니라 내 생각을 구현하는게 더 중요해졌다. 그래서 자동으로 메모리 관리를 해주는 프로그래밍 언어를 쓸 필요성이 있는 것이다. Java와 파이썬은 그러하다.

 

2. 자바의 기본 로고


자바의 기본 로고는 이렇게 생겼다. 커피에 있는 자바인가? 그렇다. 필자도 대학교에서 C/C++를 하고 Java를 처음으로 선택했다. 이유는 로고가 그럴싸해서이다. 현재 자바는 오라클이 소유하고 있으며 유료화가 진행됬다. 그렇다고 무조건 유료는 아니다. 오픈소스가 존재한다. 우리는 오픈소스를 활용해서 진행하려고 한다. 

 

 

3. 설치 및 실행


jdk.java.net/15/

 

JDK 15.0.2 GA Release

JDK 15.0.2 General-Availability Release This page provides production-ready open-source builds of the Java Development Kit, version 15, an implementation of the Java SE 15 Platform under the GNU General Public License, version 2, with the Classpath Exce

jdk.java.net

이곳을 통해서 Java를 받으면 된다. JDK15를 기준으로 진행할 예정이므로 우리도 JDK 15를 받아주면 된다. 

대부분은 윈도우를 사용하고 있으므로 윈도우로 다운로드 받으면 된다. (참고로 여기는 Zip파일이다. 우리가 평소에 받던 exe파일이 아니라 자동 설치따윈 없다. ) 다운로드 받은 뒤에 원하는 장소에 압축을 풀어준다.

필자는 C를 사랑하는 사람이므로 C에다가 Java폴더를 만들어준 뒤에 압축을 풀어주었다. (정확한 이유는 D는 하드드라이브이기 때문에 SSD인 C에다가 풀어주었다.)

 

다 풀고 나면 C:\java\jdk-15.0.2 이러한 형태로 나오게 된다. 

자 이제 안타깝게도 자바를 사용하려면 바로 쓸 수 없다. 물론 바로 사용은 가능하다. 하지만 명령프롬프트를 사용해서 직접 실행파일이 있는 곳으로 끌고 가야 한다. 그래도 한번 해보자.

 

명령프롬프트를 사용하려면 

 

시작버튼 옆에 검색라인에 cmd라 타이핑하자. 그러면 명령프롬프트가 나온다. 명령프롬프트에다가 다음을 입력해보자.

 

cd.. 은 폴더의 하위 폴더로 가게 해준다. 그리고 아까 압축해제한 폴더에서 C:\java\jdk-15.0.2\bin를 찾아둔다. 그리고 cd C:\java\jdk-15.0.2\bin을입력하면 위에 상황과 같이 된다. 

 

여기에 두 가지 명령어를 입력해볼 수 있는데, java -version과 javac이다.

javac는 java의 컴파일러로 우리가 코딩을 해놓은 소스코드를 실행가능한 파일로 바꿔주는 역할을 한다. java 명령어는 바꿔놓은 파일을 java를 통해 실행할 수 있게끔 한다. (일반적으로 윈도우 환경에서 IDE를 사용하게 되면 이러한 내용은 몰라도 상관없다. 하지만 서버환경에서나 IDE가 없는 경우는 이렇게 컴파일하고 실행해야 한다. 그래서 한번은 이렇게라도 진행해보는 것이 중요하다. ) 

* IDE는 통합개발툴인데, 비주얼 스튜디오, 비주얼 스튜디오 코드, 인텔리제이와 같은 것을 의미한다.

 

자 그렇다면 매번 이렇게 귀찮게 실행해야 하는가 싶지만 그렇지 않다. 우리는 환경변수를 활용해서 자바가 설치된 폴더까지 안 가더라도 언제 어디서든 사용할 수 있도록 만들어 줄 것이다. 일반적으로 환경변수는 PATH를 설정해준다고 하는데, 컴퓨터한테 자바가 어디에 설치되어 있는지 알려주는 이정표 역할을 해주는 것이다. 

 

4. 자바 환경변수 설정하기


자바 환경변수 설정에는 명령프롬프트를 활용하는 방법과 시스템 환경설정을 통해서 하는 방법이 있는데, 명령프롬프트를 이용한 방법은 명령프롬프트가 꺼지면 초기화된, 시스템 환경설정을 이용해서 진행하도록 한다.

 

제어판 -> 시스템 정보 -> 고급 시스템 설정을 클릭한다.  [혹은 내 컴퓨터(내 PC) -> 오른쪽 클릭 -> 속성]

 

고급 시스템 설정을 클릭한 뒤에 -> 환경변수를 눌러준다. 

그 뒤에 새로 만들기를 눌러준다.

 

 

시스템 변수 편집에서 변수 이름에는 JAVA_HOME을 적어주고 변수 값에는 Java가 설치된 공간을 넣어주면 된다. 컴퓨터에게 자바가 여기에 설치되어 있다고 알려주는 것이다. 경로에 대한 변수를 할당하며, 그 변수는 JAVA_HOME이다. 대부분의 Java IDE 가 JAVA_HOME을 쓰고 있으므로 우리도 그에 따라 맞춰서 저장한다.

 

그 다음으로 Path를 입력할 것이다. 

Path를 눌러주고 편집을 누르자.

 

그러면 이렇게 나오게되는데, 

여기서 %JAVA_HOME%bin 을 입력해주자. 이것은 아까 저장한 JAVA_HOME이라는 변수에는 자바가 어디에 설치되어 있는지 알려주는 경로가 들어있다. 그곳에서 bin폴더가 있는 곳을 알려주는 것이다. (여기서 bin의 의미는 binary의 bin이다. 일반적으로 실행파일의 의미를 가지고 있다. 그래서 실행파일의 위치는 여기에 있다. 라고 알려준 것이다.)

 

여기까지만 해도 충분히1. 자바란 무엇인가?

Java는 범용 프로그래밍 언어로 썬 마이크로 시스템즈(Sun Microsystems)에서 개발한 언어이다. 현재는 오라클(Oracle)에서 소유권을 가지고 있으며 유료화가 진행된 상태이다. 자바의 가장 큰 특징 중 하나는 플랫폼에 귀속되지 않는 다는 점이다. 코딩을 한번 하고 어떤 플랫폼이던지 간에 사용할 수 있게 만들어졌다. 이는 JVM이라 하는 자바가상머신을 이용해서 플랫폼에 관계 없이 사용할 수 있다. 이러한 특징으로 인해 자바는 많은 인기를 얻게 되었는데, 이는 프로그래밍 언어 순위 차트를 다루는 TIOBE에 가서 확인해도 높은 순위에 있는 것을 확인할 수 있다. 

 

 

 

1순위는 C언어, 2순위는 Java, 3순위는 Python이다. 만약에 프로그래밍이 처음이라면 개인적으로 Python을 추천한다. (아니 왜 방금 전까지 Java짱짱맨 해놓고선 Python이라뇨? 정말로 프로그래밍 자체가 처음이라면 순위보다는 일단 입문을 python으로 시작하라는 것이다. 비교적 쉬운 python을 통해 접근해보고 난이도를 낮춘 뒤에 다시 Java를 접근하는 것을 추천한다. 내가 필요한 건 모래성 쌓기인데, 갑자기 중장비 끌고 와서 고층 빌딩을 지을 순 없지 않겠는가? 그렇기에 프로그래밍 경험이 전무하다면 차라리 Python이 낫다는 것이다. 물론 읽는 것을 좋아하며, 수학을 좋아하고 딱딱한 이과감성을 사랑하는 사람이라면 Java, C, C++을 추천한다. 그렇지 않다면 일단은 Python을 통해 경험한 뒤에 들어와도 늦지 않다. 어차피 프로그래밍으로 입문해서 전문가까지 가려는 사람이라면 모든 언어는 다 써봐야 한다. 직업으로 일하려면 상황에 맞는 언어를 사용해야 하므로 언제나 다양한 언어가 필요한 것이다. 고로 결론. 시작은 Python을 추천한다.)

 

 

 

2. 자바의 기본 로고

 

자바의 기본 로고는 이렇게 생겼다. 커피에 있는 자바인가? 그렇다. 필자도 대학교에서 C/C++를 하고 Java를 처음으로 선택했다. 이유는 로고가 그럴싸해서이다. 현재 자바는 오라클이 소유하고 있으며 유료화가 진행됬다. 그렇다고 무조건 유료는 아니다. 오픈소스가 존재한다. 우리는 오픈소스를 활용해서 진행하려고 한다. 

 

 

 

 

 

3. 설치 및 실행

jdk.java.net/15/

 

JDK 15.0.2 GA Release

 

JDK 15.0.2 General-Availability Release This page provides production-ready open-source builds of the Java Development Kit, version 15, an implementation of the Java SE 15 Platform under the GNU General Public License, version 2, with the Classpath Exce

 

jdk.java.net

이곳을 통해서 Java를 받으면 된다. JDK15를 기준으로 진행할 예정이므로 우리도 JDK 15를 받아주면 된다. 

 

 

대부분은 윈도우를 사용하고 있으므로 윈도우로 다운로드 받으면 된다. (참고로 여기는 Zip파일이다. 우리가 평소에 받던 exe파일이 아니라 자동 설치따윈 없다. ) 다운로드 받은 뒤에 원하는 장소에 압축을 풀어준다.

 

필자는 C를 사랑하는 사람이므로 C에다가 Java폴더를 만들어준 뒤에 압축을 풀어주었다. (정확한 이유는 D는 하드드라이브이기 때문에 SSD인 C에다가 풀어주었다.)

 

 

 

다 풀고 나면 C:\java\jdk-15.0.2 이러한 형태로 나오게 된다. 

 

자 이제 안타깝게도 자바를 사용하려면 바로 쓸 수 없다. 물론 바로 사용은 가능하다. 하지만 명령프롬프트를 사용해서 직접 실행파일이 있는 곳으로 끌고 가야 한다. 그래도 한번 해보자.

 

 

 

명령프롬프트를 사용하려면 

 

시작버튼 옆에 검색라인에 cmd라 타이핑하자. 그러면 명령프롬프트가 나온다. 명령프롬프트에다가 다음을 입력해보자.

 

 

cd.. 은 폴더의 하위 폴더로 가게 해준다. 그리고 아까 압축해제한 폴더에서 C:\java\jdk-15.0.2\bin를 찾아둔다. 그리고 cd C:\java\jdk-15.0.2\bin을입력하면 위에 상황과 같이 된다. 

여기에 두 가지 명령어를 입력해볼 수 있는데, java -version과 javac이다.

 

javac는 java의 컴파일러로 우리가 코딩을 해놓은 소스코드를 실행가능한 파일로 바꿔주는 역할을 한다. java 명령어는 바꿔놓은 파일을 java를 통해 실행할 수 있게끔 한다. (일반적으로 윈도우 환경에서 IDE를 사용하게 되면 이러한 내용은 몰라도 상관없다. 하지만 서버환경에서나 IDE가 없는 경우는 이렇게 컴파일하고 실행해야 한다. 그래서 한번은 이렇게라도 진행해보는 것이 중요하다. ) 

 

* IDE는 통합개발툴인데, 비주얼 스튜디오, 비주얼 스튜디오 코드, 인텔리제이와 같은 것을 의미한다.

 

 

 

자 그렇다면 매번 이렇게 귀찮게 실행해야 하는가 싶지만 그렇지 않다. 우리는 환경변수를 활용해서 자바가 설치된 폴더까지 안 가더라도 언제 어디서든 사용할 수 있도록 만들어 줄 것이다. 일반적으로 환경변수는 PATH를 설정해준다고 하는데, 컴퓨터한테 자바가 어디에 설치되어 있는지 알려주는 이정표 역할을 해주는 것이다. 

 

 

 

4. 자바 환경변수 설정하기


자바 환경변수 설정에는 명령프롬프트를 활용하는 방법과 시스템 환경설정을 통해서 하는 방법이 있는데, 명령프롬프트를 이용한 방법은 명령프롬프트가 꺼지면 초기화된, 시스템 환경설정을 이용해서 진행하도록 한다.

 

제어판 -> 시스템 정보 -> 고급 시스템 설정을 클릭한다. [혹은 내 컴퓨터(내 PC) -> 오른쪽 클릭 -> 속성]

 

고급 시스템 설정을 클릭한 뒤에 -> 환경변수를 눌러준다. 

 

 

그 뒤에 새로 만들기를 눌러준다.

 

 

 

시스템 변수 편집에서 변수 이름에는 JAVA_HOME을 적어주고 변수 값에는 Java가 설치된 공간을 넣어주면 된다. 컴퓨터에게 자바가 여기에 설치되어 있다고 알려주는 것이다. 경로에 대한 변수를 할당하며, 그 변수는 JAVA_HOME이다. 대부분의 Java IDE 가 JAVA_HOME을 쓰고 있으므로 우리도 그에 따라 맞춰서 저장한다.

 

 

 

그 다음으로 Path를 입력할 것이다. 

Path를 눌러주고 편집을 누르자.

 

그러면 이렇게 나오게되는데, 

 

여기서 %JAVA_HOME%bin 을 입력해주자. 이것은 아까 저장한 JAVA_HOME이라는 변수에는 자바가 어디에 설치되어 있는지 알려주는 경로가 들어있다. 그곳에서 bin폴더가 있는 곳을 알려주는 것이다. (여기서 bin의 의미는 binary의 bin이다. 일반적으로 실행파일의 의미를 가지고 있다. 그래서 실행파일의 위치는 여기에 있다. 라고 알려준 것이다.)

 

여기까지만 해도 java는 실행이 되지만 추가적으로 classpath가 들어있다. 클래스 파일의 경로를 알려주는 것으로 환경변수로 마찬가지로 관리한다. 자동으로 등록되기도 하지만, 환경변수로 등록해보도록 하자.

 

다시 한번 새로 만들기를 누르고

CLASSPATH와 %JAVA_HOME%\lib를 등록해주자.

'\' 이 문자는 Enter 위에 존재한다. 자주 쓰이므로 잘 기억해두도록 하자.

 

자 이제 등록이 끝났다.

잘 되었는지 확인하려면 아까와 같이 명령프롬프트를 켜고! javac 혹은 java -version을 입력하면 된다. 그리고서 정상 메시지가 출력되면 설정은 완료된 것이다. 

 

자바가 설치되어 있는 곳까지 가지 않더라도 같은 메시지가 나오는 것을 확인할 수 있을 것이다.

이런식으로 D폴더에 위치하고 있어도 잘 나오는 것을 확인할 수 있다. 컴퓨터에게 경로를 잘 알려주고 있는 것이다. 

 

+ Recent posts