백엔드 발표 2주차

최효승·2021년 3월 19일

Java - Reflection

자바 리플렉션은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 수 있고 메소드를 호출할 수도 있다.

Reflection은 class, constructor, method, field 의 정보를 가져올 수 있다.

클래스 찾기

Class c = (찾고싶은)클래스명.class;
c.getName();

위 코드는 효승.class를 그냥 할당하는 것이다. 그래서 효승.class의 정보를 알 수 있었다.

하지만 클래스를 참조하지 못하고 이름만 알고있을 때에는 이렇게 할 수 있다.

Class c = Class.forName("이름");
c.getName();

생성자 찾기

Constructor constructor = c.getDeclaredConstructor();

만약 인자가 있는 생성자를 찾고 싶을 때에는
c.getDeclaredConstructor(String);

이런 식으로 인자를 넣으면 타입과 일치하는 생성자를 찾는다.

메소드 찾기와 호출

add(int a, int b) return a+b;
라는 함수가 있을 때
호출은 invoke()로 할 수 있다.

Method method = c.getDeclaredMethod("add");
int returnVal = method.invoke(5, 2);

Field(변수) 찾기

Field field = c.getDeclaredField("변수명");

과연 어디서 사용할 지?

클라이언트에서 서버로 수정요청을 보낼 때, 모든 필드가 채워져 보내지는 경우도 있지만 모든 필드가 안 채워서 오는 경우도 있다.
이 경우에 null이 올 수도 있는데 데이터에 반영이 되면 안된다.

이런 경우에 자세히는 모르지만 Reflection을 쓸 수 있다고 한다.

특정 필드만 수정 대상일 때



Java - lamda

람다 함수는 익명 함수를 지칭하는 용어이다.

함수를 보다 단순하게 표현

(매개변수)->{함수 몸체}
(int a, int b)->{return a+b;}

인터페이스의 실용적인 쓰임

어떤 프로젝트를 개발자A 와 개발자B 가 분담하여 만든다고 하자.
A는 클래스를 만들고 B는 클래스를 사용하는 로직을 만들 때,

A는 매개변수 2개만 필요하다 생각하여 2개만 있는 함수를 만들었고
B는 매개변수 3개가 필요하다 생각하여 3개가 있는 함수를 만들면
문제가 발생한다...

따라서 이럴 때 필요한 것은 협업자 상호 간의 구체적인 약속이다.
클래스를 사용할 개발자가 메소드를 인터페이스로 만들어서 제공하면 클래스를 만드는 개발자는 그에 맞게 구현하면 되고 반대의 경우도 가능하다.

함수형 인터페이스 람다형

interface Math {public int Calculate(int i, int j); } // 인터페이스

main () {
Math plusLamda = (first, second)->first+second;
print(plusLamda.calculate(4,3);
}

스프링

객체 의존 주입 DI(Dependency Injection)

기존 java처럼 서비스 클래스에서 new하여 생성하는 경우

카페.java

new 컵,new 우유,new 원두,new 머신

객체를 생성하고 삭제하는 연산을 모두 서비스 클래스에서 한다.

하지만 기존 java와 달리 스프링 컨테이너에게 객체를 맡기는 경우

컵은 안에서 드실꺼면 필요하고요. 주문이 들어가면 원두와 커피머신이 필요해요. 또 라떼류를 만들 때는 우유가 들어가니까 우유를 만들어주세요.

간단하게 객체를 생성하고 관리하는 건 스프링 프레임워크가 해주니까 우리는 서비스만 하면 된다?!

profile
I I IZ1

0개의 댓글