🔌 SPARTA/Courses

Spring 시작하기

eunjiom 2026. 1. 29. 21:38

1. 클래스와 객체

 

1) 클래스

  • 청사진 / 설계도 / 틀
  • 주의사항
// 클래스 정의 - 틀, 설계도
public class Bread {
    String name = "모닝빵";  // 빵의 이름
}

// 객체가 없어서 Main에서 오류남

 

2) 객체

// 클래스 정의 - 틀, 설계도
public class Bread {
    String name;  // 빵의 이름
    int calorie; // 빵의 칼로리
}
  • 미완성 > 생성자 필요

3) 생성자

  • 클래스로 어떻게 객체를 만들 것인가를 정의한 방법
  • 코드 구현
// 클래스 정의 - 틀, 설계도
public class Bread {
    String name;  // 빵의 이름
    int calorie; // 빵의 칼로리
    
    // 생성자 정의 - 어떻게 결과물을 만들 것인가에 대한 방법을 '강제'
    public Bread(String name, int calorie) {
		    this.name = name;
		    this.calorie = calorie;
    }
}
  • 객체 생성(new 키워드 사용)
public class Main {

    public static void main(String[] args) {
        Bread newBread = new Bread("모닝빵", 200);
        System.out.println(newBread.name);
    }
}

 

2. 인터페이스

 

1) 개념

  • 표준 규격

2) 생성

  • 예시) 마우스
// 마우스 인터페이스 정의
public interface Mouse {

    void leftClick();    // 좌클릭
    void rightClick();   // 우클릭
    void scrollWheel();  // 스크롤휠
}
  • 마우스 인터페이스로 여러 마우스 구현(구현체)
더보기
더보기
  • LogitechMouse 클래스
public class LogitechMouse implements Mouse {
    @Override
    public void leftClick() {
        // 로지텍 마우스 좌클릭 로직 구현
    }

    @Override
    public void rightClick() {
        // 로지텍 마우스 우클릭 로직 구현
    }

    @Override
    public void scrollWheel() {
        // 로지텍 마우스 스크롤휠 로직 구현
    }
}
  • SamsungMouse 클래스
public class SamsungMouse implements Mouse {
    @Override
    public void leftClick() {
        // 삼성 마우스 좌클릭 로직 구현
    }

    @Override
    public void rightClick() {
        // 삼성 마우스 좌클릭 로직 구현
    }

    @Override
    public void scrollWheel() {
        // 삼성 마우스 좌클릭 로직 구현
    }
}
  • 다른 기업 마우스든 모두 똑같이 마우스 타입으로 타이핑 가능 > 다형성

3. JSON과 XML

 

1) JSON

  • 클라이언트와 서버가 통신할 때 사용하는 데이터 양식
  • Key와 Value로 이루어진 데이터를 정리하는 방식
{ //key  value
  "이름": "홍길동",
  "나이": 30,
  "사는곳": "서울",
  "개발자인가": true
}

 

2) XML

  • 가독성이 떨어지고, 불필요한 용량을 잡아먹는다는 단점
<root>
  <이름>홍길동</이름>
  <나이>30</나이>
  <사는곳>
    <시>서울시</시>
    <구>강남구</구>
    <동>대치동</동>
  </사는곳>
  <개발자인가>true</개발자인가>
</root>

 

4. 라이브러리와 프레임워크

 

1) 라이브러리

  • 애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음
  • 장점
    • 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아짐
    • 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장
  • 단점
    • 라이브러리가 업데이트 되지 않거나 지원이 중단될 경우 문제가 발생
    • 버전 호환성 문제로 인해 다른 라이브러리나 기존 코드와 충돌이 발생
    • 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적
    • 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘듬

2) 프레임 워크

  • 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경
  • 일하기 위한 틀을 제공 / 해당 틀 안에서 개발
  • 장점
    • 일관된 구조를 제공 > 코드의 일관성과 가독성을 높여주며 팀 협업이 편해짐
    • 필요한 기능과 도구를 제공하여 개발자들이 핵심 비즈니스 로직에 집중
    • 보안 관련 기능을 기본적으로 제공
    • 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행
    • 방대한 커뮤니티 지원을 받으며, 다양한 문서를 활용
  • 단점
    • 처음 익히는 데 시간이 많이 소요
    • 새로운 버전이 기존 코드와 호환되지 않을 수 있음
    • 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경하기 어려울 수 있음

