728x90

1. 두 수를 입력하여, 다음과 같은 결과가 나오는 GET API 만들기

[결과 예시]

{
	"add": 덧셈 결과,
	"minus": 뺄셈 결과,
	"multiply": 곱셈 결과
 }

 

[작성 코드]

public class Inflearn{
    @GetMapping("/api/v1/calc")
    public Calculator calculator(
    @RequestParam("number1") int number1, 
    @RequestParam("number2") int number2) 
    {
        return new Calculator(number1, number2);
    }
}


public class Calculator {
    public int add;
    public int minus;
    public int multiply;

    public Calculator(int number1, int number2) {
        this.add = number1 + number2;
        this.minus = number1 - number2;
        this.multiply = number1 * number2;
    }
}

 

[코드 설명]

  • Get API로 만들어야 하기 때문에 @GetMapping을 사용하였다.
  • calculator 메서드는 number1, number2 두 개의 숫자를 파라미터로 받고 Caculator 객체를 리턴 해준다.
  • Caculator 클래스에서 생성자는 두 수를 받아 덧셈, 뺄셈, 곱셈을 하여 저장한다.
  • Caculator 클래스에서 작업이 끝나면 결과를 반환해준다.

 

[실행 결과]

 

2. 날짜를 입력하면, 무슨 요일인지 알려주는 GET API를 만들기

[결과 예시]

 {
	"dayOfTheWeek": "MON"
 }

 

[작성 코드]

public class Inflearn{
    @GetMapping("/api/v1/day-of-the-week")
    public DayOfTheWeek getDate(@RequestParam("date") String date) {
        return new DayOfTheWeek(date);
    }
}


import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;

public class DayOfTheWeek {
    public String dayOfTheWeek;

    public DayOfTheWeek(String date) {
        String[] dateArr = date.split("-");
        
        LocalDate localDate = LocalDate.of(Integer.parseInt(dateArr[0]), 
        Integer.parseInt(dateArr[1]), Integer.parseInt(dateArr[2]));
        
        DayOfWeek dayOfWeek = localDate.getDayOfWeek();
        
        String day = dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.ENGLISH);
        
        this.dayOfTheWeek = day;
    }

}

 

[코드 설명]

  • GET API로 만들어야 하기 때문에 @GetMapping을 사용하였다.
  • getDate 메서드는 문자열 date를 파라미터로 받고 날짜 객체를 리턴 한다.
  • DayOfTheWeek 클래스에서 생성자는 문자열 형식의 date를 받아 처리를 한다.
    • 문자열 date를 "-" 기준으로 자른다.
    • LocalDate.of() 파라미터에는 년, 월, 일이 순서대로 들어가고 LocalDate 객체를 생성한다.
    • LocalDate 객체인 localDate에서 getDayOfWeek() 메서드를 사용하여 요일을 가져온다.
    • 가져온 요일을 getDisplayName()메서드를 사용하여 dayOfTheWeek 필드에 요일을 할당한다.
  • DayOfTheWeek 클래스에서 작업이 끝나면 dayOfTheWeek 필드에 할당된 값을 리턴한다.

[실행 결과]

 

💡 LocalDate.of()

더보기

LocalDate 클래스에서 제공해주는 LocalDate.of()를 살펴 보았다. 이 메서드는Year-Month-DayOfMonth순서로

파라미더가 들어가고,해당 날짜를 나타내는LocalDate객체를 생성하는 역할을 한다.

 

💡 getDayOfWeek()

더보기

getDayOfWeek()가  어떻게 동작하는지 궁금해서 확인해 보았다.

getDayOfWeek() 메서드는 enum을 반환하고, 이 enum은 요일을 나타내는데 사용한다.
그럼 위 코드에서 enum은 어떤 형식인지 궁금해서 또 들어가봤다.

of(int dayOfWeek) 메서드는 "MONDAY, TUESDAY"등 요일이 적힌 enum 클래스를 리턴 하고 있고,

이 메서드는 ISO-8601 표준에 따라 1부터 7까지의 값을 가지고, 1은 월요일을 나타내고, 7은 일요일을 나타낸다고 한다.

 

3. 여러 수를 받아 총 합을 반환하는 POST API 만들기

[결과 예시]

 {
	"numbers": [1, 2, 3, 4, 5]
 }

 

[작성 코드]

public class Inflearn{
    @PostMapping("/api/v1/sum")
    public int sum(@RequestBody NumberList numbers) {
        int sum = 0;
        for (Integer num : numbers.numbers) {
            sum += num;
        }

        return sum;
    }
}


