배열의 선언과 초기화
- 배열 : 여러개의 데이터를 한꺼번에 처리할 때 사용
char[] arrayVar = new char[7]; // => 캐릭터 배열 타입
//=> 7개짜리 캐릭터 배열을 만든다.
=> 네모 하나가 char 타입의 변수다. 7개가 들어가는 캐릭터 배열을 만들었다. 빈 배열. 크기만 할당.
배열에 값 넣기
arrayVar[2] = ‘c’; // 2번 인덱스에 'c' 문자 할당
arrayVar = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’}; // 모든 문자 할당
- 배열 안의 하나하나를 element/item, 요소라고 말한다.
- Java에서는 배열을 생성하면 엘레먼트의 값이 디폴트 값으로 초기화됨.
Int[] arrayVar = new int[7];
=> 인트형 배열의 경우 모두 0으로 초기화되어 생성.
배열과 반복문
- 반복문을 사용하지 않은 배열 탐색은 비효율적이다.
<예시 1>
각 배열 인덱스에 점수를 할당하고 반복문을 통해 모든 인덱스의 점수와 그 합을 출력하는 코드
int[] scores = new int [4];
scores[0] = 97;
scores[1] = 90;
scores[2] = 91;
scores[3] = 98;
int sum = 0;
for ( int i = 0; i < scores.length; i++ ) {
System.out.println(“scores[“+i+”] : “ + scores[i];
sum = sum + scores[i];
}
2차원 배열의 선언과 초기화
char[][] twoDimArr = new char[3][7];
=> tabular 형태의 배열
int[][] square = {
{14,2,3,1,4},
{3,24,67,5},
{25,4,67,2},
{3,86,8,57}
};
=> but, 직접 이렇게 세우는 경우는 흔치 않다.
<예시 2>
이차원 배열을 출력하는 코드. i가 행, j가 열이 된다.
for (int i=0; i<square.length; i++) {
for (int j=0; j<square[i].length; j++) {
System.out.print(square[i][j] + “ ”);
}
System.out.println();
}
향상된 for문 사용
<예시 3>
이차원 배열을 출력하는 코드. row가 행, item이 원소가 된다. row는 square 배열 안의 각각의 행을 의미.
for (int[] row : square) {
for (int item : row) {
System.out.print(item + “ “);
}
System.out.println();
}
ArrayList
배열의 특징 (단점)
- 같은 타입의 엘레먼트만 사용 가능
- 한번 생성하면 길이를 바꿀 수 없음
ArrayList
- 배열을 사용하기 쉽도록 만든 클래스
- 객체 내부의 배열을 관리 - 자동으로 길이를 조절
=> 요즘은 배열보다 ArrayList를 많이 씀.
ArrayList 생성과 사용
ArrayList<String> colors = new ArrayList<>();
//=> 제너릭 문법을 사용해서 type을 파라미터로 받음. String타입만 가지는 ArrayList를 만들겠다.
colors.add(“red”);
colors.add(“yellow”);
colors.add(“green”);
// 데이터 인덱스 접근
colors.get(0);
colors.get(1);
// 데이터 모두 삭제
colors.clear();
Map
ArrayList 특징
- 데이터 저장을 인덱스 기반으로 수행 (배열과 동일)
- 데이터의 순서가 있음 (Sequence data type)
- 인덱스는 제로(0) 베이스
Map
- 데이터를 키를 통해 관리
- 데이터를 키/값 쌍으로 저장/관리
=> key/value pair 인덱스가 없음 - 데이터의 순서가 없음.
=> 실무에서 많이 쓴다.
Map 생성과 사용
// Map 생성
HashMap<String, String> products = new HashMap<>();
//key value (key와 value 모두 string을 쓰겠다)
// Map에 데이터 추가
products.put(“i01”, “iphone 7”);
//key value
products.put(“i02”, “iphone 7s”);
// 데이터 접근 - 키 사용
products.get(“i01”);
products.get(“i02);
// 데이터 모두 삭제
products.clear();
ThinkPoint
주변에서 키와 값을 활용한 예가 있을까?
키는 유일한 값이 되어야 하고 그 키에 데이터를 바인딩해서 간단한 키로 데이터를 찾아오는 방식, 예를 들어 주민번호를 통해 주민의 정보를 찾을 수 있다. 키는 유일하고 중복되지 않아야 한다. ㄷ이터베이스도 키/값을 저장할 수 있는 레디스(Redis) 같은 DB도 많이 사용되고 있다. 서버에서 사용자 인증을 위한 정보를 저장하는 세션도 키/값 타입으로 데이터를 사용한다.
==> 자바에는 리스트와 맵, 집합 세 가지 컬렉션 프레임워크를 통해 구조적으로 지원한다. 각 데이터타입은 약간씩 변형된 파생형 타입을 갖는다. 사용할 데이터의 구조에 맞게 컬렉션을 사용하는 것이 중요하다. 처리하고자하는 데이터 구조에 맞는 적절한 컬렉션을 사용하는 것이 프로그램을 효율적으로 작성할 수 있는 방법이다.
실습 코드 1 - 배열
package java9Politec;
public class Lesson05_Arrays {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] intArr = new int[5];
intArr[0] = 1;
intArr[1] = 2;
intArr[2] = 3;
intArr[3] = 4;
intArr[4] = 5;
System.out.println(intArr);
//=> 이렇게 출력하면 객체가 있는 주소값이 출력되게 됨.
System.out.println(intArr[3]);
//=> 인덱스가 주어지면 값에 접근 가능.
//배열 전체를 풀스캔 할땐 반복분 사용.
for (int i=0; i<intArr.length; i++) {
System.out.printf("%d", intArr[i]);
}
System.out.println();
//새로운 for문이 자바 5부터 추가됨.
for (int item:intArr) {
System.out.printf("%d", item);
}
System.out.println();
//배열 선언 다른 방법
int[] intArr2 = {1,2,3,4,5,6};
for(int item:intArr2) {
System.out.printf("%d", item);
}
//2차원 배열
int[][] twoDimArr = {
{101, 102, 103, 104},
{201, 202, 203, 204},
{301, 302, 303, 304},
{401, 402, 403, 404}
};
//2차원 배열 : 테이블 형 데이터
//202호, 403호는 배달하지 않고, 나머지 집에 우유를 배달하는 코드.
for(int[] floor:twoDimArr) {
for(int home:floor) {
if(home==202||home==403) {
continue; //밑코드를 수행하지 않고 다음 for문으로 돌아간다.
}
System.out.println(home);
}
}
}
}
실습 코드 2 - ArrayList, Map
package java9Politec;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class Lesson06_ArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
/////// List 사용 ///////
// List는 배열 대체용이다. 배열보다 사용하기 편리하고 성능은 떨어질 수 있지만 대용량에선 오히려 성능을 발휘할 수 있도록 최적화되있다.
List<String> myList = new ArrayList<>();
// List 객체지만 실제론 ArrayList. 과거엔 ArrayList<String> 식으로 다 써줘야 했으나 지금은 상관 없다.
myList.add("red");
myList.add("blue");
myList.add("green");
myList.add("yellow");
System.out.println(myList);
// 배열은 반복문 써서 하나씩 출력해야하는데 리스트는 컨텐츠까지 잘 출력해준다.
myList.add("black");
// 리스트의 마지막 인덱스에 추가한다. 리스트도 배열과 마찬가지로 인덱스 시스템을 이용한다.
String third = myList.get(2);
System.out.println(third);
// 2번 인덱스인 green이 출력됨을 확인.
// 사이즈는 추가할때마다 계속해서 늘어난다.
//myList.clear();
//System.out.println(myList);
// 비어있는 리스트가 출력됨을 확인.
/*------------------------------------------------------------------------*/
// Immutable List (unmodifiableList)
// 요즘에는 리스트 컨텐츠를 함부로 바꿀수 없는 형태인 Immutable List를 많이 사용함.
// readonly의 느낌이고, 장점은 데이터를 병렬로 처리한다 할 때 데이터의 컨텐츠가 바뀌지 않아서 코드가 더 강건하게 작성될 수 있다.
List<String> readOnlyList = Collections.unmodifiableList(myList);
System.out.println(readOnlyList);
//readOnlyList.add("white");
//System.out.println(readOnlyList);
// readOnly 리스트에 요소를 추가했을 때 에러가 발생함을 확인. readOnly 리스트에선 add자체가 불가능하다.
/*------------------------------------------------------------------------*/
// Java9 of 메소드 사용하여 Immutable List 사용.
List<String> java9List = List.of("red", "blue", "green");
// 이렇게 만들어진 java9List는 디폴트로 immutable List이다.
// 따로 리스트 생성하고 add 할 필요 없이 바로 요소 추가 가능하다.
System.out.println(java9List);
java9List.add("white");
// 에러 발생함을 확인. immutable collection이 디폴트기 때문에 add 불가능.
/*=========================================================================*/
/////// Map 사용 ///////
Map<String, String> myMap = new HashMap<>();
// Key와 Value 모두 String타입인 Map을 만들겠다.
myMap.put("i5", "아이폰5");
myMap.put("i6", "아이폰6");
myMap.put("i7", "아이폰7");
System.out.println(myMap);
myMap.clear(); // 전체 데이터 삭제
// Immutable Map
Map<String, String> immutableMyMap = Collections.unmodifiableMap(myMap);
// Java9 of 메소드 - 최초의 데이터 초기
Map<String, String> java9Map =
Map.of("i5", "아이폰5",
"i6", "아이폰6",
"i7", "아이폰7");
java9Map.put("i8", "아이폰8");
// immutable이기 때문에 추가가 안됨을 확인.
}
}
'Programming > Java' 카테고리의 다른 글
[Java9 프로그래밍] 08. 객체지향 모델링 (0) | 2020.03.13 |
---|---|
[Java9 프로그래밍] 07. 함수(메소드) (0) | 2020.03.13 |
[Java9 프로그래밍] 04. 제어 흐름 (Control Flow) (0) | 2020.03.13 |
[Java9 프로그래밍] 03. 변수와 타입의 이해 2 (0) | 2020.03.13 |
[Java9 프로그래밍] 02. 변수와 타입의 이해 1 (0) | 2020.03.13 |