언어 · Java

Java

JVM(자바 가상 머신) 위에서 도는 객체지향 언어입니다. 한 번 컴파일하면 OS를 가리지 않고 어디서든 같은 코드가 실행됩니다. 이 프로젝트 백엔드(Spring Boot, Java 17)의 언어예요.

한 줄로

Java? 는 모든 데이터와 동작을 클래스/객체로 표현하고, 값마다 타입을 미리 정해 컴파일 단계에서 실수를 잡아주는 언어입니다. 생태계가 크고 안정적이라 서버 개발에 널리 쓰여요.

Java 소스는 "설계 도면", 컴파일된 바이트코드는 "표준 규격 부품", JVM은 "어느 공장에서나 그 부품을 똑같이 조립해주는 기계". 도면 하나로 어떤 공장(OS)에서든 같은 결과가 나옵니다.
왜 / 어디에 쓰나
  • 서버/백엔드Spring Boot? 같은 성숙한 프레임워크로 안정적인 API 서버를 만든다
  • 큰 규모의 협업 — 타입이 명확해 사람이 많아도 코드 의도가 잘 드러난다
  • 이식성 — JVM만 있으면 노트북·서버·클라우드 어디서나 동일하게 실행
  • 풍부한 생태계 — DB 연동(JPA?), 보안, 메시징 등 검증된 라이브러리가 많다

핵심 개념

개념설명
클래스 / 객체클래스는 "틀(설계도)", 객체는 그 틀로 new 해서 만든 실체.
타입모든 변수는 타입을 가짐(int, String, 직접 만든 클래스 등). 틀리면 컴파일 에러.
컬렉션여러 값을 담는 그릇. 순서 있는 List, 키-값 짝의 Map 이 대표.
제네릭그릇에 담길 타입을 꺾쇠로 지정. List<String> 는 "문자열만 담는 리스트".
인터페이스"무엇을 할 수 있는지"만 정한 약속. 구현 클래스가 실제 동작을 채움.
예외오류 상황을 throw 로 던지고 try/catch 로 받아 처리.

클래스와 객체

클래스로 틀을 정하고, 그 틀로 객체를 만들어 씁니다.

// 클래스 정의
public class User {
    private String name;          // 필드
    private int age;

    public User(String name, int age) {  // 생성자
        this.name = name;
        this.age = age;
    }

    public String greet() {       // 메서드
        return "안녕, " + name;
    }
}

// 사용
User u = new User("경수", 30);
System.out.println(u.greet());    // 안녕, 경수

제네릭과 컬렉션

제네릭? 은 그릇에 담길 타입을 꺾쇠 < > 로 지정합니다. 이렇게 하면 엉뚱한 타입을 넣는 실수를 컴파일러가 막아줘요.

List<String> names = new ArrayList<>();
names.add("경수");
names.add("민지");
// names.add(42);  // 컴파일 에러 — String 만 허용

Map<String, Integer> ages = new HashMap<>();
ages.put("경수", 30);
int a = ages.get("경수");        // 30

record (간결한 데이터 클래스)

record 는 값만 담는 클래스를 한 줄로 만들어줍니다. 생성자·게터·equals 가 자동 생성돼요. 이 프로젝트의 응답/요청 DTO? 가 주로 record로 작성됩니다.

public record UserDTO(String name, int age) {}

UserDTO d = new UserDTO("경수", 30);
d.name();   // "경수"  (게터가 자동 생성됨)

람다와 스트림

컬렉션을 가공할 때 반복문 대신 스트림으로 "필터 → 변환 → 모으기"를 흐르듯 표현할 수 있습니다. -> 는 람다(짧은 익명 함수)예요.

List<User> users = List.of(
    new User("경수", 30),
    new User("민지", 17),
    new User("현우", 25)
);

// 성인(19세 이상)의 이름만 모으기
List<String> adults = users.stream()
    .filter(u -> u.getAge() >= 19)   // 조건에 맞는 것만
    .map(User::getName)              // 이름으로 변환
    .toList();                       // [경수, 현우]
이 프로젝트와의 관계

이 프로젝트의 백엔드 전체 코드가 Java(17)로 작성돼 있습니다. 컨트롤러·서비스·엔티티?가 모두 Java 클래스이고, 요청/응답 DTO는 record 로 만들어요. Java 위에서 서버를 빠르게 구성해주는 도구가 Spring Boot, DB를 객체로 다루게 해주는 것이 JPA입니다.

다음 단계

  • Java로 서버를 빠르게 구성하는 프레임워크 → Spring Boot
  • Java 객체로 DB 테이블을 다루기 → JPA