Skip to content

[자바의 신] 2장 ~ 7장

2장: Hello God of Java

  • 핵심 키워드
    • JDK
    • main 메서드

JDK

JDK(Java Delvelopment Kit)를 설치하면 자바로 코드를 작성하고, 컴파일하고 실행할 수 있다. 다음은 HelloWorld.java라는 파일을 컴파일하고 실행하는 예시이다.

  • 컴파일: javac HelloWorld.java
    • .java 파일을 컴파일하면 확장자가 .class인 바이너리 파일이 생성된다.
  • 실행: java HelloWorld.class
    • .class 파일을 실행하면 JVM(Java Virtual Machine) 위에서 실행된다.

main 메서드

java 명령어로 코드를 실행하면 해당 클래스의 main 메서드가 실행된다. main 메서드의 작성법은 다음과 같다.

public class HelloWorld {
    // main 메서드
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

해당 코드를 실행하면 Hello, World!가 출력될 것이다.

3장: 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요

  • 핵심 키워드
    • 클래스
    • 생성자
    • 메서드
    • 객체, 인스턴스

클래스

자바는 객체 지향 프로그래밍 언어(Object Oriented Programming Language)로 현실 세계의 사물(Object)이나 추상적 것을 클래스로 표현할 수 있다. 클래스는 상태와 행동을 갖는데, 상태는 변수로 행동은 메서드로 표현한다.

다음은 사람을 클래스로 표현한 코드이다.

public class Person {
    // 사람의 상태인 이름, 나이, 체력을 변수로 표현
    String name;
    int age;
    int energy;

    // 사람의 행동인 인사하기, 일하기, 휴식하기를 메서드로 표현
    public void greet() {
       System.out.println("안녕하세요. 저는 " + age + "살 " + name + "에요.");
    }

    public void work() {
        if (energy > 0) {
            energy--;
        } else {
            System.out.println("휴식이 필요합니다.");
        }
    }

    public void rest() {
        energy++;
        System.out.println("체력이 회복 되었습니다.");
    }
}

생성자와 인스턴스

대부분의 클래스는 스스로 작업을 하지 못하기 떄문에 new 예약어와 함께 생성자를 호출하여 객체(인스턴스)를 만들고 작업을 처리해야 한다.

생성자에 인자를 넘겨 객체의 값을 초기화 할 수 있다.

// 생성자가 추가된 Person 클래스
public class Person {
    // 상태인 이름, 나이, 체력을 변수로 표현
    String name;
    int age;
    int energy;

    // 생성자는 클래스와 이름이 같고 리턴타입이 없다.
    public Person(String nmae, int age, int energy) {
        this.name = name;
        this.age = age;
        this.energy = energy;
    }

    public void greet() {
        System.out.println("안녕하세요. 저는 " + age + "살 " + name + "에요.");
    }

    public void work() {
        if (energy > 0) {
            energy--;
        } else {
            System.out.println("휴식이 필요합니다.");
        }
    }

    public void rest() {
        energy++;
        System.out.println("체력이 회복 되었습니다.");
    }
}
// Person 생성자를 호출해 객체를 생성하는 코드
public class Main {
    public static void main(String args[]) {
        Person chulsu = new Person("철수", 7, 10);
        Person younghee = new Person("영희", 6, 1);

        chulsu.greet(); // 안녕하세요. 저는 7살 철수에요.
        younghee.work(); // 체력이 회복 되었습니다.
        younghee.work(); // 휴식이 필요합니다.
    }
}

4장: 정보를 어디에 넣고 싶은데

  • 핵심 키워드
    • 지역 변수(local variables)
    • 매개 변수(parameters)
    • 인스턴스 변수(instance variables)
    • 클래스 변수(class variables)
    • 자료형(data type)

자바 변수의 종류

자바의 변수는 4가지로 구분할 수 있다.

  • 지역 변수(local variables)
    • 위치: 중괄호 내에 선언된 변수
    • 생명 주기: 중괄호 내에서만 유효하다.
  • 매개 변수(parameters)
    • 위치: 메서드에 넘겨주는 변수
    • 생명 주기: 메서드 호출 시 생성되고 메서드 종료 시 소멸된다.
  • 인스턴스 변수(instance variables)
    • 위치: 메서드 밖, 클래스 안에 선언된 변수
    • 생명 주기: 객체 생성 시 생명이 시작되고 다른 객체가 이를 참조하지 않으면 소멸된다.
  • 클래스 변수(class variables)
    • 위치: staic 예약어와 함께 메서드 밖, 클래스 안에 선언된 변수
    • 생명 주기: 첫 클래스 호출 시 생명이 시작되고, 프로그램 종료 시 소멸된다.

자바의 자료형(data type)

자바의 자료형은 크게 기본 자료형(primitive type) 참조 자료형(reference type)으로 분류할 수 있다. 참조 자료형은 String과 new 예약어를 사용해서 초기화 해야 하는 자료형이고 기본 자료형은 그 외 모든 자료형이다.

기본 자료형

자바에는 아래와 같은 기본 자료형이 있다.

  • 정수
    • byte(-27 ~ 27 - 1)
    • short(-215 ~ 215 - 1)
    • int(-231 ~ 231 - 1)
    • long(-263 ~ 263 - 1)
    • char(0 ~ 216 - 1)
  • 소수: float(32비트), double(64비트)
  • 기타: boolean(true, false)

5장: 계산을 하고 싶어요

  • 핵심 용어
    • 형 변환(Casting)

기본형 타입변환

형 변환이란, 변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것이다.

표현 범위가 좁은 자료형을 표현 범위가 넓은 자료형으로 형 변환하는 것은 문제가 되지 않으나, 그 반대의 경우는 데이터가 예상하지 못한 값으로 변환될 수 있기에 주의 해야 한다.

// 묵시적 형변환
int x = 50000;
long y = x;

// 명시적 형변환
long x = 50000;
int y = (int) x;

7장: 여러 데이터를 하나에 넣을 수는 없을까요?

  • 핵심 키워드
    • 배열(Array)

배열

배열은 한가지 타입에 대해 여러 값을 저장하는 자료구조다. 참고로 배열도 참조 자료형이다. 자바의 배열 사용법은 다음과 같다.

// 선언 및 초기화다.
int [] lottoNumers = new int[6];
// 값 지정
lottoNumbers[0] = 21;
lottoNumbers[1] = 9;

// 중괄호를 이용한 선언 및 초기화
// 절대 변경되지 않을 요소에 사용한다.
String [] weeks = {"웛", "화", "수", "목", "금", "토", "일"};

// 배열의 길이
weeks.length;

// 2차원 배열
int [][] twoDim = new int[2][3];

// 배열을 위한 for loop
for (String day: weeks) {
    System.out.println(day);
}