[JAVA] #0 자바, 좀 아세요?

대복·2025년 5월 4일

JAVA

목록 보기
1/6

서론

1년 가까이 개발자를 하겠다고 열심히 Java부터 Springboot, DB, 인프라, 모니터링 등등 여러가지 툴과 소프트웨어들의 사용법을 배웠다. 하지만 이러한 프로그램들을 계속 수박 겉 핥기 식으로 배우니 뭔가 머리에 남는게 없는 것 같다. 그래서 다시 처음부터 잊기 쉬운 내용이나 잘 모르는 내용들을 회고하며 다시 자바부터 공부해보려고 한다.

자바?

우선 뭐... 표지는 이렇게 생겼고 객체지향에 중점을 둔 언어이다.

JVM이라는 게 있어 운영체제마다 다르게 만들 필요 없이 똑같이 실행된다.(OS에 따른 귀찮음이 사라진다.)

GC(가비지 컬렉션)이 있어서 메모리 관리도 비교적 편하다.

특징

  • 플랫폼 독립성: JVM만 있으면 OS에 관계없이 동일한 바이트코드를 실행할 수 있다.
  • 객체 지향 언어: 클래스, 상속, 캡슐화, 다형성 등을 지원한다.
  • Garbage Collection: JVM이 자동으로 메모리를 관리함.
  • 멀티스레드 지원: 병렬 처리라는 강력한 기능을 제공한다.

왜 OS를 타지 않을까?

이걸 알려면 자바의 동작 구조를 알아야 한다.

  1. 개발자가 자바 소스코드를 작성한다.

  2. 자바 컴파일러(javac)가 자바 소스파일을 컴파일한다. 이게 끝나면 자바 바이트 코드(. class)가 나온다

!!자바 바이트 코드란?: JVM만이 읽을 수 있는 코드

  1. 자바 바이트 코드를 JVM의 ClassLoader에게 전달해 줘서 미리 실행에 필요한 준비를 한다.
  • ClassLoader: 필요한 .class 파일들을 메모리로 로드
  • Bytecode Verifier: 로드된 클래스가 유효한지 검사
  • Runtime Data Area(런타임 메모리): 클래스/객체 정보를 적재
  • Excution Engine(실행 엔진): 바이트 코드를 실행
    • 처음에는 인터프리터로 한 줄씩 읽어서 실행
    • 자주 실행되는 코드는 JIT 컴파일러가 감지해서 기계어로 컴파일(해당 코드는 기계어로 실행되기에 빠르다)
  1. 실행

Call by value

자바에서는 모든 메서드 인자는 값으로 전달(call by value)

  • 기본형 타입들은 진짜 값을 복사해서 넘긴다.
  • 참조형 타입들은 참조값(주소)를 복사해서 넘긴다.
    • 그래서 원본 객체 내부 필드는 바꿀 수 있다.텍스트
void modify(StringBuilder sb) {
    sb.append(" world");   // 가능
    sb = new StringBuilder(); // 이건 호출자에게 반영 안 됨
}

자료형이나, 반복문, 조건문을 쓸 때 꿀팁

  1. 자바 연산의 최소 단위는 Int다. 암만 바이트니 Short니 자료형 넣고 연산떄려도 결과는 Int다.
byte a = 1, b = 2;
byte c = a + b;  // 오류 → int로 바뀌므로 형 변환 필요
  1. 숫자 자릿수가 너무 커질 때, 언더바(_)를 이용해서 가독성을 키울 수 있다.(자바 7 이상)
int million = 1_000_000;
  1. 문자열을 입력할 때 시작에 \u를 붙이면 유니코드 입력이 가능하다.
System.out.println('\uAC00'); // 가
  1. 자바는 C언어와 달리 [0,1]이 [false, true]가 안된다.
if (1) {} // ❌ 컴파일 에러
  1. Label이라는 걸 활용해서 중첩된 for문을 한 번에 벗어날 수 있다.(근데 남발하지 말자. 가독성 안 좋다.)
outer:
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        if (j == 2) break outer;
    }
}
profile
컴퓨터를 좋아합니다

0개의 댓글