import java.util.List;

public class NumberList {
    public List<Integer> numbers;
}

 

[코드 설명]

  • POST API로 만들어야 하기 때문에 @PostMapping을 사용하였다.
  • sum 메서드는 NumberList 객체인 numbers를 받는다.
  • NumberList 객체는 숫자 목록을 저장하기 위한 클래스이다.
    • numbers 필드는 숫자 목록을 저장하는 List<Integer> 타입이다.
  • NumberList 객체에 포함된 숫자 리스트를 반복하여 모든 숫자를 더한 값을 반환한다.

[실행 결과]

 

 

강의 링크 👉 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

728x90
728x90

1. 어노테이션이란?

먼저 어노테이션을 설명하기 전에 메타데이터에 대해 조금 알고 가야할 것 같다.

 

  • 메타데이터(Metatdata)란?
    • 데이터의 대한 속성 정보이다. '데이터에 관한 구조화 된 데이터', '다른 데이터를 설명해 주는 데이터'라고도한다.
    • 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여 되는 데이터라고 한다.
  • 어노테이션이란? 
    • 메타데이터의 일종이다.
    • 프로그램을 처리할 때 실행 과정에서 어떻게 데이터를 처리할지 알려주는 서브 데이터라고 한다.
    • 코드에서 @를 붙여 사용하는 코드
    • JDK 1.5버전 이상부터 사용가능

 

2. 어노테이션을 사용하는 이유 (효과) 는 무엇일까?

  • 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공해준다.
  • 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공해준다.
  • 런타임 시 특정 기능을 실행하도록 정보를 제공해준다.

위와 같은 이유에서 사용한다. 그럼 어노테이션의 종류는 무엇이 있을까?

@Override

컴파일러에게 오버라이딩 하라는 메소드라고 알려준다.

 

@Service

스프링프레임 워크에서 자주 쓰이는 어노테이션으로 핵심 비즈니스 로직을 담은 서비스를 클래스 빈에 등록하기 위해 사용한다.

 

@SpringBootApplication

스프링 실행 시 필요한 다양한 설정을 알아서 자동으로 해준다. 

 

@GetMapping

스프링 프레임워크에서 자주 쓰이는 어노테이션으로 Http get요청이 오면 @GetMapping이 붙은 메소드가 실행된다.

 

위와 같이 많은 어노테이션이 있고 상황에 따라 알맞은 어노테이션을 사용하면 된다.

 

3. 나만의 어노테이션은 어떻게 만들 수 있을까?

1. 어노테이션 생성

어노테이션은 인터페이스 앞에 @를 붙여 만들 수 있다.

public @interface MakeAnnotaion {
    
}

 

2. 메타 어노테이션

메타 어노테이션에는 아래와 같은 종류가 있다.

 

@Target : 사용할 어노테이션에 적용할 대상을 지정하는데 사용한다.

ElementType.ANNOTATION_TYPE 어노테이션
ElementType.CONSTRUCTOR 생성자
ElementType.FIELD 멤버변수, Enum 상수
ElementType.LOCALVARIABLE 지역변수
ElementType.METHOD 메서드
ElementType.PACKAGE  패키지
ElementType.PARAMETER 매개변수
ElementType.TYPE 타입(클래스, 인터페이스, Enum)
ElementType.TYPE_PARAMETER 타입 매개변수(제네릭과 같은 매개변수)
ElementType.TYPE_USE 타입이 사용되는 모든 대상

 

@Documented : 어노테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 하는 어노테이션이다.

자바에서 제공하는 표준 어노테이션과 메타 어노테이션 중에 @Override와 @SuppressWarnings 어노테이션을 제외하고 모든 어노테이션에 @Documented 어노테이션이 적용되어 있다.

 

@Inherited : 하위 클래스가 어노테이션을 상속받도록 한다.

상위 클래스에 @Inherited를 붙이면 하위 클래스에서도 동일하게 사용된다.

 

@Retention : 어노테이션의 지속 시간을 결정하는 데 사용한다.

RetentionPolicy.SOURCE 컴파일 전까지 지속됨, 컴파일 이후엔 사라진다.
RetentionPolicy.CLASS 런타임이 실행되기 전까지만 존재한다.
RetentionPolicy.RUNTIME
런타임 시 사용되된다. (즉, 클래스 파일까지 존재하며 실행시 사용된다.)

 

@Repeatable : 어노테이션을 반복하여 사용할 수 있도록 허용하는 어노테이션이다.

