Stack,Spring 적용

hee·2022년 10월 19일
0
post-thumbnail

Stack이란?

한 방향에서만 값을 추가하고 제거할 수 있는 자료구조 입니다. 가장 먼저 추가된 값이 가장 마지막에 제거되는 방식 입니다.

Stack의 연산

  • push(값): 값을 스택의 가장 바깥 부분에 추가 합니다.
  • pop(): 스택의 가장 바깥 부분의 값을 제거 합니다.
  • peek(): 스택의 가장 바깥 부분을 반환 합니다.
  • isEmpty() : 스택이 비어 있으면 true를 반환 합니다.

Stack 연산의 push() 구현 코드

public class Stack01 {
    private int[] arr = new int[10000]; // 임의의 크기가 10000인 배열 생성 
    private int pointer = 0; 
  
    public void push(int value){
       this.arr[this.pointer] = value; // pointer의 값의 index에 value 값 저장 
        this.pointer++;
    }

Stack 연산의 pop() 구현 코드

public int pop(){
    int value = this.arr[this.pointer-1]; // 현재 pointer에서 -1
    this.pointer--; // pointer 감소
    return value; // 꺼낸 값 반환

userDao - Factory 적용

이전 시간에 추상 클래스, 클래스 분리, 인터페이스를 하였고 ConnetionMaker 인터페이스의 구현체인 AwConnectionMaker,LocalConnectionMaker 에서 주입 받아야하는 관계가 되었습니다.

주입 받는 부분을 모아 놓은 것이 Factory 입니다. 이렇게 모아두게 되면 객체를 한곳에서 관리 할 수 있게 됩니다.

Factory 적용 코드

public class UserDaoFactory {
   
    public UserDao awsUserDao() {
        UserDao userDao = new UserDao(new AwsConnectionMaker());
        return userDao;
    }

    public UserDao localUserDao() {
        UserDao userDao = new UserDao(new LocalConnectionMaker());
        return userDao;
    }
}

Spring 적용

장점:

  1. Bean을 만들어 놓고 불러 쓰기가 좋다. 하지만 모든 Bean을 로딩해서 쓰는것은 장점이자 단점
  2. SingleTone 패턴으로 생성해 준다. GC(Garbage Collection)을 줄일 수 있다.
  3. 테스트 하기 용이하다.

Spring 적용 후 UserDaoTest 리팩토링 코드

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class) // 스프링 테스트를 사용하기 위한 설정
@ContextConfiguration(classes = UserFactory.class) // 설정정보 불러온다.
class UserDaoTest {

    @Autowired //의존 관계 자동으로 주입 한다. 
    ApplicationContext context; //ApplicationContext 인터페이스 선언 한다.. 

    @Test
    void addAndSelect() {
        UserDao userDao = context.getBean("awsUserDao", UserDao.class);
        String id = "18";
        User user = new User(id, "백기선", "1525");
        userDao.add(user);

        User selectName = userDao.findById(id);
        Assertions.assertEquals("백기선", selectName.getName());
    }

}

실습을 진행하며 다양한 처음 보는 용어가 많이 나왔습니다. 그래서 정리 해봤습니다.

  • @Configuration : Bean을 등록하기 위한 어노테이션, Bean을 사용하는 클래스에 반드시 붙여줘야 합니다.
  • @Bean : Spring IoC 컨테이너가 관리하는 자바의 객체임을 표시하는 어노테이션
  • 싱글톤 패턴 : 객체의 인스턴스가 오직 1개만 생성 되는 것
  • @ExtendWith : 확장을 선언적으로 등록할 역할. Spring을 사용할 경우@ExtendWith(SpringExtension.class)으로 사용한다.
  • @ContextConfiguration : 자동으로 만들어주는 애플리케이션 컨텍스트의 설정 파일 위치를 지정 합니다.
  • @Autowired : 스프링이 관리하는 빈을 주입 받는다.
  • Bean : 스프링이 IOC 방식으로 관리하는 오브젝트
  • Bean Factory : 스프링의 IOC를 담당하는 핵심 컨테이너로 빈을 관리 하는 기능을 담당 합니다.
  • ApplicationContext : bean factory의 인터페이스의 하위 인터페이스이다.
  • @WebMvcTest : web을 위한 테스트이다.

0개의 댓글

관련 채용 정보