라벨이 Java인 게시물 표시

[Java] JDK 환경 변수 설정

Java 환경변수 설정에 앞서 JDK가 설치되어 있어야 한다. JDK 설치하기 바로가기!!! JDK 설치가 완료 되었으면 환경 변수 설정을 해줘야 한다. Win + PAUSE 키를 눌러서 창이 뜨면 "고급 시스템 설정" 메뉴를 선택한다. 메뉴 선택 시 뜨는 창에서 "환경 변수" 버튼을 클릭한다. 버튼 클릭 시 뜨는 창을 보면 위쪽은 "사용자 변수", 아래쪽은 "시스템 변수" 부분으로 나뉘어 있다. 이 중 "시스템 변수" 부분의 "새로 만들기" 버튼을 누른다. 변수 이름 부분에는 'JAVA_HOME'을 입력하고, 변수 값에는 자바 경로를 입력한 후 확인 버튼을 누른다. (자바 경로는 디폴트로 설치 하였다면 "C:\Program Files\Java\jdk1.8.0_45"(버전은 다르다.)와 같다.) 'JAVA_HOME'이라는 환경 변수가 추가되었으면 이어서 환경 변수 중 'Path'를 선택하고 '편집' 버튼을 누른다. 그럼 기존에 입력되어있는 변수 값이 있을텐데 이 값의 맨 뒤에 ";%JAVA_HOME%\bin"이라고 입력해준다. 이렇게 하면 나중에 JDK를 업데이트하여 폴더에 버전이 바뀌더라도 'JAVA_HOME'에 있는 버전만 수정해주면 Path 부분은 수정하지 않아도 된다. 그리고 이클립스나 넷빈 같은 IDE 개발툴을 사용하면 상관없지만 에디트 플러스나 울트라 에디트로 개발을 한다면, Path 외에 CLASSPATH도 설정해 주어야 하는데 Path 설정은 위와같이 하면 되고 CLASSPATH 설정 방법은 다음과 같다. 마찬가지로 "시스템 변수" 부분의 "새로 만들기" 버튼을 누른다. 변수 이름 부분에는 'CLASSPATH'를 입력하고, 변수 ...

[Java] Java Development Kit(JDK) 설치

이미지
자바 프로그래밍을 하기 위해선 JDK(Java Development Kit) 즉, 자바 개발자 도구가 필요하다. JDK는 오라클 홈페이지에서 무료로 다운이 가능하며 오라클 메인 페이지 주소는 이렇다. https://www.oracle.com/ 오라클 홈페이지에 접속하면 메인 페이지에서 Products -> Software (Java) 메뉴를 선택한다. (홈페이지야 언제든지 바뀔 수 있겠지만 구성은 크게 바뀌지 않을 것이다.) 메뉴 선택 시 보여지는 페이지에서 JDK 설치 파일 다운로드 가능하다. 하지만, 주의할 점이 있다. Important Oracle JDK License Update The Oracle JDK License has changed for releases starting April 16, 2019. The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK licenses. The new license permits certain uses, such as personal use and development use, at no cost -- but other uses authorized under prior Oracle JDK licenses may no longer be available. Please review the terms carefully before downloading and using this product. An FAQ is available here. Commercial license and support is available with a low cost Java SE Subscription. Oracle also provides the latest OpenJDK release und...

[Java] 문자열로 된 수식 계산하기

원문 출처 - http://unikys.tistory.com/226 자바 1.6 이상에서는 Javascript 엔진을 이용하여 문자열로 된 수식 계산이 가능하다고 한다. (자바스크립트의 eval 함수와 같은 기능의 함수가 있다.) import javax.scrit.ScriptEngineManager; import javax.script.ScriptEngine; public class Test { public static void main(String[] args) throws Exception { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("JavaScript"); String foo = "((3+2)*4) * (2+3)"; System.out.println(engine.eval(foo)); } }

[Java] import와 관련하여 성능상의 차이

출처 - 자바의 정석(남궁 성 지음) 클래스 이름을 지정해주는 대신 '*'을 사용하면, 컴파일러는 해당 패키지에서 일치하는 클래스 이름을 찾아야 하는 수고를 더 해야 할 것이다. 단지 그 뿐이다. 실행 시 성능상의 차이는 전혀 없다.

[Java] 변수의 종류

