반응형

📂 Javascript

 

스코프(Scope)

변수에 접근할 수 있는 범위로. 지역 스코프와 전역 스코프가 있다.

 

클로저(Closer)

함수 내부에 함수를 작성할 때 마다 생기는 것으로 외부 함수의 변수를 사용할 수 있기 때문에 반환하여 사용한다.


📂 Java

 

오버로딩

한 클래스 내에 동일한 이름의 메소드를 둘 이상 정의하는 것이다. 단, 매개변수의 선언이 달라야 한다.

void println(int n);
void println(int n, int m);

 

오버라이딩

상위 클래스에 정의된 메소드를 하위 클래스에서 다시 정의하는 행위이다. 즉 상위 클래스의 메소드를 무효화 시키는것이다. 단, 변수는 오버라이딩이 가능하지 않다.

class A{
	public void println(){
    	System.out.println("This is A.class");
    }
}

class B extends A{
	public void println(){
    	System.out.println("This is B.class");
    }
}

 

어노테이션

자바 컴파일러에게 메세지를 전달하기 위한 목적의 메모이다.

//Example
@Controller
@Overide
@Bean

 

인터페이스

구현체마다 동작하는 방법이 다르기 때문에 인터페이스를 제공한다.

 

메소드 영역

인스턴스의 생성 및 클래스 변수의 접근을 위해 생성되는 메모리 공간

 

스택 영역

지역 변수와 매개 변수가 저장되는 공간

 

힙 영역

인스턴스가 할당되는 역역. 인스턴스의 소멸 시점과 방법은 지역 변수와 다르다. 그러기 때문에 서로 별도의 공간에 저장한다.

 

가비지 컬렉션

인스턴스의 소멸 시점에 인스턴스를 소별하는 방식

String str1 = "AAA";
String str2 = "BBB";

//가비지 컬렉션에 의해 소멸되는 시점
str1 = null;
str2 = null;

 

오토박싱

Integer a = 10;
/*
	아래와 같은 내용으로 변경되어, 자동으로 컴파일 된다.
	Integer a = new Integer(10);
*/

 

오토 언박싱

Integer a = 10;
int b = a;
/*
	아래와 같이 자동으로 변경되어 컴파일 된다.
	int b = a.intValue();
*/

 

List와 ArrayList 차이

List는 인터페이스이고 ArrayList는 List에 상속된 클래스이다.

 

Enum

기존 Java에서 인터페이스로 열거하여 사용하던 중 발생된 문제점을 해결하기 위해 나온 새로운 열거체

 

Optional

기존에는 객체의 Null 값을 확인하기 위해 조건문을 통해 확인을 해야했다. 어려운 작업은 아니었으나, 번거롭다는 단점이 있었다. 이와 같이 NullpotionException을 방지하기 위해 나온 클래스이다.


📂 Spring

 

View가 호출되는 원리

컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다.

 

객체를 API로 만드는 방법

컨트롤러에 @ResponseBody 어노테이션을 사용하면 된다. @ResponseBody를 사용하면 스프링 컨테이너는 viewResolver 대신에 HttpMessageConverter가 동작한다.

 

프로젝트 테스트하는 방법

main이 아닌 test 폴더에 접근하여 진행한다. 이때 @SpringBootTest라는 어노테이션을 클래스에 첨부하고 테스트 메소드에는 @Test라는 어노테이션을 붙인다. 

 

스프링 빈 주입하는 방법

@Autowired 어노테이션이 있으면 스프링이 연관된 객체를 스프링 컨테이너에 찾아서 넣어준다.

  • @Component 어노테이션이 있으면 스프링이 빈으로 자동 등록된다. @Service @Controller @Repository도 @Componen에 속한다.
  • 자바 코드로 직접 스프링 빈을 등록한다. Config 역할을 할 class를 만들어 준 후 @Congifuration 어노테이션을 클래스에 사용한다. 이후 등록될 빈과 그 위에 @Bean을 작성한다.
  • XML로 Config를 만들어서 사용했지만, 최근에는 잘 사용하지 않는다. 

 

AOP

흩어진 관심사를 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이다. 예를 들어 모든 메소드의 호출 시간을 측정하라는 지시가 내려왔다면, 모든 메소드에 System.currentTimeMillis()를 사용하여 측정할 것인가? 이는 메소드 수가 적으면 가능하지만 50개만 넘어도 매우 힘들것이다. 이를 측정하기 위해 AOP 역할을 하는 클래스를 만들어 모든 메소드가 호출될 때 자동으로 실행되게 분리하는 개념이다.

@Aspect
@Component
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..))")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("START: " + joinPoint.toString());
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}

 

반응형

+ Recent posts