JAVA/JAVA Basic 43

[ JAVA ] 열거타입(enumeration type)

열거 타입은 이름마저 생소하다. 열거타입을 사용하는 이유는 무엇일까? 간단히 예를 들어보겠다. '김철수'라는 사람이 있다. 철수는 회사에서 '김대리'라 불리지만 집에서는 '아빠'라 불린다. 그리고 술만 마시면 쩔뚝거리며 걸어서 친구들 사이에서는 '김철뚝'이라고 불린다. 이렇게 '김철수'라는 사람은 상황에 따라 불리는 이름이 다르다. 열거 타입은 하나의 대상이 상황에 따라 다른 값으로 바뀔 필요가 있을 때, 사용하면 간편한 코딩을 할 수 있게 도와준다. 대표적으로, 스레드의 상태(State)는 열거 타입으로 표현된다. 스레드는 한 개지만, 스레드가 상황에 따라 표현되는 상태는 NEW, RUNNABLE, WAITING, TIMED_WAITING, BLOKED, TERMINATED 와 같이 다양하다. 이처럼 ..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] String args[] 존재 이유

public class StringArgs { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); } } String[] args는 무엇일까? args는 arguments의 약자로 '인수'(파라미터)라는 의미다. String[] args의 존재 이유는 main 메소드의 static에서 찾을 수 있다. main 메소드는 static으로 선언된 정적 메소드이다. 정적 메소드(Static) 클래스의 메소드 사용법은 두 가지로 나뉜다. 1. 객체 생성 후 메소드 사용 가장 기..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 참조타입(reference type)

자바 변수 타입에는 두 가지가 있다. 원시 타입(primitive) and 참조 타입(referece) 변수에 '값'을 넣으면 원시 타입이다. 변수에 '주소'를 넣으면 참조 타입이다. 변수에 주소를 넣는 이유가 무엇일까? 출처 입력 JVM은 메모리를 할당받고 메모리 영역을 크게 3가지로 나눈다. 메소드 영역은 객체 생성을 위한 설계도인 클래스를 저장한다. HEAP 영역은 그 클래스를 토대로 만들어진 객체를 저장한다. STACK 영역은 한 스레드(main())가 시작될 때 그 스레드의 흐름에 따라 생성되는 변수를 임시 저장한다. STACK 영역은 스레드가 시작되어야 메모리가 할당된다. 스레드가 얼마나 클지 언제 시작될지도 모르는 영역을 큰 영역으로 잡아놓으면 메모리 낭비다. 그러므로 STACK 영역은 크지..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 이클립스 Failed to init ct.sym 에러 해결 (feat. JAVA SE15) (프로젝트 생성 에러)

이클립스를 설치하고 프로젝트를 생성하자마자 프로젝트에 에러가 난다. Failed to init ct.sym ~~ 이 경우는 이클립스가 JRE 경로를 제대로 인식하지 못해서 발생한다. '이클립스 인스톨러'로 이클립스를 설치하는 과정에서 JVM 경로를 설정할 때 jdk15로 경로를 설정하면 에러가 발생한다. 하지만 jdk14로 경로를 설정하면 에러가 발생하지 않는다. jdk15가 2020.9월에 나온 최신 버전이라 이클립스 인스톨러로 설치 시 호환에 문제가 있는게 아닐까 생각한다. (이유를 모르겠다...) 어쨌든 이런 경우 해결할 수 있는 방법이 세 가지가 있다. 첫 번째 방법 Window 탭에 들어가 Prefereces로 들어간다. java 속성에 installed JREs를 클릭하면 이런 창이 나온다. ..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] 이클립스 설치하기

이클립스 설치하기 JDK 설치와 설정을 완료했으면 이제 '이클립스'를 설치해보자. 우리는 메모장을 갖고 자바코드를 작성하여 JDK를 실행시켰다. 하지만 언제까지 메모장을 이용할 수는 없다. 개발자가 코드를 작성하는데 여러가지 편이를 제공하는 통합개발환경(IDE)을 사용할 시간이다. 이클립스( Elicpse ) https://www.eclipse.org/ 위 링크로 들어가준다. Download 버튼을 연달아 클릭하여 이클립스 인스톨러를 설치한다. 인스톨러는 이클립스와 더불어 '오픈된 JRE'를 함께 다운로드를 가능하게 한다. 이는 굳이 오라클에서 JDK를 따로 설치하지 않고도 이클립스 설치만으로 자바 프로그래밍을 가능하게 만든다. JRE(Java Runtime Envrionment)란 무엇인가? (아시는 ..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] JDK 사용하기 2

