jdk 및 이클립스 설치는 이미 되어있으므로 실습부분부터 시작.
java에 대한 개념설명은 추후 강의에서 나올때마다 정리해둘 예정.
패키지의 이름은 소문자만 사용.
클래스의 이름은 대문자로 시작.
=> 반드시 지켜야 하는 규칙은 아니지만 되도록 따르는 것이 좋음.
이클립스에서 실행단축키는
ctrl
+F11
새 파일 만들기는ctrl
+N
한 행 지우기는ctrl
+D
선택한 행 아래로 복사는ctrl
+alt
+↓
public class HelloJava {
public static void main(String[] args) {
System.out.println("Hello, JAVA!");
}
}
컴퓨터는 2진수를 사용하므로 0과 1만으로 데이터를 저장함.
메모리 주소를 표시할때는 16진수를 많이 사용.
bit
는 컴퓨터가 표현하는 데이터의 최소단위. 2진수 하나의 값을 저장가능한 메모리의 크기.
8bit = byte
숫자를 나타낼 때 가장 많이 사용하는 데이터형인 int는 4byte.
public class BinaryTest {
public static void main(String[] args) {
int num = 10;
int bNum = 0B1010; // 앞에 0B를 붙이면 2진수임을 나타냄
int oNum = 012; // 0을 붙이면 8진수임을 나타냄
int xNum = 0XA; // 0X를 붙이면 16진수임을 나타냄
System.out.println(num+" "+bNum+" "+oNum+" "+xNum);
}
}
변수(variable)
란? 변하는 수.
JAVA에서의 =
는 우변을 좌변으로 대입한다는 의미를 지님.
일반적인 =
와 같은 의미로 사요되는 기호는 --
$
, _
만 사용가능.camelcase
가 가장 많이 쓰임.특히 인덱스에 사용하는 변수는 i, j등의 간단한 문자를 사용해도 무관하나, 의미가 있는 변수를 사용할때는 이름에 의미를 넣어 사용하도록 권장.
변수를 선언하는 동시에 자료형의 크기만큼 메모리가 할당됨.
변수는 할당된 메모리를 지칭하는 이름임.
정수의 경우 맨 앞의 bit는 부호를 표시하는 자리로, 각 자료형의 byte에서 -1만큼의 2제곱까지의 수에서 -1한 값까지 표현가능.
(-1은 모두 0으로 이루어진 경우가 있어 제외됨.)
java에서 정수형으로 가장 많이 사용되는 자료형은 int
변수에 선언한 숫자가 몇이건 처음 변수를 선언했을때 지정한 자료형에 의해 할당되는 메모리의 크기가 결정됨.
각 자료형에 맞지않는 데이터를 넣으면 오류가 발생함.
정수의 기본형은 int
이므로, int를 넘어가는 데이터를 넣어야 하는 경우 식별자로 데이터의 맨 마지막에 L
을 붙여준다.
long lnumber = 12345678900L;
식별자는 대소문자를 구별하지 않으나, 소문자L은 숫자1과 혼동될 수 있어 대문자를 권장.
같은 이유로 실수의 기본형은 double
이므로 float
데이터를 넣기 위해서는 데이터의 맨 뒤에 F
를 붙여줌.
실수를 정수와 같은 방법으로 표현하면 정확한 표현이 어려우므로 다른 방법을 사용.
실수의 표현에는 가수와 지수를 구분한 부동소수점 방식을 사용함.
float
: 4byte
double
: 8byte
보통은 double
을 사용함.
컴퓨터의 밑수는 2이므로 정규화를 하게 되면 밑수가 가수의 첫번째 자리는 1로 고정됨.
정규화란?
밑수가 있는 경우 가수의 첫번째 자리의 수를 밑수보다 작게 만드는 것.
public class DoubleTest {
public static void main(String[] args) {
double dNum = 3.14;
float fNum = 3.14f; // 3.14로 넣으면 오류발생. 식별자 f는 대소문자구분x
System.out.println(dNum+", "+fNum);
}
}
참고로 부동 소수점방식으로는 지수가 0을 표현할 수 없어 계산 시 약간의 오차가 발생하게 되므로 알아둘것.
유니코드는 ASKII코드와 완전히 호환이 가능.(유니코드가 더 많은 문자를 표현할수있으므로 반대는 x)
JAVA는 유니코드를 사용하며, utf-16인코딩을 사용.
유니코드를 사용하려면 '\u코드'
의 방식으로 사용. 유니코드 코드표는 자료를 찾아볼것.
문자형은 내부적으로 정수로 저장됨. 음수는 사용불가.
'A'
와 "A"
는 완전히 다름.
'A'
는 문자형(2byte), "A"
는 문자열(String클래스).
문자와 문자열을 혼동하지 않도록 주의!
public class CharaterTest {
public static void main(String[] args) {
char ch1 = 'A';
System.out.println(ch1 + ", " + (int)ch1);
char ch2 = 66;
System.out.println(ch2 + ", " + (char)ch2);
int ch3 = 67;
System.out.println(ch3 + ", " + (char)ch3);
char han = '한';
char ch = '\uD55C';
System.out.println(han + ", " + ch);
}
}
타입의 이름은 boolean
true
, false
두 가지로 표현됨.
1byte 사용.
값이나 조건에 대한 결과가 참(true)인지 거짓(false)인지를 표현.
JAVA10부터 추가된 기능.
추론할 수 있는 지역변수에 대한 자료형을 따로 선언하지 않음.
다른 언어(javascript, python 등)에서 지원되던 기능을 java에서도 지원한다고 생각하면 됨.
단, 다른언어와는 달리 java에서는 한 번 선언하여 추론된 변수는 다른 타입의 값 대입불가.
public class LocalVariableType {
public static void main(String[] args) {
var i = 10;
var j = 10.0;
var str = "hello";
System.out.println(i+", "+j+", "+str);
var str2 = str;
System.out.println(str2);
str = "test";
//str = 3; // 에러발생
}
}
상수란? 값이 변하지 않는 수.
final
이라는 예약어를 사용하여 상수로 선언.public class ConstantTest {
public static void main(String[] args) {
final int MAX_NUM = 100;
final int MIN_NUM;
MIN_NUM = 1; // 상수는 사용 전 반드시 초기화가 필요
//MAX_NUM = 20; // 에러발생
System.out.println("MAX_NUM= "+MAX_NUM+", MIN_NUM= "+MIN_NUM);
}
}
묵시적 형변환
: 표현범위가 적은 (혹은 byte크기가 작은)자료형에서 표현범위가 (혹은 byte크기가 큰)큰 자료형으로의 변환public class TypeConversionTest {
public static void main(String[] args) {
int iNum = 255;
byte bNum = (byte) iNum; // 강제 캐스팅 시 데이터에 문제가 발생할 수 있음
System.out.println(iNum);
System.out.println(bNum);
double dNum = 3.14;
int inum = (int) dNum;
System.out.println(inum);
}
}
double dNum = 1.2;
float fNum = 0.9f;
int iNum1 = (int) (dNum + fNum);
int iNum2 = (int)dNum + (int)fNum;
System.out.println(iNum1+", "+iNum2);
=> 형변환의 순서에 따라 결과가 달리 나오므로 형변환 시 주의가 필요하다.
int
의 범위를 넘어가는 수는 L
, float
를 사용할때는 F
나 f
식별자가 필요.프로그램이 실행되면 메모리를 할당받는 경우와 프로그램이 메모리에 로드된 것 만으로 영역을 잡는 경우가 있음.
후자는 주로 상수나 static변수가 해당됨.
이때 잡히는 영역을 Data영역 혹은 constant pool이라고 불림.
프로그램이 완전히 종료될 때 메모리에 잡힌 영역이 해제됨.