JAVA

자바(Java)는 C에 나중에 객체 지향 기능을 추가한 C++과는 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어입니다. 자바는 c와는 다르게 메모리를 직접 접근해서 제어를 할 수 없기 때문에 리소스를 많이 사용한다는 단점이 있지만, 현재는 많은 부분이 개선된 상황이고 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여, 운영체제와는 독립적으로 동작하기 때문에, 한 번 코드를 짜놓으면 어느 운영체제에서나 같은 형태로 실행될 수 있습니다. 그렇기 때문에 자바는 전 세계에서 가장 많이 사용하는 프로그래밍 언어 중 하나입니다.

JDK(Java Dev. kit) 설치

JDK는 자바 개발자용 도구로 자바를 이용하여 개발을 하는 사람에게 반드시 필요한 프로그램입니다. 자바 프로그램을 사용만 한다면 JRE만 설치되어 있으면 됩니다. Oracle 홈페이지에서 JAVA SE를 누르고 8버전을 다운로드하면 됩니다.

https://blog.kakaocdn.net/dn/K1MHr/btq4qDN8HhU/C0m2LwBvPTQWZHbHBc6Yr1/img.png

JDK를 설치하고 나서는 환경 변수를 잘 지정해줘야 합니다. 자바 프로그램으로 자바 파일을 실행 한 후 생성되는 클래스 파일을 실행하기 위해 javac 명령어가 실행되어야 하는데 아무런 설정을 하지 않으면 명령 프롬프트에서 javac를 입력해도 실행이 되지 않습니다.

1.내 PC(오른쪽 클릭) => 속성 => 고급 시스템 설정 => 고급 탭 => 환경 변수 https://blog.kakaocdn.net/dn/DaYYB/btq4t4SvHjh/FnwzVcoRF04jvkWixuCQF0/img.png

2.시스템 변수 => 새로 만들기로 아래 그림처럼 JAVA_HOME, CLASSPATH 생성

시스템 변수에서 Path를 찾고 ‘%JAVA_HOME%\bin’ 입력

https://blog.kakaocdn.net/dn/dk04Yl/btq4gallIPn/227XLNV2AdHoLHI451bMW1/img.png

eclipse 설치

이클립스(eclipse)는 IDE중 하나이며, 코드 실행, 코드 자동완성, 디버깅 등등 여러 편의기능을 제공합니다. 설치 하기 전 반드시 JDK를 먼저 다운로드해야합니다. JDK 설치 후 이클립스를 설치하시면 되는데 저 같은 경우는 JAVA 코딩과 웹 개발 학습이 목표이기 때문에 두번째 선택지를 선택했습니다.

https://blog.kakaocdn.net/dn/VZUHi/btq4vQS1l6U/pFfrPH4IUY1ix6g2wir9vk/img.png

https://blog.kakaocdn.net/dn/SISpk/btq4nOCcQqm/T83dLV4FHg8hEKacoq1Qj1/img.png

모두 체크하고 넘어갑니다.


준비 과정

이클립스 설치 후 실행을 하면 아래의 창이 뜨는데 작업 공간을 저장할 장소를 지정할 수 있습니다. 본인이 편한 장소를 선택하거나 그대로 놔두고 실행합니다.

https://blog.kakaocdn.net/dn/bkf4zn/btq4AuJB6Hr/0mz8nv2XrY7KuEoK9er8K0/img.png

Windows => Preferences 에서 encoding을 찾은 뒤 Text file encoding을 UTF-8로 바꿉니다.

https://blog.kakaocdn.net/dn/wcOlQ/btq4wvCN8ia/rWkSp9r2s1TRY9apKnn3n1/img.png

https://blog.kakaocdn.net/dn/cPsexD/btq4BwHGstX/rPt5OGxfFu5UyoTWK2CKH0/img.png

다음으로는 큰 틀인 프로젝트 내에서 클래스를 만들면서 코딩을 진행하게 되므로, 프로젝트를 생성해봅니다. File => New => Java Project 로 들어가셔서 프로젝트 제목을 입력 후 프로젝트를 생성합니다.

