본문 바로가기
개발/자바, 코틀린

[Java] 자바의 신 1 ~ 7장 학습 내용 정리

by 카펀 2022. 7. 25.

# 본 글은 [자바의 신 - 이상민 저]를 바탕으로, 그룹 스터디를 진행하며 학습한 내용을 정리한 글입니다.

# 본 글은 자바의 신 1권의 1 ~ 7장 중, 중요하거나 쉽게 놓칠 수 있는 부분을 체크하여 작성한 글입니다.

목차

3. 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요 (OOP)

4. 정보를 어디에 넣고 싶은데 (변수)

5. 계산을 하고 싶어요 (연산자)

6. 제가 조건을 좀 따져요 (조건문)

7. 여러 데이터를 하나에 넣을 수는 없을까요? (배열)

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

객체지향 언어

  • 이 세상의 사물을 나타내는 방법.
  • 모든 사물은 “상태 (status)와 행위(behavior)가 있다.
    • 상태: 책이 놓여 있다, 펼쳐져 있다
    • 행위: 책을 덮는다, 책의 페이지를 넘긴다
  • 모든 클라스도 상태와 행위가 있다.

자판기 클라스의 상태와 행위

public class VendingMachine() {
    public VendingMachine() {
    }

    // 변수에 값을 지정애 줌으로써 상태를 나타낼 수 있다.
    private List<Object> items;
    private List<Object> cash;
    private int sellCount;

    // 메소드를 통해 행위를 나타낼 수 있다.
    public void getItem(Object item) {
        // …
    }

    public void addSellCount() {
        // …
    }

}

클라스와 객체

실제 사물을 나타내는 개념. 객체 (Object) 혹은 instance라고 한다.

VendingMachine drinkMachine = new VendingMachine();
VendingMachine snackMachine = new VendingMacine();
  • 생성자: VendingMachine
    • 객체를 생성하는 거의 유일한 도구다.
    • 매개변수가 없는 생성자는 따로 만들지 않아도 자동으로 생성된다.
  • new 예약어
    • 객체를 생성하는 예약어

자바의 기본적인 객체 개념을 잊지 말자

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

Java의 가비지 콜렉터 (Garbage Collector)

C, C++에서는 한 변수에 어떤 값을 할당을 통해 지정한다.
이렇게 지정한 객체를 개발자가 지정해야 메모리에서 사라진다.
Java에서는 Garbage Collector가 때가 되면 알아서 메모리에서 비할당 해 준다.

Java의 두 자료형

  • 기본 자료형 (Primitive Data Type)
    • 개발자가 추가로 만들 수 없다 (Java 9 이전).
    • 값을 바로 적어서 초기화 할 수 있다.
  • 참조 자료형 (Reference Data Type)
    • = new Name() 으로 과 같이 new 키워드를 이용하여 초기화한다.
  • 예외: String이 외에 String만의 특성은 15장에서 다룬다.
// 둘 다 잘 동작한다.
String bookName1 = "God of Java";
String bookName2 = new String("God of Java");
  • 기본 자료형의 기본 값
    • 지역 변수는 반드시 초기화해서 사용해야 한다.
    • char을 제외하면 모두 0, char은 \0000을 기본값으로 사용한다.

5. 계산을 하고 싶어요

  • 단항 연산자: 피연산자가 하나뿐인 연산자
    • +: 단항 플러스 연산자; 1을 곱한 것과 같은 효과
    • -: 단항 마이너스 연산자; -1을 곱한 것과 같은 효과
    • ++: 증가 연산자
    • —: 감소 연산자
    • !: 논리 부정 연산자
  • 삼항 연산자
    • a ? b : c - if a, b; else c
  • 기본 자료형의 형변환 (Casting)

6. 제가 조건을 좀 따져요

label: 두 개 이상의 for / while 루프가 있을 때 사용

  • for/while 루프를 두 개 이상 사용할 때, 바깥쪽 루프의 시작점으로 이동할 때 label을 사용한다.
