아놔. 요즘 배그에 빠져서는 블로그는 나몰라라 하고 있다 ㅠㅠ 매번 쓸때마다 오랜만이긴 한데. 역시나 오랜만이니까 기초지식 다뤄보겠다. 이번에는 자바의 클래스 패스와 그것을 시스템 환경변수에 설정하는 목적에 대해 포스팅 해보겠다. 클래스 패스(Class Path)란?자바 가상머신이 프로그램을 실행할 때, 클래스 파일을 찾는 데에 기준이 되는 파일 경로라고 할 수 있다.즉, 자바 가상머신이 클래스 파일을 찾는 경로다. 물론, 이 클래스 패스는 개발자인 너, 나, 우리가 지정해준다.지정해주지 않으면 자바 가상머신은 현재 디렉토리에서 필요한 클래스들을 가져와서 쓴다. 현재 디렉토리는 현재 명령 프롬프트가 가리키고 있는, 위치하고 있는 그 경로를 말한다. >> java 파일명.class이러한 명령어를 명령 프롬..
자바 메모리 구조 이전 포스트에서 자바의 메모리 구조는 크게 메소드 영역, 힙 영역, 스택 영역으로 나뉘어 있다는 것과, 메소드 영역이 뭔지 살짝 알아봤다. 이번에는 힙 영역과 스택 영역은 뭔지, 각각 어떤 역할을 하는지, 좀 헷갈리니까 친절히 코드로 비교도 해볼까 한다. 2. 스택 영역(Stack Area) 스택 영역에는 지역변수와 매개변수가 저장된다. 그렇담 지역변수는 뭐고, 매개변수는 뭔가여. 한글로 접하니까 오히려 헷갈리는데 지역변수 = 로컬변수(local variable), 매개변수 = 파라미터(parameter)라고 들으면 아~~ 뭐야. 할 것임. 이래도 모르겠으면 로컬변수는 메소드 내에서 선언된 변수들, 매개변수는 메소드에 아규먼트로 넘겨주는 값들로 이해하고 넘어가자. 로컬변수와 매개변수의 ..
다시 힘을내어 포스팅을 해보려고 한다. 아자아자! 비록 구글 너가 애드센스 승인을 빨리 안해주지만 나는 힘을내어 포스팅할거야. 오늘 다루려고 하는 것은 자바의 메모리 구조이다. 메모리 구조가 어떻게 되어 있고, (메모리 구조가 여러 영역으로 나누어져 있는데 그 영역이) 어떻게 다른지를 아주 짧고 간단하게 스쳐지나가듯 짚도록 하겠다. 자바의 메모리 구조 이전 포스트였던가. 자바 가비지 컬렉터를 이야기하면서 JVM이 실행되면 OS가 JVM에게 필요한 메모리를 할당해준다고 했다. 컴퓨터 프로그램이 실행되기 위해 필요한 메모리를 우리는 '메인 메모리'라고 한다. 우리말로는 주기억장치쯤 되시겠다. 물리적으로는 우리가 램(RAM)이라고 부르는 아이다. 이 메인메모리를 관리하는게 OS이고, JVM(자바 버추얼 머신!..
자바의 가비지 컬렉터(Garbage Collector) 즉, 쓰레기 수집 기능을 이해하려면 메모리에 대한 이해가 먼저다.1. 자바 실행 프로그램인 JVM과 메모리메모리는 OS가 관리하는데, 모든 프로그램들은 OS 위에서 돌아간다. 그리고 프로그램이 돌아가려면 당연 메모리가 있어야 한다. 때문에 프로그램들은 OS에게 "나 메모리좀 줘" 하고 요청을 한다. 자바의 실행 프로그램인 JVM도 예외는 아니다. 이 친구도 메모리가 필요하면 OS에게 요청해야한다. 메모리좀 달라고. 그런데 OS가 처음부터 자기가 가진 메모리 전부를 줘버리면, 다른 프로그램들에게 줄 메모리가 없게 된다. 때문에 각 프로그램에게 메모리의 일정부분만 빌려주는(?) 방식으로 관리가 된다. A 프로그램 JVM B 프로그램 - 이렇게 OS가 메..
자바에서 패키지를 사용하지 않고, 다른 클래스에서 정의한 메소드를 사용한다고 해보자. 경로: src/a.javapublic a { public static void wow() { System.out.println("a.class 실행결과로 A가 나왔습니다!"); } } 경로: src/haha/b.java public b { public static void wow() { System.out.println("b.class 실행결과로 B가 나왔습니다!"); } } 이렇게 정의된 자바파일이 있다고 해보자. a.java파일은 src 폴더 바로 밑에 있고, b.java파일은 src폴더 밑에 있는 haha폴더 밑에 있다.그런데 이 두 파일은 모두 'wow'라는 이름의 메소드를 정의하고 있다. 명령창에서 각각 이 두..
java 파일과 class 파일 구분하여 관리하기 왜 구분해야 하지?source code 파일(.java)과 byte code 파일(.class)이 한 폴더에 함께 있는 것은 바람직하지 못하다.배포할 때에는 실행파일인 바이트코드 파일, 즉 class파일만 배포하는데 여기에 소스코드 파일인 java 파일이 섞여 있으면 관리하기가 불편하기 때문이다. 따라서 두 종류의 파일을 서로 다른 폴더로 분리시켜야 한다. 어떻게 구분하지?구분하는 방법은 쉽다.class파일은 컴파일이 완료되면 생성된다. 그 말은 컴파일 할 때 옵션을 줘서 어느폴더에 저장될지 지정해주면 된다는 말씀이다. 폴더를 지정해주기 전에, 그 폴더를 만들어줘야 한다.있지도 않은 폴더에 무언가를 담을 수는 없으니까. 보통은. 일반적으로는. 대부분은.소..
컴파일(Compile)자바 소스코드(source code)를 기계가 이해하기 쉬운 바이트코드(byte code)로 변환하는 것을 컴파일이라고 한다.이런 일을 해주는 놈을 우리는 컴파일러(compiler)라고 부름. 컴파일할 때에는 단순히 바이트코드로 변환만 하는 것이 아니라, 소스코드의 문법을 분석하고, 문법이 유효한지 유효성 검사가 이뤄진다. 문제가 없으면 byte code로 이뤄진 .class 파일이 생성되는데, 문자들이 어떤 방식으로 인코딩이 되냐하면 컴파일할때 사용하는 그 OS의 기본 문자열집합으로 인코딩이 된다. 윈도 운영체제 사용하는 사람들 중에, 소스코드에 한글이 포함된 파일을 컴파일 돌렸을 때 컴파일 에러를 만나본 적이 있을 것이다. 왜 컴파일할 때 문자가 깨지고 에러가 날까?그것은 Win..
.java 파일확장자가 'java'인 파일은 인간이 작성한 source code 파일이다. .class 파일확장자가 'class'인 파일은 source code 인 java파일을 자바 컴파일러를 통해 byte code(target code)로 변환한 byte code 파일이다. 왜 굳이 class파일로 변환한 다음, class파일을 실행시켜야 할까?자바는 먼저 소스코드를 자바 컴파일러를 통해 기계가 쉽게 이해할 수 있는 bytecode로 이뤄진 class파일로 변환한다.*문법: javac 파일명.java참고로, 컴파일 과정에서는 소스코드를 분석하고, 문법의 유효성을 검사를 한다. 이렇게 모든 검열(?)을 마치고서야 class파일을 우리는 얻을 수가 있다. 이렇게 컴파일이라는 것을 하게되면 class파일이..
자바 컴파일러(Java Compiler)자바 소스 코드를 실행시키려면 먼저 기계가 잘 알아들을 수 있는 bytecode로 변환을 시켜야 한다.변환하기 전의 원본 코드인 source code를, 기계에서 실행할 수 있도록 bytecode로 변환하는 일을 하는 프로그램이 바로 자바 컴파일러다. * 요렇게 특정 프로그램에서 실행할 수 있도록 변환한 코드를 'target code'라고 부름. 특정 기계가 없으면 실행할 수가 없다. 이 놈은 Native code를 실행하는 것에 비해 실행 속도가 느린 대신, OS 독립적이라서 어떤 OS에서라도 VM만 설치되어 있으면 실행할 수 있다. JVM(Java Virtual Machine)자바 컴파일러가 변환한 bytecode를 실행시키는 프로그램이다.(bytecode는 p..
JRE(Java Runtime Environment)Java bytecode를 실행할 때 필요한 프로그램들로, 자바 프로그램을 실행하는 일반 사용자를 위한 SW이다. JRE는- Java Virtual Machine(JVM) * JVM은 바이트코드를 실행하는 프로그램이다.- 필수 자바 라이브러리로 구성되어 있다. JDK(Java Development Kit)자바 프로그램을 만드는 개발자가 사용하는 SW이다.JDK에는 자바프로그램을 개발하는데 필요한 프로그램들이 들어 있는데, 당연히 JVM과 필수 자바 라이브러리를 포함한다. 즉, JDK는 JRE를 포함하고 있다.JDK > JRE !!!프로그램을 개발했으면 실행시키고 테스트도 해봐야 하니까... JVM이 있는 것은 당연한거다.다시 정리해서, JDK는- JRE..