https://blog.kakaocdn.net/dn/b6xVvi/btq4uHpAkfS/f5oDvLcDOk65e6enjpPvgK/img.png

https://blog.kakaocdn.net/dn/n9xtd/btq4wvbllJ9/38KCtTfcEPgwet6kB8lCck/img.png


다음에는 왼쪽에 Package Explorer 창에서 방금 생성한 프로젝트를 클릭하면 scr라는 폴더가 나오는데 이 폴더를 오른쪽 클릭한 후 New => Class를 눌러서 새 클래스를 만듭시다.

https://blog.kakaocdn.net/dn/db9gGK/btq4s4d7qIO/ukCdCSMhKMhE1wEUsxqJU0/img.png

https://blog.kakaocdn.net/dn/dBp6JG/btq4sqPq14C/Kd9mzaAa8gNrkHSsdowaP1/img.png

아래 선택지를 선택하면 메인 메소드가 자동으로 생성됩니다.


변수의 타입

변수란 하나의 값을 저장할 수 있는 기억공간을 의미합니다. 변수의 종류는 정수, 실수, 문자, 논리형이 있습니다. 자바에서는 Python과 달리 변수 생성시 변수의 타입을 선언해주어야 합니다. 변수 앞에 자료형이 있는 이유는 자료형에 해당하는 데이터만 저장하기 위해서 입니다.

int i = 10; // 변수선언 및 초기화
System.out.println(i);
i = 20; 
System.out.println(i);
int j, k, l; // <--- 연산 진행 순서
j = k = l = 20;
//l에 20, k에 20, j에 20
System.out.println(j);
System.out.println(k);
System.out.println(l);

정수

정수 데이터는 1, 2, -3 같은 소숫점이 없는 숫자를 의미하며 기본 크기가 4byte입니다. 변수 선언은 int를 사용합니다. int 사용시 입력 가능한 최대 크기는 2147483647입니다.

System.out.println(2147483647);
System.out.println(-2147483648); //에러

int대신에 long을 사용하면 8byte를 사용하며 2147483647보다 더 큰 숫자를 입력할 수 있습니다. long으로 정수 변수 생성시 뒤에 L을 붙여줍니다.

long l1 = 2147483648L;
System.out.println(l1);


실수

실수 데이터는 기본 크기가 8byte로 10의 -18승까지 표현이 가능합니다. double로 변수 선언을 합니다.

double d = 0.123456789123456788989;
System.out.println(d);

변수에 사용되는 용량을 아끼기 위해 float으로 변수를 선언하면 4byte를 사용하게 됩니다.

System.out.println(0.123456789123456789f); //0.12345679


문자

기본 자료형 문자의 변수 타입은 char로 2byte를 사용하며 한 글자만 담습니다. 문자형 변수 입력시 작은 따옴표(‘‘)로 묶습니다.

char ch = 'a'
// char ch = 'ab'  error

여러 글자를 담을 수 있는 String이라는 변수 타입도 있지만 후에 설명하도록 하겠습니다. String의 경우 큰 따옴표(““)로 글자를 묶습니다.

String str1 = "a"
String str2 = "ab"


논리형

참, 거짓을 나타내는 논리형 자료의 변수 타입은 boolean이며 String과 함께 다시 설명드리겠습니다.

		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b1); //true
		System.out.println(b2); //false

출력문

자신이 프로그래밍한 결과를 보기 위해 변수의 값을 출력해주는 것으로 주로 println을 사용합니다.

println(줄 자동 바꿈)

자바에서 가장 많이 사용되는 기본 출력문으로 println의 괄호 안에 포함된 변수를 출력하는 출력문입니다. 이클립스에서는 syso + ctrl + enter를 하면 자동완성이 됩니다.

System.out.println((int)(10.0 % 3.0)); // 나머지
System.out.println((int)(10.0 / 3.0)); // 몫

1
3

printf

printf는 기존의 변수들을 원하는 포맷으로 출력할 수 있는 출력문으로, println보다는 사용량이 적습니다.

