- 숫자 10을 출력
package chapter2;
public class BinaryTest {
public static void main(String[] args) {
int num = 10;
int bNum = 0B1010; // 2진수 0B
int oNum = 012; // 8진수 0
int hNum = 0XA; // 16진수 0X
// 10
System.out.println(num);
System.out.println(bNum);
System.out.println(oNum);
System.out.println(hNum);
}
}
byte
: 1byte | 동영상, 음악 파일 등 실행 파일의 자료를 처리할 때 사용short
: 2byte | 주로 C/C++ 언어와의 호환 시 사용int
: 4byte | 자바에서 정수에 대한 기본 자료 형, 프로그램에서 사용하는 모든 숫자(리터럴)는 기본적으로 int 로 저장long
: 8byte | 가장 큰 정수 자료형, 숫자뒤에 식별자L
또는l
을 붙여 long 자료형을 표시해야 함
// 컴파일 에러
int num = 12345678900;
long num = 12345678900;
// long 자료형 표시
long num = 12345678900L;
char
: 2byte- 인코딩 - 각 문자에 따른 특정한 숫자 값(코드 값)을 부여 | 자바는 유니코드 UTF-16 인코딩 사용
- 디코딩 - 숫자 값을 원래의 문자로 변환
char ch = 'A';
System.out.println(ch); // A
System.out.println((int)ch) // 65
int ch2 = 66;
System.out.println(ch2); // 66
System.out.println((char)ch2) // B
float
: 4byte | 숫자뒤에 식별자F
또는f
을 붙여 float 자료형을 표시해야 함double
: 8byte | 실수는 기본적으로 long 으로 처리
double dNum = 3.14;
float fNum = 3.14; // 컴파일 에러
float fNum = 3.14F;
boolean
: 1byte
boolean isMarried = false;
- 자료형이 필요한 이유 - 변수를 선언할 때는 변수가 사용할 메모리 크기와 타입을 구분하기 위해
- 지역 변수 자료형 추론 - 변수에 대입되는 값을 보고 컴파일러가 추론
package chapter2;
public class BinaryTest {
public static void main(String[] args) {
// 지역 변수로 자료형 추론이 가능
var num = 10; // int
var dNum = 10.0; // double
var str = "hello"; // String
num = 3.14; // 컴파일 에러 - int 형으로 추론된 변수는 double 값을 다시 할당할 수 없음
}
}
- 변하지 않는 값 (cf 변수 : 변하는 값)
- 상수를 선언 :
final
사용
final double PI = 3.14;
final int MAX_NUM = 100;
PI = 3.15; // 컴파일 에러 - final로 선언된 변수에 새로운 값을 할당할 수 없음
-
프로그램에서 사용하는 모든 숫자, 값, 논리 값
ex) 10, 3.14, 'A', true
-
리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 있음
-
필요한 경우 상수 풀에서 가져와서 사용
-
상수 풀에 저장할 때 정수는
int
, 실수는double
로 저장 -
long
,float
값으로 저장해야 하는 경우 식별자L
orl
,F
orf
명시
- 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어 남
- 묵시적 형변환 : 작은 byte → 큰 byte, 덜 정밀한 수 → 더 정밀한 수 대입
- 명시적 형변환 : 반대의 경우, 변환 되는 자료형을 명시해야 함, 자료의 손실이 발생할 수 있음
// 묵시적 형변환
long num = 3; // int 에서 long 으로 자동 형 변환, L을 명시하지 않아도 됨
// 명시적 형변환
double dNum = 3.14;
int num = (int)dNum; // 자료형 명시
- 항(operand) : 연산에 사용되는 값
- 연산자(operator) : 항을 이용하여 연산하는 기호
- 단항 연산자 : 항이 1개 ex)
++num;
- 이항 연산자 항이 2개 ex)
num1 + num2;
- 삼항 연산자 : 항이 3개 ex)
(5 > 3) ? 1: 0;
- 단항 연산자 : 항이 1개 ex)
- 변수에 값을 대입 ex)
int age = 23;
- 값의 부호를 변경 ex)
int num = -age;
+
,-
,*
,/
,%
- 단항 연산자,
++
,--
int num = 10;
System.out.println(++num); // 11, 출력 전 증가
System.out.println(num++); // 10, 출력 후 증가, 다음 문장에서 11
- 이항 연산자,
true
orfalse
결과 값 반환>
,<
,>=
,<=
,==
,!=
- 관계 연산자와 혼합하여 많이 사용,
true
orfalse
결과 값 반환- 논리 곱 :
&&
- 논리 합 :
||
- 부정 :
!
- 단락 회로 평가(short circuit evaluation)
- 논리 곱은 두 항이 모두
true
일 때true
- 논리 합은 두 항이 모두
false
일 때false
- 논리 곱은 두 항이 모두
- 단락 회로 평가(short circuit evaluation)
- 논리 곱 :
- 대입 연산자와 다른 연산자를 함께 사용
+=
,-=
,*=
,/=
,%=
- 삼항 연산자, 조건 식의 결과
true
orfalse
에 따라 다른 식이나 결과 값을 반환조건식 ? 참 결과 : 거짓 결과;
int num = (5 > 3) ? 10 : 20;
~
: 비트의 반전 (1의 보수)&
: 비트 단위 AND|
: 비트 단위 OR^
: 비트 단위 XOR, 두개의 비트가 서로 다른 경우 1<<
:a << 2
변수 a를 2 비트 만큼 왼쪽으로 이동>>
:a >> 2
변수 a를 2 비트 만큼 오른쪽으로 이동>>>
,<<<
:>>
,<<
와 동일한 연산, 채워지는 비트가 부호와 상관없이 0
int num = 15; // 00001111
System.out.println(num << 3); // 120, 15 * 2^3(이동한 자릿수 만큼), 01111000
System.out.println(num >> 2); // 3, 15 / 2^3, 00000011
- 조건에 따라 다른 수행문이 실행
if(조건1) {
수행문1;
}
else if(조건2) {
수행문2;
}
else {
수행문3;
}
switch(rank) {
case a: case b: case c: // 값은 다르지만 같은 수행문을 해야 할 경우
수행문1;
break;
case d: 수행문2;
break;
default: 수행문3;
}
- 조건식이 참인 동안 수행문을 반복
while(조건식) {
수행문1;
}
- 먼저 수행문을 한 번 수행하고 조건식 체크
do {
수행문1;
} while(조건식);
수행문2;
for(초기화식; 조건식; 증감식) {
수행문;
for(초기화식; 조건식; 증감식) { // 중첩 반복문
수행문;
}
}
int total = 0;
int num;
for (num = 1; num <= 100; num++) {
if(num % 2 == 1)
continue; // 홀수인 경우 아래 수행문 무시
total += num;
}
- 중첩된 반목문의 경우 내부 반복문만 빠져나옴
int sum = 0;
int num
while(true) {
sum += num;
if(sum > 100)
break; // sum 이 100보다 클 때 반복문 종료
num++;
}
- 객체를 기반으로 하는 프로그래밍 ex) C++, Python, JAVA
- 시간의 흐름에 따른 프로그래밍 ex) C언어
- 객체에 대한 속성과 기능을 코드로 구현 한 것
- 객체에 대한 청사진(blueprint)
- 객체의 속성
- 객체의 특성(property), 속성(attribute), 멤버 변수(member variable)
- 객체의 기능
- 객체가 하는 기능들을 메서드로 구현
- method, member function
- 객체의 속성
- class는 대부분 대문자로 시작
- 하나의 java 파일에 하나의 클래스를 두는 것이 원칙이나
- 여러 개의 클래스가 같이 있는 경우 public 클래스는 단 하나이며
- public 클래스와 자바 파일의 이름은 동일해야 함
- 자바의 모든 코드는 class 내부에 위치
(접근 제어자) class 클래스 이름 {
멤버 변수;
메서드;
}
// Student.java
package classpart; // 패키지는 소문자
public class Student { // 클래스 이름 대문자로 시작
int studentID;
String studentName;
int grade;
String address;
public void showStudentInfo() { // 메소드 이름 소문자로 시작
System.out.println(studentName + "," + address);
}
// 해당 파일에서 실행시켜야 하는 경우
/* public static void main(String[] args) {
Student studentLee = new Student();
studentLee.studentName = "이순신";
studentLee.address = "서울시 서초구 서초동";
studentLee.showStudentInfo();
} */
}
// StudentTest.java
package classpart;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student();
studentLee.studentName = "이순신";
studentLee.address = "서울시 서초구 서초동";
studentLee.showStudentInfo();
}
}
- 함수의 일종, 객체의 기능을 제공하기 위해 클래스 내부에 구현되는 함수
package classpart;
public class FunctionTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int sum = addNum(num1, num2);
System.out.println(sum); // 30
}
public static int addNum(int n1, int n2) {
int result = n1 + n2;
return result;
}
}
package classpart;
public class Student {
int studentID;
String studentName;
int grade;
String address;
public void showStudentInfo() {
System.out.println(studentName + "," + address);
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String name) {
studentName = name;
}
}
- 클래스(static 코드) → 생성(인스턴스 화) → 인스턴스(dynamic memory)
- 클래스를 사용하기 위해서는 클래스를 생성해야 함
new
예약어를 이용하여 클래스 생성
클래스형 변수이름 = new 생성자;
// 참조형데이터타입 참조변수 = new 디폴트생성자
Student studentA = new Student();
- 하나의 클래스 코드로 부터 여러 개의 인스턴스를 생성
- 인스턴스는 힙(heap) 메모리에 생성됨
- 각각의 인스턴스는 다른 메모리에 다른 값을 가짐
- 참조 변수 : 인스턴스 생성 시 선언하는 변수
- 참조 값 : 인스턴스가 생성되는 힙 메모리 주소
Student student1 = new Student();
System.out.println(student1); // 패지키명.클래스명@16f65612
- 인스턴스 생성 시
new
키워드와 함께 사용했던 생성자
// Student.java
package classpart;
public class Student {
int studentID;
String studentName;
int grade;
String address;
public Student() {} // 디폴트 생성자, 작성하지 않아도 컴파일 시 자동으로 추가됨, 직접 작성한 생성자가 있다면 추가 X
public Student(int id, String name) { // 생성자 직접 작성, 디폴트 생성자와 같은 이름 사용할 수 있으나 매개변수가 달라야 함
studentID = id;
studentName = name;
}
// ...
}
// StudentTest.java
package classpart;
public class StudentTest {
public static void main(String[] args) {
Student studentLee = new Student(100, "이순신");
}
}
- 생성자는 인스턴스를 초기화 할 때의 명령어 집합
- 생성자의 이름은 그 클래스의 이름과 같음
- 생성자는 메소드가 아님, 상속되지 않으며, 리턴 값은 없음
- 하나의 클래스에는 반드시 적어도 하나 이상의 Constructor가 존재
- Constructor를 기술하지 않으면 Default Constructor가 자동으로 생김
- Default Constructor는 매개 변수, 구현부가 없음
- 만약 클래스에 매개변수가 있는 생성자를 추가하면 디폴트 생성자는 제공되지 않음
- 필요에 의해 생성자를 추가하는 경우 여러 개의 생성자가 하나의 클래스에 있음 (overload)
package classpart;
public class Student {
int studentID;
String studentName;
int grade;
String address;
public Student() {} // 디폴트 생성자
public Student(int id, String name) { // 아이디와 이름을 매개변수로 입력받는 생성자
studentID = id;
studentName = name;
}
}