스프링부트 백엔드 로드맵, 개발자의 업무, @Override , @Deprecated,@Deprecated,@SuppressWarnings("unchecked"), 스프링 빈이란?
본문 바로가기

컴퓨터공부/Springboot

스프링부트 백엔드 로드맵, 개발자의 업무, @Override , @Deprecated,@Deprecated,@SuppressWarnings("unchecked"), 스프링 빈이란?

by Life & study 2023. 8. 22.
반응형

스프링부트 백엔드 로드맵, 개발자의 업무, @Override ,  @Deprecated,@Deprecated,@SuppressWarnings("unchecked"),

스프링 빈이란?

 

 

[백엔드 개발자의 스프링부트 공부노트] 백엔드 로드맵

 

 

 

 

 

[백엔드 개발자의 스프링부트 공부노트] 백엔드 개발자의 업무

 

과제 할당 -> 과제 분석 -> 개발 -> 테스트 -> QA -> 배포 -> 유지보수

 

[백엔드 개발자의 스프링부트 공부노트] @Override

 

@Override


@Override는 하위 클래스가 상위 클래스의 메서드를 재정의(override)할 때 사용되는 주석입니다. 이 주석은 개발자가 의도적으로 메서드를 재정의하고자 할 때 사용하여, 컴파일러가 오류나 경고를 표시하도록 도와줍니다.


java
public class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 낼 수 있습니다.");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // 출력: 멍멍!
    }
}

 

위 예제에서, Dog 클래스는 Animal 클래스를 상속받아 makeSound 메서드를 재정의합니다. 

@Override 주석은 Dog 클래스가 makeSound 메서드를 의도적으로 재정의하고 있음을 나타냅니다.

 

tip

 

기존  class Animal에 

         class Dog extends Animal

         Animal myDog = new Dog();
         myDog.makeSound(); // 출력: 멍멍!

 

 

 

새로운 클래스 + extends 기존 클래스 붙이기

public class Dog extends Animal {

 

[백엔드 개발자의 스프링부트 공부노트]     @Deprecated

    @Deprecated

 

java
public class OldAndNew {
    @Deprecated
    public void oldMethod() {
        System.out.println("이 메서드는 사용되지 않는 메서드입니다.");
    }

    public void newMethod() {
        System.out.println("이 메서드를 사용해주세요.");
    }
}

public class Main {
    public static void main(String[] args) {
        OldAndNew test = new OldAndNew();

        test.oldMethod(); // 출력: 이 메서드는 사용되지 않는 메서드입니다. (경고 발생)
        test.newMethod(); // 출력: 이 메서드를 사용해주세요.
    }
}


위 예제에서, OldAndNew 클래스의 oldMethod는 더 이상 사용되지 않으므로 @Deprecated 주석이 추가되었습니다. 따라서 해당 메서드를 사용할 때 경고가 발생합니다.

 

tip

1.사용하지않는 메소드는 @Deprecated 로 주석처럼 메소드 반영 안시키기 

2.     @Deprecated 쓰고   public void newMethod() {} 를 통하여 새로운 메소드를 적고 

3.       OldAndNew test = new OldAndNew();에 담아서 표기하기!

 

 

 

[백엔드 개발자의 스프링부트 공부노트]  @SuppressWarnings("unchecked") 컴파일 경고 무시!

 

@SuppressWarnings:


@SuppressWarnings 주석은 컴파일러가 발생시키는 경고 중 특정 경고를 무시하도록 지정할 때 사용됩니다. 이 주석은 개발자가 경고를 인식하고 적절한 처리를 하였으나, 아직 수정되지 않은 코드에서 발생하는 경고를 숨기고 싶을 때 사용할 수 있습니다.
java

import java.util.ArrayList;
import java.util.List;

public class Main {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        List myList = new ArrayList();
        myList.add("테스트1");
        myList.add("테스트2");

        List<String> stringList = myList;

        for (String item : stringList) {
            System.out.println(item);
        }
    }
}


위 코드에서, 컴파일러는 타입이 지정되지 않은 myList를 List<String> 타입의 stringList로 변환할 때 경고를 발생시킵니다. 그러나 @SuppressWarnings("unchecked") 주석을 사용하여 이 경고를 무시하게 만들 수 있습니다. 

출력값은 다음과 같습니다:

 

테스트1
테스트2


이러한 주석은 특정한 상황에서 유용하게 사용될 수 있습니다. 하지만 코드에서 경고가 발생하는 원인을 잘 분석하고, 가능한 한 경고를 수정하는 것이 좋습니다.

 

 

[백엔드 개발자의 스프링부트 공부노트] 스프링에서 빈이란? ( UserService 빈을 주입하는 세 가지)

 

 

이 코드는 UserController 클래스에서 UserService 빈을 주입하는 세 가지 다른 방법을 보여줍니다.


필드 주입(Field Injection)

// 필드 주입
@RestController
public class UserController {
    @Autowired // 빈을 주입하는 애너테이션
    private UserService userService; // UserService 타입의 userService 빈을 주입받는 필드
    
    // UserController의 다른 메소드들...
}
필드 주입은 Spring 컨테이너가 UserService 타입의 빈을 찾아서 직접 필드에 주입하는 방법입니다. 코드 작성이 간결하여 간단한 구현에 좋지만, 테스트와 변경에 유연하지 않습니다.

 

 

생성자 주입(Constructor Injection) (권장)

생성자 주입(Constructor Injection) (권장)
// 생성자 주입 (권장)
@RestController
public class UserController {
    private final UserService userService; // 주입받을 UserService 타입의 userService 필드
    
    @Autowired // 빈을 주입하는 애너테이션
    public UserController(UserService userService) {
        this.userService = userService; // 생성자를 통해 UserService 타입의 빈을 주입받음
    }
    
    // UserController의 다른 메소드들...
}


생성자 주입은 Spring 컨테이너가 생성자를 통해 UserService 타입의 빈을 주입하는 방법입니다. 이 방법은 테스트와 변경에 유연하며 불변성을 보장합니다. 일반적으로 생성자 주입을 권장하는 사례입니다.

 

 

 

메소드 주입(Method Injection)

// 메소드 주입
@RestController
public class UserController {
    private UserService userService; // 주입받을 UserService 타입의 userService 필드
    
    @Autowired // 빈을 주입하는 애너테이션
    public void setUserService(UserService userService) {
        this.userService = userService; // 메소드를 통해 UserService 타입의 빈을 주입받음
    }
    
    // UserController의 다른 메소드들...
}

 


메소드 주입은 Spring 컨테이너가 메소드를 통해 UserService 타입의 빈을 주입하는 방법입니다. 이 방법은 필요한 경우 동적으로 빈을 교체할 수 있습니다. 

 

코드 실행 순서:


애플리케이션이 시작됩니다.
Spring 컨테이너는 UserService 빈을 생성하고 초기화합니다.
Spring 컨테이너는 UserController 빈을 생성합니다.
각 주입 방식에 따라 다음 단계가 수행됩니다.
필드 주입: Spring 컨테이너는 UserService 빈을 UserController의 userService 필드에 주입합니다.
생성자 주입: Spring 컨테이너는 UserService 빈을 UserController의 생성자를 통해 전달하여 userService 필드에 주입합니다.
메소드 주입: Spring 컨테이너는 UserService 빈을 setUserService 메소드를 통해 주입합니다. 이 메소드가 호출되어 userService 필드에 주입됩니다.
이제 UserController가 정상적으로 작동하여 UserService를 사용할 수 있습니다.

 

반응형

댓글