배열(Array) 오름차순 정렬

import java.util.Arrays;

public class Sort{
	public static void main(String[] args)  {
		int[] i_arr = {3,4,1,2,5};
		String[] s_arr = {"C","D","A","B","E"};
        
		Arrays.sort(i_arr);
		Arrays.sort(s_arr);
        
		for (int i : i_arr) {
			System.out.print(i);
		}
        
		System.out.print("\n");
        
		for (String s : s_arr) {
			System.out.print(s);
		}
	}
}




12345
ABCDE

 

배열(Array) 내림차순 정렬

주의할 점은 byte, char, int, short, double, float, long 같은 기본형 타입의 배열에는 적용이 불가능하니 Interger같은 wrapper class를 적용해야 한다.

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class Sort{
	public static void main(String[] args)  {
		Integer[] i_arr = {3,4,1,2,5};
		String[] s_arr = {"C","D","A","B","E"};
        
		Arrays.sort(i_arr, Comparator.reverseOrder());
		Arrays.sort(s_arr, Collections.reverseOrder());
        
		for (int i : i_arr) {
			System.out.print(i);
		}
        
		System.out.print("\n");
        
		for (String s : s_arr) {
			System.out.print(s);
		}
	}
}




54321
EDCBA

 

ArrayList 오름차순 정렬

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(3);
list.add(5);
list.add(2);
list.add(4);
list.add(1);

Collections.sort(list);

for (Integer l : list) {
	System.out.printf("%d", l);
}



12345

 

ArrayList 내림차순 정렬

java.util.Collections 클래스에서 내림차순 정렬은 제공하지 않습니다.

하지만 리스트를 반대로 뒤집어주는 reverse 메소드가 있기 때문에 먼저 오름차순으로 정렬한 후 리스트를 반대로 뒤집어야 합니다.

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(3);
list.add(5);
list.add(2);
list.add(4);
list.add(1);

Collections.sort(list);
Collections.reverse(list);

for (Integer l : list) {
	System.out.printf("%d", l);
}



54321

 

배열(Array) -> ArrayList 변환

String[] arr = new String[5];

arr[0] = "one";
arr[1] = "two";
arr[2] = "three";
arr[3] = "four";
arr[4] = "five";

ArrayList<String> arrList = new ArrayList<>();

for(String k : arr) {
	arrList.add(k);
}

+ ) Arrays 메서드 사용

String[] arr = new String[5];

arr[0] = "one";
arr[1] = "two";
arr[2] = "three";
arr[3] = "four";
arr[4] = "five";

ArrayList<String> arrList = new ArrayList<>(Arrays.asList(arr));

 

ArrayList -> 배열(Array)

ArrayList<String> arrList = new ArrayList<>();

arrList.add("one");
arrList.add("two");
arrList.add("three");
arrList.add("four");
arrList.add("five");

String[] arr = new String[arrList.size()];
int size = 0;
for(String k : arrList) {
	arr[size++] = k;
}

+ ) List 메서드 사용

ArrayList<String> arrList = new ArrayList<>();

arrList.add("one");
arrList.add("two");
arrList.add("three");
arrList.add("four");
arrList.add("five");

String[] arr = arrList.toArray(new String[arrList.size()]);

배열(Array) 과 ArrayList

  배열(Array) ArrayList
크기 초기화시 고정
int[] arr = new int[5];
초기화시 크기를 표시하지 않고 유동적
ArrayList arr = new ArrayList();
속도 초기화시 메모리에 할당되어 속도가 빠르다. 추가시 메모리를 재할당하여 속도가 느리다.
변경 크기 변경 불가 추가, 삭제 가능
add(), remove() 로 가능
다차원 int[][] arr = new int[5][5]; 불가능
public class Test {
	public static void main(String[] args) {
    	
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;
		arr[3] = 4;
		arr[4] = 5;
        
		ArrayList<Integer> arrList = new ArrayList<Integer>();
		// 데이터 추가
		arrList.add(1);
		arrList.add(2);
		arrList.add(3);
		arrList.add(4);
		arrList.add(5);
        
		// 0번째 인덱스 삭제
		arrList.remove(0);
        
		// 1번째 인덱스 값 가져오기
		arrList.get(1);
	}
}

DI (Dependency Injection, 의존성 주입)

  • 빈(Bean) 설정파일에서 의존 관계의 정보만 추가해주면 조립은 Spring Framework가 해준다.

  • @Autowired 어노테이션으로 Bean을 자동 주입 가능

  • 인터페이스를 사용하여 객체 간의 결합력을 낮춘다.

  • 높은 재사용성, 변경에 민감하지 않고 독립적인 테스트가 가능하다.

 

의존성을 주입하는 방법

등록된 빈을 사용하기 위한 Spring Framework의 DI 방법은 생성자 주입, 수정자 주입, 필드 주입 3가지가 있다.

여기서 생성자 주입과 필드 주입을 볼 것이다.

 

생성자 주입 (Constructor Injection)

단일 생성자인 경우에는 @Autowired 어노테이션 조차 붙이지 않아도 되지만 2개 이상의 생성자인 경우에는 어노테이션을 붙여주어야 한다.

@Controller
public class HelloController {

	private HelloService helloService;

	@Autowired
	public HelloController(HelloService helloService) {
		this.helloService = helloService;
	}

}

 

필드 주입 (Field Injection)

필드 주입은 간단하다. 필드에 @Autowired 어노테이션을 붙여주면 자동으로 의존성 주입이 된다.

편리하기 때문에 많이 접할 수 있다.

@Controller
public class HelloController {

	@Autowired
	private HelloService helloService;

}

 

왜 생성자 주입을 권장할까?

  • A가 B를 다시 B가 A를 순환 참조하는 것을 방지할 수 있다.

  • 필드를 final로 선언할 수 있기 때문에 실행 중에 객체가 변하는 것을 막을 수 있고, 오류를 사전에 방지할 수 있다.

  • 의존관계가 실행중에 동적으로 변경하는 경우는 거의 없음므로 생성자 주입을 권장한다.

'Web > Spring' 카테고리의 다른 글

[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] MyBatis 란?  (0) 2020.12.15
[Spring] Maven 과 Gradle  (0) 2020.12.13
[Spring] Spring Framework 와 Spring Boot  (0) 2020.12.13

+ Recent posts