본문 바로가기

컴퓨터공부/Java

[java 자바공부] 람다 사용 .java 파일 다른곳쓰기, @RequireArgsConstructor, 람다가 사용되는 방법 ,A a = new A 일때 a를 뭐라고 불리우나?

by Life & study 2023. 10. 26.
반응형

[java 자바공부] 람다 사용 .java 파일 다른곳쓰기, @RequireArgsConstructor, 람다가 사용되는 방법 ,A a = new A 일때  a를 뭐라고 불리우나?

 

람다의 식에서 다른 .java 파일로 옴겨서 쓰기 

 

람다의 식에서 다른 .java 파일로 옴겨서 쓰기 

500

 

 

 

 

@RequireArgsConstructor 이란 무엇인가?

 

@RequireArgsConstructor는 Lombok 

 

라이브러리에서 제공하는 어노테이션 중 하나로, 클래스에 선언된 final 필드나 @NonNull이 붙은 필드에 대한 생성자를 자동으로 생성해주는 기능을 합니다.

즉, 이 어노테이션을 사용하면 해당 필드들을 인자로 받는 생성자를 직접 작성하지 않아도 됩니다. 이는 코드의 가독성을 높이고, 불필요한 반복 코드를 줄여주는 역할을 합니다.

예를 들어, 다음과 같은 코드가 있다고 가정해봅시다.

java
public class Example {
    private final String name;
    private final int age;

    public Example(String name, int age) {
        this.name = name;
        this.age = age;
    }
}


이 코드는 @RequireArgsConstructor를 사용하면 다음과 같이 간단하게 표현할 수 있습니다.

java
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class Example {
    private final String name;
    private final int age;
}


이렇게 되면 Lombok 라이브러리가 Example(String name, int age) 생성자를 자동으로 생성해줍니다. 

이는 특히 필드가 많은 클래스에서 코드의 양을 크게 줄여줍니다.

 

 

 

 

 람다가 사용되는 방법

 

@funtionalInterface

단 한개의 추상메소드를 갖는
것을 말한다.

단점

람다식으로 쓴것을
받을려면

람다의 공식

람다식
@funtionalInterface
interface abcdfuntion {
public void test();
}

 

 

 

 

A a = new A 일때  a를 뭐라고 불리우나?

 

a는 '객체 참조 변수' 또는 '인스턴스' 라고 불린다.

 

new A() 부분은 A 클래스의 인스턴스를 생성합니다. 

이 과정에서 메모리에 A 클래스의 객체가 생성되고, 이 객체의 메모리 주소가 a 변수에 저장됩니다. 

따라서 a 변수는 이 객체를 참조하게 됩니다.

따라서 a는 A 클래스의 인스턴스를 참조하는 참조 변수라고 할 수 있습니다. 이를 통해 a를 사용하여 A 클래스의 메소드를 호출하거나, 필드에 접근할 수 있습니다.

 

결론,

참조변수

객체 참조 변수

인스턴스

 

 

 

 

@오버라이드 설명

 

 

package Hello;

class supClass{
	public supClass() {}; //생성자
	void sayHello() {
		System.out.println("supClass Hello");
	}
}

class subClass extends supClass{
	public subClass() {}; // 생성자
	@Override // 오버라이드 표시를 위한 어노테이션
	void sayHello() {
		System.out.println("subClass Hello!!");
	}
}

public class test{
	public static void main(String args[]) {
		// supClass 참조변수가 supClass 인스턴스를 참조 --> 오버라이딩 되지 않은 상위 클래스(supClass)의 메서드가 호출됨
		supClass class1 = new supClass();
		class1.sayHello();
		
		// supClass 참조변수가 subClass 인스턴스를 참조 --> 오버라이딩 된 하위 클래스(subClass)의 메서드가 호출됨
		supClass class2 = new subClass();
		class2.sayHello();
		
		// subClass 참조변수가 subClass 인스턴스를 참조 --> 오버라이딩 된 하위 클래스(subClass)의 메서드가 호출됨
		subClass class3 = new subClass();
		class3.sayHello();
	}
}

 

 

 

 

생성자 와 메서드는 무엇인가?

 

생성자

public ClassName() {
    // 생성자 내용
}

 

메서드

public void methodName() {
    // 메서드 내용
}

 

값이 있는 메서드

 

public ReturnType methodName() {
    // 메서드 내용
    return someValue;
}

 

 

 

 

 

public class Animal {
    String name;

    // 생성자
    public Animal(String name) {
        this.name = name; // 초기화 작업
    }

    // 메서드
    public void introduce() {
        System.out.println("안녕하세요, 저의 이름은 " + this.name + "입니다.");
    }
}

// 사용 예시
Animal cat = new Animal("Tom"); // 'Animal' 클래스의 인스턴스 생성 및 초기화
cat.introduce(); // 메서드 호출, 출력: "안녕하세요, 저의 이름은 Tom입니다."

 


 

주어진 코드의 실행 순서는 다음과 같습니다:

// 생성 인스턴스

Animal cat = new Animal("Tom"); // 'Animal' 클래스의 인스턴스 생성 및 초기화


Animal cat = new Animal("Tom"); 코드를 통해 'Animal' 클래스의 인스턴스 생성이 시작됩니다.

 

// 생성자 호출

    public Animal(String name) {
        this.name = name; // 초기화 작업
    }


public Animal(String name) 생성자가 호출됩니다. 

이때, "Tom"이라는 문자열이 name 매개변수로 전달됩니다.

 

// 생성자 내부의 코드 실행 및 초기화

    // 생성자
    public Animal(String name) {
        this.name = name; // 초기화 작업
    }

 

생성자 내부의 this.name = name; 코드가 실행됩니다. 

이때, this.name는 생성되는 인스턴스의 name 필드를 의미하며, name은 생성자의 매개변수를 의미합니다. 

즉, 생성되는 인스턴스의 name 필드가 

//초기화 = 실행이란 뜻인가? "Tom"으로 초기화됩니다.

 

//인스턴스 생성이 완료됨
이제 'Animal' 클래스의 인스턴스 생성이 완료되었으며, 

이 인스턴스를 참조하는 cat 변수가 선언됩니다.

 

 

    // 메서드
    public void introduce() {
        System.out.println("안녕하세요, 저의 이름은 " + this.name + "입니다.");
    }
}

 

 

 

//메소드 호출cat.introduce(); 코드를 통해 introduce 메서드가 호출됩니다.
public void introduce() 메서드가 실행됩니다.
메서드 내부의 System.out.println("안녕하세요, 저의 이름은 " + this.name + "입니다."); 코드가 실행됩니다.

 이때, this.name는 cat 객체의 name 필드를 의미하며, 이는 앞서 생성자에서 "Tom"으로 초기화되었습니다.

 


따라서 "안녕하세요, 저의 이름은 Tom입니다."라는 문자열이 출력됩니다.

cat.introduce(); // 메서드 호출, 출력: "안녕하세요, 저의 이름은 Tom입니다."

 

 

 

 

반응형

댓글