public static void main(String[] args) {
		
String name = "Kim";
int age = 35;
	
System.out.println("이름은 " + name + "이고. 나이는 " + age + "살입니다.");
// +가 많아질 수록 불편;;
		
System.out.printf("이름은 %s이고. 나이는 %d살입니다.\n", name, age);
// format문자 : %s(문자열), %d(정수), %c(문자), %f(실수), %b(부울) -> java에서는 많이 쓰지 않음
// \n으로 줄바꿈을 시켜줌
}
지시자 설명
%c 문자(character)로 출력
%s 문자열(String)로 출력
%d 10진수 정수 형태로 출력
%f 부동 소숫점으로 출력
%b 논리형(boolean) 형식으로 출력

기본/참조 자료형

변수의 자료형은 기본 자료형과 참조 자료형 2가지로 구분됩니다.

기본 자료형은 사용하는 메모리가 정해져있는 자료형으로 앞서 다루었던 변수 타입 중 int/long, double/float, char, boolean 등이 있습니다. stack 영역에 데이터의 값이 저장됩니다.

참조 자료형은 heap 영역에 데이터가 저장이 되며 stack 영역에는 실제 데이터가 저장된 참조값을 가지고 있습니다.

int in = 10;
char ch = 'a';
String str1 = "Kim";
String str2 = "Kim";
String str3 = new String("Kim");

위 코드를 실행한다면 int와 ch형은 그대로 stack에만 저장이 되지만 str형은 stack에는 변수이름과 참조값, heap에는 실제 값 kim이 저장됩니다.

System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
System.out.println(System.identityHashCode(str3));

String에 같은 값을 넣는 경우에는 참조값이 동일하게 되지만, new를 통해 다시 넣으면 참조값이 변하게 됩니다.


형 변환

형 변환(type conversion)이란 값의 타입을 다른 타입으로 변환하는 것으로 자바에서는 boolean을 제외한 7개의 기본 자료형은 서로 형 변환이 가능합니다.

자바에서의 형 변환은 크게 두 가지 방식으로 나뉩니다.

1.묵시적 형 변환(자동)

2.명시적 형 변환(강제)

묵시적 형 변환(자동)

묵시적 형 변환이란 대입 및 산술 연산에서 컴파일러가 자동으로 형을 변환해주는 것을 말합니다. 피연산자 중 표현범위가 큰 타입으로 형 변환이 이루어집니다. 예를 들어 int와 int보다 작은 byte, char과 연산시 int로 변환된 후 연산이 이루어집니다.

정수 < 실수

byte < short < int < long(정수,8byte) < float(실수,4byte) < double


double num1 = 10;
int num2 = 3.12345;
double num3 = 1.0f + 9.25;

System.out.println(num1)
// 10.0
System.out.println(num2)
// 3
System.out.println(num3)
// 10.25


명시적 형 변환

명시적 타입 변환이란 사용자가 타입 캐스트 연산자()를 사용하여 강제적으로 수행하는 타입 변환을 가리킵니다. 문법은 아래와 같습니다.

문법  
(타입) 변환할 데이터  
public class Ex01 {

    public static void main(String[] args) {
        byte num1 = 127;
        byte num2 = -128;

        num1++; // 127 + 1
        num2--; // -128 - 1

        System.out.println(num1); // -128
        System.out.println(num2); // 127

    }

}


오버플로우

정수형 데이터의 타입을 결정할 때에는 데이터의 최대 크기를 어디로 둘 지 반드시 고려해야 합니다. 왜냐하면 한 번 정한 타입의 범위를 벗어난 값을 저장하는 경우 오버플로우(overflow)가 발생하여 원래 값이 아닌 다른 값으로 저장될 수 있기 때문입니다.

public class Ex01 {

    public static void main(String[] args) {
        byte num1 = 127;
        byte num2 = -128;

        num1++; // 127 + 1
        num2--; // -128 - 1

        System.out.println(num1); // -128
        System.out.println(num2); // 127

    }

}