[Java] 간단하지 않은 간단한 기초 정리 - 01

✨New Wisdom✨·2020년 12월 1일
3

📕 Java 📕

목록 보기
1/24
post-thumbnail

이 노트는 "윤성우의 열혈 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

들여쓰기와 컴파일의 대상에서 제외되는 주석

블록 단위 주석 : /* ~ */

여러 줄을 주석으로 달 때 시작을 /*으로, 끝을 */으로 표시한다.

/*
 * 파일 이름 : 
 * 작성자 :
 * 작성일 :
 */

행 단위 주석

주석 문장이 하나나 둘이라면 행단위 주석을 사용한다.

//파일 이름 :
//작성자 :

들여쓰기 (Indent)

영역 또는 의미의 구분을 위해 일정 간격 왼쪽에서 띄운 후 문장 입력.

중광호를 열고 닫는 방식에 대하여

클래스의 이름 오른편에, 그리고 메소드의 이름 오른편에 여는 중괄호 { 위치시킴.

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

변수 이름을 짓는 방법

자바는 대소문자를 구분한다.

  • 변수의 이름은 숫자로 시작할 수 없다.
  • $_ 이외의 다른 특수문자는 변수의 이름에 사용할 수 없다.
  • 키워드는 변수의 이름으로 사용할 수 없다.

정수의 표현 방식 이해하기

short형 변수를 선언할까요? int형 변수를 선언할까요?

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, double

float은 소수점 6자리까지 오류가 발생하지 않고,
double은 소수점 이하 15자리까지 오차가 발생하지 않는다.

문자 자료형 : char

유니코드 : "문자 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 대입

참조변수가 참조하는 인스턴스와 관계를 끊고 아무런 인스턴스도 참조하지 않고 싶을 때, 참조변수에 null을 대입한다.

BankAccount ref = new BankAccount();
...
ref = null;

생성자(Constructor)

인스턴스를 생성할 때 적절한 초기화를 진행해야 한다.
인스턴스를 구분할 수 있는 유일한 정보를 갖게 하자!
생성자를 생략한 상태의 클래스를 정의하면 자바 컴파일러가 '디폴트 생성자'를 클래스의 정의에 넣어준다.

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

1개의 댓글

comment-user-thumbnail
2021년 4월 15일

좋은 자바 시리즈인 것 같아요. 정리도 할 겸 정주행 해보겠습니다.

답글 달기