이 노트는 "윤성우의 열혈 java 프로그래밍" 책을 공부하면서
내가 이해한대로 다시 정리하면서 작성되었다.
🪐우테코🪐 미션을 자바 언어로 수행 중 인데 좀 오랜만에 다루는 자바라
프로그램을 구현할 때 내가 "자바를 자바답게 쓰지 못한다"는 느낌을 받았다.
그래서 미션을 제출하고도 제출한 미션에 대해 계속 고민해보고 들여다보았더니
자바를 자바답게 사용하지 못하고 코드를 짠 것 같아 조금은 아쉬움이 남았다.
때문에 자바를 자바답게! 사용하기 위해서 책을 집어 들고 빠르게 훑어 보기로 했다! 👀
"윤성우의 열혈 자바 프로그래밍" 책을 보면서 공부하고,
공부한 내용을 정리해서 포스팅하기 프로젝트 🏃♂️
일반적인 프로그램은 윈도우 or 리눅스 같은 운영체제 위에서 실행된다.
그러나 java 프로그램은 운영체제 위에 자바 가상머신Java Virtual Machine
이 있다.
운영체제는 자바 가상머신을 실행시키고 자바 가상머신이 프로그램을 실행시킨다.
🤔 왜 자바 가상머신을 사용하나?
자바 프로그램을 운영체제에 상관없이 실행시키기 위해서.
자바 컴파일러(.exe)는 자바 가상머신이 이해할 수 있는 코드를 생성해 낸다.
(= 자바 바이트 코드)
🤔 자바 컴파일러 jaca.exe는?
자바 런처
라고도 하며 자바 가상머신을 구동하고 그 위에 자바 프로그램이 실행되도록 돕는 프로그램이다.
자바는 중괄호를 이용해서 클래스와 메소드의 영역을 구분한다.
문장의 끝에는 반드시 세미콜론을 붙여서 문장의 끝을 표시한다.
System.out.println("2 + 5 = " + 2 + 5); // 2 + 5 = 25
System.out.println("2 + 5 = " + (2 + 5)); // 2 + 5 = 7
/* ~ */
여러 줄을 주석으로 달 때 시작을 /*
으로, 끝을 */
으로 표시한다.
/*
* 파일 이름 :
* 작성자 :
* 작성일 :
*/
주석 문장이 하나나 둘이라면 행단위 주석을 사용한다.
//파일 이름 :
//작성자 :
영역 또는 의미의 구분을 위해 일정 간격 왼쪽에서 띄운 후 문장 입력.
클래스의 이름 오른편에, 그리고 메소드의 이름 오른편에 여는 중괄호 {
위치시킴.
public class Main {
public static void main(String[] args) {
// write your code here
}
}
변수는 메모리 공간에 붙여진 이름이다.
자료형 | 데이터 | 크기 |
---|---|---|
boolean | 참과 거짓 | 1byte |
char | 문자 | 2byte |
byte | 정수 | 1byte |
short | 정수 | 2byte |
int | 정수 | 4byte |
long | 정수 | 8byte |
float | 실수 | 4byte |
double | 실수 | 8byte |
자바는 대소문자를 구분한다.
$
과 _
이외의 다른 특수문자는 변수의 이름에 사용할 수 없다.package com.newwisdom;
public class Main {
public static void main(String[] args) {
short num1 = 11;
short num2 = 22;
short result = num1 + num2;
System.out.println(result);
}
}
이 예시는 error가 난다.
"자바는 정수형 연산을 int형으로 진행하기 때문이다."
num1과 num2를 int형으로 바꾸어 연산하고 short형에 대입하니 오류가 나는 것이다!
연산을 동반하는 상황에서는 int형을 사용하자.
float은 소수점 6자리까지 오류가 발생하지 않고,
double은 소수점 이하 15자리까지 오차가 발생하지 않는다.
유니코드 : "문자 A는 숫자 65로 표시한다" 같은 약속.
문자형은 작은 따옴표 ''
로 감싸야한다.
클래스 = 데이터 + 메소드
클래스는 틀(Mold)을 구성하는 것과 같다.
틀을 이용해서 '인스턴스(객체)'를 만들어야 한다.
인스턴스를 사용하려면 인스턴스를 참조할 수 있는 참조변수를 선언해야 한다.
BankAccount jihye = new BankAccount();
...
jihye = new BankAccount(); // 새 인스턴스를 참조한다.
BankAccount ref1 = new BankAccount();
BankAccount ref2 = ref1;
메소드를 호출하면서 인스턴스의 참조 값을 전달하는 것도 가능하다.
class BankAccount {
int balance = 0;
public int deposit(int amount) {
balance += amount;
return balance;
}
public int withdraw(int amount) {
balance -= amount;
return balance;
}
public int checkMyBalance() {
System.out.println("잔액 : " + balance);
return balance;
}
}
class PassingRef {
public static void main(String[] args) {
BankAccount ref = new BankAccount();
ref.deposit(3000);
ref.withdraw(300);
check(ref); // 참조 값의 전달
public static void check(BankAccount acc) {
acc.checkMyBalance();
}
}
}
참조변수가 참조하는 인스턴스와 관계를 끊고 아무런 인스턴스도 참조하지 않고 싶을 때, 참조변수에 null을 대입한다.
BankAccount ref = new BankAccount();
...
ref = null;
인스턴스를 생성할 때 적절한 초기화를 진행해야 한다.
인스턴스를 구분할 수 있는 유일한 정보를 갖게 하자!
생성자를 생략한 상태의 클래스를 정의하면 자바 컴파일러가 '디폴트 생성자'를 클래스의 정의에 넣어준다.
좋은 자바 시리즈인 것 같아요. 정리도 할 겸 정주행 해보겠습니다.