스프링부트 백엔드 로드맵, 개발자의 업무, @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를 사용할 수 있습니다.
'컴퓨터공부 > Springboot' 카테고리의 다른 글
Springboot - java -version, port 구성 ,Spring Boot Devtools ,디렉터리, 어노테이션 (0) | 2023.10.24 |
---|---|
스프링부트 springboot 와 node.js 관계, IoC 컨테이너, @Validated @NotNull @NotEmpty, public interface, @NotNull(message = "아이디는 필수입니다.", groups = Create.class) (0) | 2023.08.27 |
스프링부트 공부노트 (6) 포스트맨 (0) | 2023.08.18 |
스프링부트 공부노트 (5) (0) | 2023.08.15 |
댓글