3) 정리

  • 프레임워크는 라이브러리들의 모음

 

4) 스프링 프레임워크

  • 자바(Java) 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크 > Spring
  • 중요한 이유:  복잡한 엔터프라이즈급 애플리케이션 개발을 보다 쉽고 효율적 > 강력하고 포괄적인 기능을 제공 / 술적인 복잡성은 Spring이 대신 처리

5. HTTP와 API

 

6. Annotation과 Lombok

 

1) Annotation

  • 자바 코드에 메타 데이터를 추가하여 코드에 특별한 의미를 부여, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용
  • 예시: @Override
public interface Mouse {

    void leftClick();
    void rightClick();
    void scrollWheel();
}
public class LogitechMouse implements Mouse {
    @Override
    public void leftClick() {
        // 로지텍 좌클릭 로직 구현
    }

    @Override
    public void rightClick() {
        // 로지텍 우클릭 로직 구현
    }

    @Override
    public void scrollWheel() {
        // 로지텍 스크롤휠 로직 구현
    }
}
  • @Override가 바로 어노테이션

2) Lombok 라이브러리

  • 보일러 플레이트 코드를 줄여주는 라이브러리로 자동으로 보일러 플레이트 코드를 생성하여 코드의 가독성과 유지보수성을 높여줌
  • 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성
  • 보일러 플레이트 코드: getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드
  • Lombok 사용 전후 코드량 비교

 

3) 주요 Lombok Annotation

  • @Getter, @Setter
@Getter
@Setter
public class User {
    private String name;
    private int age;
  
  /** 아래 코드를 @Getter, @Setter 어노테이션이 생성해준다.
    public String getName() {
	    return name;
    }

    public void setName(String name) {
	    this.name = name;
    }
    
    public int getAge() {
	    return age;
    }

    public void setAge(int age) {
	    this.age = age;
    }
    **/
}

 

  • @ToString
@ToString
public class User {
    private String name;
    private int age;
}

// 객체를 String으로 변환해주는 역할을 수행함
  • @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private int age;
}
  • @Slf4j
@Slf4j
public class UserService {
    public void logMessage() {
        log.info("This is a log message");
    }
}

 

7. Servlet 개념

 

1) 서블릿 개념

  • 서버에서 실행되어 클라이언트의 요청을 처리하고, 그 결과를 동적으로 생성하여 응답하는 자바 프로그램
  • 정적인 데이터가 아니라, 요청에 따라 다른 결과를 만들어내는 똑똑한 자바 클래스
  • 자바 웹 애플리케이션에서 특정 URL 요청에 대한 비즈니스 로직을 실행

2) 서블릿 역할

  • 클라이언트가 보낸 데이터(HTTP Request)를 읽고 해석
  • 조회, 계산 등 비즈니스 로직을 수행
  • 결과를 생성하여 클라이언트에게 보냄
  • jakarta.servlet.http.HttpServlet 클래스를 상속받아 구현

3) 서블릿 컨테이너 개념

  • 우리가 만든 서블릿 클래스(`.java`)는 스스로 실행 X
  • 서블릿을 실행하고 관리하며 웹 서버와 통신하게 해주는 전문적인 환경이 필요
  • 대표: 톰캣(Tomcat)

4) 서블릿 컨테이너 역할

  • 서블릿의 생명주기(생성, 실행, 소멸) 관리
  • HTTP 요청을 받아 서블릿에게 전달
  • 서블릿의 응답을 받아 클라이언트에게 전송
  • 동시에 여러 요청이 들어와도 문제없이 처리

'🔌 SPARTA > Courses' 카테고리의 다른 글

스탠다드반 1회차: MVC & REST API  (0) 2026.02.02
Spring MVC / Data JPA  (0) 2026.01.30
배열과 컬렉션  (1) 2026.01.28
완전 탐색과 그리디 알고리즘  (1) 2026.01.27
알고리즘 개념  (1) 2026.01.27