public void multiply() {
    startLabel:
    for (int i = 2; i <= 9; i++) {
        for (int j = 1; j <= 9; j++) {
            if (j == 4) continue startLabel;
            printf(level + "*" + unit + " = " + level*unit + " ");
        }
    printf();
    }
}
  • 위 코드에서, j == 4인 경우 startLabel 시점으로 다시 이동한다.

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

  • 배열 ArrayIndexOutOfBoundsException
    • 컴파일 단계에서는 문제가 없다
    • 런타임에서 잘못된 인덱스에 접근할 때 (값을 할당 / 참조) 위 에러가 발생
  • 배열의 기본값은 각 자료형의 기본값과 동일하다.
    • 지역 변수는 초기화를 하지 않으면 사용이 불가능하다.
    • 하지만 지역 변수 배열은 배열의 크기만 정해주면, 별도의 초기화를 해 주지 않아도 기본값이 할당된다.
    • 참조 자료형은 초기화를 하지 않으면 null이 할당된다
  • 배열의 특정 인자가 아닌 배열 자체를 출력하면, 아래와 같이 출력된다.
[Ljava.lang.String;@1540e109d
  • 각자 아래와 같은 뜻을 가진다.
    • [: 배열을 뜻함
    • L: 해당 배열은 참조 자료형이라는 뜻
    • java.lang.String: 해당 배열이 어떤 타입인지 나타냄
    • @1540e19d: 해당 배열의 고유 번호
  • static 예약어
    • 객체를 생성할 때마다 배열을 새로 생성하지 않도록 해 준다 (고정값에 사용)
  • Collection을 통한 배열 순회
  • public void exploreGrid() { int[][] grid = {{1, 2, 3}, {4, 5, 6}}; // 배열 내 값을 순회힌다. for(int[] nextHead : grid) { for (int data : nextHead){ printf(data); } } }
  •   public void printFor() {
          int[] primes = new int[]{1, 2, 3, 5, 7, 11, 13, 17};
    
          // 배열 내 값을 순회한다
          for(int data : primes) {
              printf(data);
          }
      }
  • psvm (public static void main(String args[])
public class ArrayMain {
    public static void main(String args[]) {
        if (args.length > 0) {
            for (int next : args) {
                printf(next);
            }
        }
    }
}

$ javac ArrayMain.java
$ java ArrayMain a b c d

a
b
c
d
$

기타 짚고 넘어갈 내용

Major GC, Minor GC

Big Decimal, Double, Float

  • Double 및 Float은 자료형의 특성상, 소수점 일정 자릿수 이하로 내려가면 표현하는 정확도에 오류가 생긴다
  • float은 6~9자리, double은 15~18자리 정도의 정밀도를 가진다.
  • 이를 해결하기 위하여 big decimal이라는 개념이 존재
  • bigdecimal은 느리고 사용하기 약간 불편하지만, 내부적으로 숫자를 10진수로 저장
  • 따라서 아주 작은 수와 큰 수의 연산에 대해, 거의 무한한 정확도를 보증한다
  • 금융권 및 돈과 관련된 영역에서는 필수로 사용
  • 관련 자료

하형 형변환, 상형 형변환과 발생할 수 있는 문제점

Class vs Object, Object vs Instance

  • 클래스: 현실 세계의 개념을 코드로 표현한 설계도, 연관되어 있는 변수와 메소드의 집합
    • 변수: 상태, 메소드: 행위
  • 객체: 클래스를 바탕으로 코드상 구현된 실체
    • 클래스의 인스턴스라고도 부른다
  • 인스턴스: 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체.
    • 실체화된 인스턴스는 메모리에 할당된다
    • 인스턴스 ⊂ 객체
  • 예: 하나의 객체가 하나의 인스턴스만을 갖도록 하는 방식을 싱글톤 패턴이라고 한다.

1, 2차 컴파일

  • 추후 자세히 공부할 예정

JDK, JRE, JVM

  • JDK: Java Development Kit. Java의 실행을 위한 JRE를 포함하여, 컴파일러 등이 포함된다.
  • JRE: Java Runtime Environment. Java의 실행을 위한 환경으로, JVM과 여러 요소를 포함한다.
  • JVM: Java Virtual Machine. Java가 실제로 실행되는 가상 머신
  • JVM ⊂ JRE ⊂ JDK

댓글