본문 바로가기
> 개발/JAVA

자바.java와 .class, 터미널에서 자바 컴파일과 실행하기

by @일리 2023. 7. 10.

처음에 정보처리기사 시험 공부를 위해 자바 기초 공부를 시작했다. 그러다가 객체 지향 프로그래밍의 특성을 이해하려면 자바스크립트보다는 자바를 깊게 공부해야겠다고 생각했다. 오버라이딩이 뭔지 이해가 안갔다가 자바 코드를 보고서 뭔지 이해를 했기 때문이었다. 게다가 요새 채용 공고를 보면 SI, 솔루션 쪽에서는 자바스크립트 + 자바 + 익스프레스 + 데이터베이스를 요구하는 경우가 많았다. 그래서 자바를 열심히 공부하기로 했다.

 

옛날에 자바스크립트조차 몰랐을 때는 '자바'와 '자바스크립트'가 같은 것 또는 비슷한 것이지 않을까 생각했었다. 왜냐하면 이름이 비슷하니깐 연관이 있을 거라 제대로 착각했다. 자바스크립트로 프로그래밍 공부를 시작해서, 자바를 공부하고 있는 지금에서야 '자바'와 '자바스크립트'가 얼마나 다른지 체감이 된다!! 자바는 C언어와 비슷하다. 자바스크립트와는 전혀 다르다. 

 

자바는 코드를 작성 후 실행파일을 만드는 컴파일러 언어이고, 자바스크립트는 실행파일을 생성하지 않는다.

자바는 데이터의 타입을 하나하나 설정해줘야 하지만, 자바스크립트는 데이터 타입을 추론한다.

자바에서는 프로그램의 시작점을 알리는 Main 함수가 필수적으로 필요하지만, 자바스크립트는 그러한 제약 조건이 없다.

자바에서는 세미콜론을 항상 명시해줘야 하지만, 자바스크립트에서는 세미콜론을 누락해도 작동한다.

 

현재 공부하면서 느껴지는 큰 차이는 이 정도이다. 지난 학기에 C언어를 공부했고, 자바를 이번에 공부하면서 많은 개발자들이 처음 자바스크립트를 접했을 때 그 자유로움에 얼마나 놀랐을지 상상이 간다. 때때로 자바스크립트를 보고 '이게 언어야?' 라며 비판하는 개발자들을 보고 '왜 그러지?' 싶었는데 어떤 마음으로 그런 비판을 했는지 알 것 같다. 큐큐 무튼 자바도 차근차근 공부해봐야징!!

 

공부는 JAVA 11.0.19, 인텔리제이 IntelliJ IDEA 2023.1.3 (Community Edition) 버전을 가지고 한당!

포스팅은 패스트캠퍼스에서 자바 강의를 들으면서 내 방식대로 정리한 내용을 공유할 예정이다. 강의를 열심히 들을 건 아니고(몇 번 경험해보니 강의를 듣는 것보단 강의에 나온 개념을 스스로 정리하고 공부하는 게 효과적이란 걸 깨달았따....) 강의에 나온대로 똑같이 정리하는 게 아니라 큰 틀은 따라가되 내가 알아본 내용으로 정리하거나 배우면서 궁금했던 점이 있으면 그 내용을 다루는 식으로 포스팅할 것이다

^ㅇ^내가 나를 관찰해보니 공부를 하면서 포스팅할 때 공부 효율이 가장 좋다. 그럼 시작~~

클래스

자바에서는 일반적으로 소스 코드 파일(.java)에 클래스를 만든다. 각 소스 코드 파일은 하나 이상의 클래스 정의를 포함할 수 있다. 보통 파일 하나당 하나의 클래스를 가지는 것이 원칙이다. 이때 소스코드 파일의 이름과 클래스의 이름은 동일해야 한다. 클래스의 이름을 적을 때 첫 글자는 대문자로 쓰는 것이 일반적이다. 소스코드 파일들은 src 폴더 내에 위치한다. 

 

.java로 저장되는 소스파일은 사람이 이해할 수 있는 고급 언어다. .java 파일은 컴파일러 과정을 통해서 기계가 이해할 수 있는 바이트 코드(0, 1로 표현된 코드)로 변환된다. 바이트 코드가 저장되는 곳이 .class 파일이다. .class 파일은 out 폴더 안에 저장된다. 그리고 바이트 코드는 JVM(Java Virtual Machine)에서 실행된다.

간단 정리!

정리하면 소스파일 -> .java로 저장, src 폴더 내에 위치

실행 가능한 파일 -> .class(byte code), out 폴더 내에 위치

자바의 메인 함수

메인함수 정보
메인함수

public class Main {
    public static void main(String[] args) {

       int a,b, sum; // 1. 한번에 데이터 타입 명시하기 
       
       int a;
       int b;
       int sum;  // 2. 하나씩 데이터 타입 명시하기
    }
}

사칙연산 수행하기

public class Calculator {
    public static void main(String[] args){

        int a,b, add, subtract, multiply, divide ;
        
        a = 15;
        b = 5;
        
        add = a + b;
        subtract = a - b;
        multiply = a * b;
        divide = a / b;

        System.out.println("a+b=" + add); // 또는 "a+b=" + (a+b)
        System.out.println("a-b=" + subtract); // 또는 "a-b=" + (a-b)
        System.out.println("a*b=" + multiply); // 또는 "a*b=" + (a*b)
        System.out.println("a/b=" + divide); // 또는 "a/b=" + (a/b)

    }
}

결과는 터미널창처럼 생긴 곳에 이렇게 나온다. 

Calculator 결과
영어 폰트가 너무 귀엽다!!!

소스코드를 실행하기 위해 ▶️ 버튼을 누르면 간편하게 컴파일부터 실행까지 완료된다.

터미널에서 수동으로 컴파일 & 실행하기

만약 터미널로 소스코드를 컴파일하고, 실행하고 싶다면 다음과 같이 진행하면 된다.

 

1. src 폴더에서 [javac -d ../out/production/폴더이름 파일명.java] 

 - .class 파일이 위치한 폴더에 .java 파일을 컴파일한 .class 파일을 생성한다.

2. .class 파일이 저장된 폴더로 이동해서 [java 클래스파일명] 작성

- .class는 제외하고 HelloJava와 같은 식으로 파일명을 써주면 된다.

터미널에 Hello,World! Hello,Java! 가 출력되었다
터미널에 결과가 나왔당~!

만약 -d ../out/production/폴더이름 을 해주지 않으면 src 폴더 내에 .class 파일이 생성된다. 

잘못된 곳에 위치한 .class 파일
.class의 위치는 src가 아니닷!

 

강의에서는 javac.exe와 java.exe 명령어를 사용하던데 나는 Command not found 명령어가 떠서 다른 방법을 찾아보았당! .exe인걸 보니 강사분이 윈도우라 맥을 사용하는 나한테는 명령어가 적용이 안되는 듯하다. 참고로 강의에서 알려준 방법은 하단과 같다.

 

1. 컴파일

javac.exe -d ../out/production/폴더명 HelloWorld.java

 

2. 실행

java.exe -classpath ../out/production/폴더명 HelloWorld

댓글