@Retention(RetentionPolicy.RUNTIME) // 어노테이션은 특정 어노테이션의 지속 시간을 결정하는 데 사용
@Inherited // 하위 클래스가 어노테이션을 상속받도록 함
@Documented // 어노테이션에 대한 정보가 javadoc으로 작성한 문서에 포함
@Target(ElementType.METHOD)// 사용할 어노테이션을 적용할 대상을 지정
public @interface MakeAnnotaion {
    
}

 

 

위의 코드는 컴파일 이후에도 사용할 수 있는 @Retention(RetentionPolicy.RUNTIME) 사용하였고, 하위 클래스에서 어노테이션을 상송 받을 수 있도록 하였다. 또, @Documented를 사용하여 해당 어노테이션에 대한 정보가 문서로 저장될 수 있도록 하였고, 메서드 선언 시 적용할 수 있도록 @Target(ElementType.METHOD)를 사용하였다.

위와 같이 필요한 어노테이션을 상황에 맞게 적용하여 만들면 된다.

 

출처 - https://ittrue.tistory.com/160

 

3. 만든 어노테이션 사용하기

@MakeAnnotation(name = "HelloController")
@RequestMapping("/hello")
public class HelloController {

}

public class HelloController2 {
	@MakeAnnotation
	String str = null;
    
    @MakeAnnotation
    public void test(){
    
    }
}

 

위와 같이 만든 어노테이션을 적용할 수 있다.

 

[느낀점]

어노테이션에 대해 궁금해 하지 않았는데 이번 기회로 어노테이션이 어떤건지 알 수 있게 되었다.

커스텀 어노테이션도 구현하는 것이 마냥 어렵다고 느꼈는데 각각 어떤 기능을 하는지 어디에 필요한지 정리하면 생각보다 쉽게 커스텀 어노테이션 구현이 가능하다는 것을 알게 되었다.

조금 더 공부해서 직접 어노테이션을 만들어 프로젝트에도 한번 적용해보아야겠다.😁

 

강의 링크 👉 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

728x90
728x90

어? 강의가 되게 재밌어 보이네?

오랜 기간 취업 준비를 하는 도중 프로젝트 없이 공부만 하다보니 개발이 재미 없어지기 시작하였습니다.

물론 오랜 취업 준비 기간으로 힘든 것도 있지만 내가 직접 만드는 서비스가 없다보니 흥미가 떨어진 것 같다고 생각하였습니다. 그렇게 어떤 프로젝트를 할까, 개인으로 할까? 팀으로 할까? 많은 고민을 하던 중 '자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!' 라는 강의를 알게 되었습니다.

강의 목차를 보니 웹 개발에 필요한 기술부터 네트워크, AWS 등 정말 백엔드로서 필요한 지식을 한 강의에서 제공해주는 것에 매력을 느꼈습니다. 하지만 돈 없는 취준생은 듣고 싶지만 부담이 되었습니다.😭

 

이건 꼭 해야해..!

그렇게 며칠을 고민하던 중 지식 공유자께서 직접 참여를 하고, 다양한 사람들과 의견을 주고 받을 수 있는 스터디가 열린다는 것을 알게 되었습니다. 거기에 대상 강의가 바로..! 제가 구매할지 말아야할지 고민하던 '자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!' 였습니다.

저는 개발 실력도 중요하지만 네트워킹에 참여하는 것도 중요하다고 생각하였는데 이 기회는 두마리의 토끼를 동시에 잡을 수 있는 매력적인 이벤트였습니다. 강의를 사야할지 말아야할지 고민하던 저는 주저 없이 스터디를 신청하게 되었고, 강의도 바로 구매하였습니다.😁

 

그렇게 시작한 OT(0일차)

16일 금요일 스터디의 시작을 알리는 OT를 하였습니다. 지식공유자이신 최태현님께서 대략적인 스터디 일정을 알려주셨고, 자바의 역사에 대해 알려주셨습니다.

스터디 일정을 보니 정말 타이트하고 힘들 것 같지만 저는 시간 많은 취준생 아니..백수이기 때문에 열심히 스터디 일정에 맞춰서 달려보겠습니다. 이번 기회로 참여하신 다른 러너분들과 많은 이야기와 정보를 주고 받고 싶습니다.

 

오랜 취업준비를 하였지만 그런 것 치고는 큰 실력향상이 있진 않았던 것 같아 이번 기회에 제대로 마음 잡고 공부해보려고 합니다..! 화이팅..! (급 종료)

 

 

강의 링크 👉 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

728x90

+ Recent posts