JDK에는 W.O.R.A 라는 개념이 있다. Write Once Run Anywhere JDK의 가장 대표적인 개념이다. Write Once Run Anywhere 출처 입력 C 컴파일러는 JDK와 다르다. C는 컴파일되면 바이너리(Binary) 코드 실행파일이 생성된다. 바이너리 코드(10001011...)는 CPU가 이해하는 언어다. (바이트 코드는 JVM이 이해하는 언어다.) 즉, C컴파일러는 컴퓨터 환경과 직결되는 바이너리 코드를 실행파일로 만든다는 의미다. 이를 다시 말하면 Window에서 작성된 바이너리 코드 실행파일은 Linux에서 작동이 안 된다는 말이다. 즉, 어디서든(Anywhere) 실행(Run)되지 않는다는 것이다. 이런 단점을 보완하고자 JDK는 컴파일과 OS사이에 JVM이라는 가..

JAVA/JAVA Basic 2021.06.18

[ JAVA ] JDK 사용하기 1

JAVA 언어 코딩을 위한 준비물은 JDK와 이클립스다. JDK는 자바 개발 도구 이클립스는 IDE 통합 개발 환경이다. JDK(Java Development Kit) JDK는 자바 언어로 만들어진 코드를 실제 프로그램으로 만드는 도구다. https://www.oracle.com/java/technologies/javase-downloads.html JDK는 위 링크로 들어가 설치를 하면된다. (최신의 JAVA SE15와 기존의 JAVA SE8 중 하나 선택) JDK 설치를 완료하면 JDK를 사용해보자. 바탕화면에 임시로 폴더 하나를 만든다. 간단히 메모장에 자바코드로 .java 파일을 만들어 바탕화면 폴더에 저장한다. cmd 창을 열어 cd 명령어(Change Directory)를 통해 JAVA파일이 ..

JAVA/JAVA Basic 2021.06.18

[Java] 조건문과 반복문 심화

위에서 아래로 흐르는 실행 흐름에 개발자가 원하는 방향으로 바꾸는 흐름 제어문 : 1. 조건문 2. 반복문 조건문 심화 Switch문 Swich문에서 break를 걸지 않으면 case를 하나씩 모두 실행한다. 이를 이용하여 원하는 변수값끼리 묶어, 같은 명령문이 실행되도록 유도 switch(grade){ case 'A' : case 'a' : System.out.println("우수 회원입니다."); break; case 'B' : case 'b' : System.out.println("일반회원입니다.")' break; default : break; } 반복문 심화 for문 for ( int i=0, j=0; i= 50; j--, i++) for문은 쉼표(,)를 이용해서 초기화식과 증감식을 둘이상 쓸 수..

JAVA/JAVA Basic 2020.11.22

[Java] 연산자 정리하기

부호 연산자 기능 1 : 실수 리터럴 앞에서 양수, 음수 표현 기능 2 : 변수 앞에서 부호 유지(+), 변환(-) 표현 int result2 = -x; x 변수의 부호가 양수이면 음수로, 음수이면 양수로 변환한다. 부호 연산 시, 자료형 타입은 int로 바뀐다. short result2 = -x; (컴파일 오류) 증감 연산자 ++, -- 증감 연산자가 i = i + 1보다 빠르다는 통념이 있으나 틀린 말이다. 실제 컴파일을 하면 동일한 바이트 코드가 생성된다. 논리부정 연산자 논리부정연산자(!)는 false를 true로 true를 false로 변경하는 토글 기능 구현에 사용된다. play = false; play = !play; 비트반전연산자(~) 정수타입의 피연산자에만 사용된다. 비트갑을 0->1, ..

JAVA/JAVA Basic 2020.11.21

강제형변환(Casting)과 데이터 손실

형변환에는 두 가지가 있다. 자동 형변환 : 작은 타입 -> 큰 타입 (ex. int -> long, int -> double) 강제 형변환 : 큰 타입 -> 작은 타입 (ex int -> byte) 자동형변환은 데이터 손실이 일어날 일이 없다. 하지만 강제 형변환은 큰 크기의 타입이 작은 크기의 타입으로 변환되는 것이기에 데이터 손실이 일어날 수 있다. byte 타입은 1byte 크기로 -2^7 ~ 2^7 -1 (-128 ~ 127) 까지의 수를 표현할 수 있다 만약 int 타입의 128을 byte로 형변환한다면 데이터 손실이 발생한다. public class test { public static void main(String[] args) { // TODO Auto-generated method st..

JAVA/JAVA Basic 2020.11.19