출처 - 자바의 정석 (남궁 성 지음) class Variables { int iv; static int cv; void method() { int lv = 0; } } iv와 cv는 멤버변수(클래스에 소속된 변수)이고, 그 중에 iv는 멤버변수이면서 인스턴스 변수이고, cv는 멤버변수이면서 클래스 변수(static 변수, 공유변수)이다. lv 처럼 Method에 속한 변수는 지역 변수라고 한다.

[Java] JVM의 피연산자 스택의 피연산자 저장 단위

출처 - 자바의 정성 (남궁 성 지음) JVM의 피연산자 스택(operand stack)이 피연산자를 4 byte 단위로 저장하기 때문에 크기가 4 byte보다 작은 자료형(byte, short)의 값을 계산할 때는 4 byte로 변환하여 연산이 수행된다. 그래서 오히려 int를 사용하는 것이 더 효율적이다. 이 말인즉슨 short를 사용하여 2 byte 짜리 변수를 선언한다 하더라도 이 변수가 계산에 씌이는 피연산자가 될 경우 JVM은 short변수를 피연산자 스택에 저장하면서 4 byte 로 저장하기 때문에 메모리 절약을 위해서 short 변수를 선언한거라면 메모리 절약에 전혀 도움이 되지 않는다. 게다가 형변환까지 해야 되므로 오히려 손해이다. C언어도 이렇게 된다고... 어디서 본 것 같은데... 정확히는 모르겠다.

[Java] 이름 없는 패키지

출처 - 자바의 정석(남궁 성 지음) 소스파일에 자신이 속할 패키지를 지정하지 않은 클래스는 자동적으로 '이름 없는 패키지'에 속하게 된다. 결국 패키지를 지정하지 않는 모든 클래스들은 같은 패키지에 속하는 샘이 된다.

[Java] 클래스 변수와 인스턴스 변수의 초기화 순서

출처 - 자바의 정석(남궁 성 지음) 클래스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭 인스턴스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자

[Java] JVM의 메모리구조

출처 - 자바의 정석 (남궁 성 지음) 1. 메서드 영역(method area) 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래스 변수(class variable)도 이 영역에 함께 생성된다. 2. 힙(heap) 인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스 변수(instance variable)들이 생성되는 공간이다. 3. 호출스택(call stack 또는 execution stack) 호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간경로가 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워진다. 각 메서드를 위한 메모리상의 작업공간은 서로 구별되며, 첫 번째로 호출된 메서드를 위한 작업공간이 호출스택의 맨 밑에 마련되고, 첫 번째 메서드 수행 중에 다른 메서드를 호출하게 되면, 첫 번째 메서드의 바로 위에 두 번째로 호출된 메서드를 위한 공간이 마련된다. 이 때 첫 번째 메서드는 수행을 멈추고, 두 번째 메서드가 수행되기 시작한다. 두 번째로 호출된 메서드가 수행을 마치게 되면, 두 번째 메서드를 위해 제공되었던 호출스택의 메모리 공간이 반환되며, 첫 번째 메서드는 다시 수행을 계속하게 된다. 첫 번째 메서드가 수행을 마치면, 역시 제공되었던 메모리 공간이 호출스택에서 제거되며 호출스택은 완전히 비워지게 된다. 호출스택의 제일 상위에 위치하는 메서드가 현재 실행 중인 메서드이며, 나머지는 대기상태에 있게 된다. 따라서, 호출스택을 조사해 보면 메서드 간의 호출관계와 현재 수행중인 메서드가 어...

[Java] this 참조변수

출처 - 자바의 정석 (남궁 성 지음) class Car{ private String color; private String gearType; private int door; Car(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } } 위의 코드에서처럼 생성자의 매개변수(지역변수)의 변수명과 인스턴스 변수명이 동일하면 this.으로 인스턴스 변수와 매개변수를 구분지어 준다. this.color = color; 대신 color = color;으로 하면 둘 다 매개변수(지역변수)로 간주된다. this는 참조변수로 인스턴스 자신을 가리킨다. 따라서, this를 사용할 수 있는 멤버는 인스턴스 멤버 뿐이다. static 메서드는 인스턴스를 생성하지 않은 상태에서 호출될 수 있기 때문에 호출된 시점에 인스턴스가 존재하지 않을수도 있기 때문에 static 메서드에서는 this를 사용할 수 없다. this 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다. this(), this(매개변수) - 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.