[Spring Boot] Java 의 this 와 super 개념 트레이닝

김현수·2024년 5월 25일
0

spring

목록 보기
9/9



🖍️ Java 의 this 와 super 개념 트레이닝


  • this

    • 현재 객체의 인스턴스를 참조하는데 사용


    • 인스턴스 변수와 로컬 변수 구분

      • 생성자나 메서드에서 인스턴스 변수와 같은 이름의
        로컬 변수가 있을 때 이를 구분하기 위해 사용
      • public class Car {
            private String model;
            private int year;
        
            public Car(String model, int year) {
                this.model = model;
                this.year = year;
            }
        }

    • 다른 생성자 호출

      • 생성자 체이닝

      • 같은 클래스 내에서 다른 생성자를 호출할 때 사용

      • public class Car {
            private String model;
            private int year;
        
            public Car(String model) {
               this(model, 0); // 다른 생성자 호출
            }
        
            public Car(String model, int year) {
                this.model = model;
                this.year = year;
            }
        }

    • 현재 객체의 참조 반환

      • 메서드 체이닝 패턴을 구현할 때 this를 반환

      • 메서드를 연속해서 호출 가능

      • public class Car {
            private String model;
        
            public Car setModel(String model) {
                this.model = model;
                return this;
            }
        }



  • super

    • 부모 클래스의 멤버(변수, 메서드, 생성자)를 참조하는 데 사용


    • 부모 클래스의 생성자 호출

      • 자식 클래스의 생성자에서 부모 클래스의 생성자를
        명시적으로 호출할 때 사용

      • 부모 클래스의 초기화를 보장

      • public class Vehicle {
            private String model;
        
            public Vehicle(String model) {
                this.model = model;
            }
        }
        
        public class Car extends Vehicle {
            private int year;
        
            public Car(String model, int year) {
                super(model); 
                this.year = year;
            }
        }

    • 부모 클래스의 메서드 호출

      • 자식 클래스에서 부모 클래스의 메서드를 오버라이드한 경우

      • 부모 클래스의 메서드를 명시적으로 호출할 때 사용

      • public class Vehicle {
            public void display() {
                System.out.println("This is a vehicle.");
            }
        }
        
        public class Car extends Vehicle {
            @Override
            public void display() {
                super.display(); // 부모 클래스의 메서드 호출
                System.out.println("This is a car.");
            }
        }

    • 부모 클래스의 변수 참조

      • 자식 클래스에서 부모 클래스의 변수를 참조할 때 사용

      • public class Vehicle {
            private String model;
        
            public Vehicle(String model) {
                this.model = model;
            }
        }
        
        public class Car extends Vehicle {
            private int year;
        
            public Car(String model, int year) {
                super(model); 
                this.year = year;
            }
        
            public void display() {
                System.out.println("Model: " + super.model);
                System.out.println("Year: " + year);
            }
        }



  • Spring Boot에서의 this와 super 사용

    • 의존성 주입(DI)에서의 this 사용

      • @Autowired를 사용하여 의존성을 주입할 때

      • 현재 객체의 메서드나 변수를 가리키기 위해 this를 사용

      • @Service
        public class CarService {
            private final CarRepository carRepository;
        
            @Autowired
            public CarService(CarRepository carRepository) {
                this.carRepository = carRepository;
            }
        }

    • 부모 클래스의 메서드 오버라이딩에서 super 사용

      • 사용자 정의 기능을 추가하거나 기본 동작을 확장할 때
      • 부모 클래스의 메서드를 호출하기 위해 super 를 사용
      • @Service
        public class CustomUserDetailsService extends DefaultUserDetailsService {
            @Override
            public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
                UserDetails userDetails = super.loadUserByUsername(username);
                // 추가 로직 구현
                return userDetails;
            }
        }



  • 기타 유용한 개념

    • 스태틱(static)

      • 클래스 수준에서 공유되는 변수나 메서드를 정의할 때 사용

      • 객체 인스턴스 없이 클래스 이름으로 접근 가능

      • public class MathUtils {
            public static int add(int a, int b) {
                return a + b;
            }
        }
        
        int sum = MathUtils.add(5, 10);

    • 싱글톤(Singleton)

      • 애플리케이션 전체에서 하나의 인스턴스만 존재하도록
        보장하는 디자인 패턴

      • public class Singleton {
            private static Singleton instance;
        
            private Singleton() {}
        
            public static Singleton getInstance() {
                 if (instance == null) {
                     instance = new Singleton();
                 }
                 return instance;
            }
        }



요약

  • "this"

    • 현재 객체의 참조
    • 인스턴스 변수와 로컬 변수를 구분
    • 다른 생성자를 호출할 때 사용

  • "super"

    • 부모 클래스의 멤버(변수, 메서드, 생성자)를 참조할 때 사용

  • Spring Boot 에서는 this와 super를 DI와
    메서드 오버라이딩 상황에서 자주 사용

  • 기타 유용한 개념으로는 스태틱 변수 및 메서드, 싱글톤 패턴 등이 존재

profile
일단 한다

0개의 댓글