01-1 프로그래밍 언어와 자바
기계어 : 0,1로 이뤄짐
사람의 언어 : 기계가 이해하기 힘듦
BUT, 둘은 소통해야 함
따라서 사람과 기계의 소통을 위해 프로그래밍 언어가 필요
*프로그래밍 언어로 작성된 파일이 소스파일
사람과 기계의 소통 방법 :
사람이 프로그래밍 언어로 '소스파일' 작성
컴퓨터가 이해할 수 있게 '컴파일'
기계어로 번역된 것에 따라 실행됨
Q. 컴파일과 디버깅이 대체 뭐지?
컴파일 : 프로그래밍 언어 -> 기계어로 번역
링킹 : 소스코드와 필요 라이브러리를 연결
디버깅 : 모의 실행으로 코드의 오류를 찾는 것
빌드 : 위의 과정을 거쳐 실행파일을 실행하는 것
소스코드 -> 컴파일 -> 링킹 -> 실행파일 실행이 빌드의 과정!
cf. 디버깅은 IDE에서만 일어나는 것이 아니다. 사람이 버그가 생긴 코드를 찾아내는 것도 디버깅이라고 함
자바 장점 :
- 모든 운영체제에서 실행 가능 (윈도우에서 개발된 것을 수정하지 않아도 리눅스에서 사용할 수 있음)
- 객체지향 프로그래밍
- 메모리 자동 정리
자바 설치
※ 과거의 아픈 기억을 되풀이하지 않기 위해.. 이번엔 버전&과정 상세히 기록했음
자바 버전 : jdk-11.0,15_windows-x64_bin.exe
자바를 '개발'을 위한 '도구' : JDK - Java Development Kit
환경변수 설정 : 어느 위치에서든 파일을 실행할 수 있게 ①변수를 만들고 ②Path에 등록하는 과정 필요
①변수 만들기
변수명 : JAVA_HOME
경로 : C:\Program Files\Java\jdk-11.0.15.1
②Path에 등록하기
* Path에 등록할 때는 자바 파일 안의 bin파일로 경로 등록해야 bin안의 자바 실행파일(ex. javac)들이 작동할 수 있음
따라서 Path 등록 경로 : %JAVA_HOME%\bin
이때 %변수명%는 해당 변수의 값을 사용한다는 의미
* 다른 블로그에서 시스템 변수랑 사용자 변수는 큰 차이 없다고 했는데 일단 둘 다 시스템 변수에서 하긴 했음
캡처된 사진처럼 되면 성공
의미 : 자바 안의 bin 파일이 아닌데도 javac 명령어가 돌아감 => 경로 상관없이 실행됨 => 환경변수의 목적 달성됨
01-2 이클립스 개발환경 구축
이클립스 설치 : 이클립스는 버전이 엄청 중요하진 않은 것 같다.
이클립스 다운로드 후 관리자 권한으로 실행 -> Eclipse IDE for Enterprise Java and Web 선택
installation Folder를 C:\Program Files로 변경
이후 모든 항목 체크
뷰 : 이클립스 내부의 작은 창
퍼스펙티브 : 뷰의 구성을 묶어 이름 붙인 것
뷰 구성은 [윈도우]-[퍼스펙티브]-[오픈 퍼스펙티브]에서 변경 가능
OR 우측 상단 버튼으로도 변경 가능 (왼쪽이 java EE 퍼스펙티브, 오른쪽이 java 퍼스펙티브)
01-3 자바 프로그램 개발 과정
개발자가 자바 소스코드 작성 (.java)
컴파일 javac 명령어 실행 (javac= java compiler)
바이트 코드 파일 생성됨 (.class)
java 명령어 실행
JVM(자바 가상 머신)에서 바이트코드가 운영체제에 맞게 번역되어 실행됨
=> JVM 덕분에 개발자는 운영체제를 신경 쓰지 않고 개발할 수 있게 됨
* 이클립스는 소스파일을 저장하면 자동으로 컴파일됨👍
일반 프로그래밍 언어에서는 컴파일러가 소스 코드를 바로 이진코드로 바꾸지만,
자바에서는 컴파일러가 소스코드 -> 바이트코드로 바꾸고 JVM에서 이진 코드로 바뀌는 것
JVM의 최대 장점 : '바이트코드를 운영체제에 맞게 번역'해주기 때문에 개발자는 운영체제를 신경 쓰지 않고 개발할 수 있음
이클립스에서 프로젝트를 생성해보자
프로젝트란 하나의 모듈(외부에서 재사용 가능)이다
▶ 모듈 기술자(module-info.java)
모듈을 정의하는 파일
- 해당 모듈의 이름이 무엇인지
- 해당 모듈이 의존하는 모듈이 무엇인지 (의존성)
- 해당 모듈을 외부에서 어떻게 사용할 수 있는지
모듈에 대한 보안을 강화할 수 있음
▶ 패키지
파일 시스템의 폴더와 비슷
물리적으로 하나의 디렉토리
소스 코드를 기능별로 관리하기 위함
* 따로 옵션을 선택하지 않는 이상 컴파일된 '바이트코드'는 .class로 bin 폴더 안에 저장됨
* 소스코드는 .java로 src 폴더 안에 저장됨
=> 바이트코드는 bin 폴더, 소스코드는 src 폴더에 저장됨
▶ 클래스
자바 소스 파일은 클래스로 이뤄져 있음
클래스와 파일명은 동일해야 함 (이클립스에서는 자동으로 같게 생성해줌)
[자문자답]
Q. 왜 자바에서는 클래스와 파일(소스코드)의 구분이 모호할 정도로 클래스에 기반하여 코드를 작성하는가?
A. 그것이 자바의 작동 원리니까. 당연한 이야기이다.
자바 컴파일러가 소스코드를 바이트코드로 컴파일하고 이를 JVM이 클래스로더로 읽어들임으로서 프로그램이 실행된다.
따라서 파일 안에 적히는 것이 곧 클래스이고
이 클래스에 적힌 내용으로 프로그램이 실행이 되므로
파일과 클래스가 거의 동일하게 취급되는 것 같다.
※ 자바의 작동 원리 ※
1) 자바 컴파일러는 작성한 자바소스, 즉 확장자가 .java인 파일을 바이트코드로 컴파일한다.
2) 컴파일된 바이트 코드를 JVM의 클래스로더에게 전달한다.
3) 클래스로더는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터영역, 즉 JVM의 메모리에 올린다.
*이때 클래스의 정보를 저장하는 곳이 바로 메모리 영역이다.
4) 실행엔진은 JVM메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다.
이러한 자바의 작동 원리 때문에
.java 파일은 내부에 무조건 동명의 클래스를 가져야 한다.
이클립스에서 new class를 누르면 .java 파일이 생성된다.
자바는 파이썬이나 JS 처럼 print( ) 문장 딸랑 하나로 실행되는게 아니라
public class Main { public static void main(String[] args) { ... }} 처럼 클래스가 있어야 실행다.
와 같은 '소스코드와 파일이 명확히 구분되지 않는' 특징들이 나온다고 생각하면 된다.
헷갈림 정리))
이렇게 class를 기반으로 실행되는게 바로 자바이다.
하지만 그렇다고 해서 자바의 클래스가 지금껏 배운 붕어빵 기계 클래스와 다른게 아니다.
자바의 클래스도 함수, 변수를 갖고 데이터 타입으로서 사용되기도 한다.
다만 파이썬처럼 맨 바닥에 적는게 아니라, 클래스 안에서 main( ) 메소드를 이용해 작성하는 것이다!
언어 | python | C++ | JAVA |
실행 조건 | X | int main 함수 안 | 파일명과 같은 이름의 클래스 안의 main 함수 안 |
▶ 실행 (반드시 저장 후!)
초록색 run 버튼 클릭 or
우클릭 [Run As] - [Java Application] or
Ctrl + f11
=> 이클립스가 간단하게 해 둔 거여서 잘은 안 보이지만,
소스 코드를 저장하면 자동으로 바이트 코드가 컴파일이 되고,
이렇게 컴파일된 바이트코드 파일이 실행되는 것!
(저장과 동시에 자동 컴파일해주는 건 이클립스가 제공하는 기능)
▶ 소스코드 분석
자바 파일 ⊃ 클래스 ⊃ 메서드
- '패키지 선언 & 파일명과 동일한 클래스 선언'은 클래스를 생성하면 자동으로 되어있음
- 클래스 안에 메소드가 들어감
* 클래스가 실행되면 가장 먼저 main( ) 메소드가 실행됨 - 최초 실행점
* 실행하려면 반드시 main 메소드가 있어야 함
▶ 주석
한 줄 : //
뭉탱이 : /* ... */
'JAVA > 혼공자' 카테고리의 다른 글
[혼공자] Chapter 05-2 배열 (0) | 2022.07.23 |
---|---|
[혼공자] Chapter 05-1 참조 타입과 변수 (1) | 2022.07.23 |
[혼공자] Chapter 04. 조건문과 반복 (0) | 2022.07.21 |
[혼공자] Chapter 03. 연산자 (0) | 2022.07.21 |
[혼공자] Chapter 02. 변수와 타입 (0) | 2022.07.20 |