: 같은 자료형 변수들의 집합
: index(위치)값으로 접근 가능
◆ Lotto 번호 생성 Example
package ch04_1;
public class Ch04_1Ex053 {
public static void main(String[] args) {
int lotto[] = new int[6];
for (int i = 0; i < lotto.length; i++) {
lotto[i] = (int) (Math.random() * 45) + 1;
// 중복 제거를 위해 배열의 기존값과 비교
for (int j = 0; j < i; j++) {
if (lotto[i] == lotto[j]) {
i--; //lotto[i]에 새로운 값 할당을 위해 i 감소
System.out.print("(" + lotto[i] + " 중복, 재할당) ");
break;
}
}
System.out.println();
for (int i = 0; i < lotto.length; i++) {
System.out.print(lotto[i] + " ");
}
}
}
출력 결과
(25 중복, 재할당) (43 중복, 재할당)
1 8 2 25 43 38
정렬
각 배열의 수를 비교 > 작은 수를 앞에 저장, 큰 수를 뒤에 저장
package ch04_1;
import java.util.Arrays;
public class Ch04_1Ex055 {
public static void main(String[] args) {
int iArr[] = {51, 15, 65, 85, 12, 5};
System.out.print("정렬 전 : ");
for (int i = 0; i < iArr.length; i++) {
System.out.print(iArr[i] + "\t");
}
// 비교 정렬 (오름차순)
for (int i = 0; i < iArr.length; i++) {
for (int j = i + 1; j < iArr.length; j++) {
if (iArr[i] > iArr[j]) {
int tmp = iArr[j];
iArr[j] = iArr[i];
iArr[i] = tmp;
}
}
}
System.out.println();
System.out.print("정렬 후 : ");
for (int i = 0; i < iArr.length; i++) {
System.out.print(iArr[i] + "\t");
}
int iArr2[] = {29, 04, 29, 84, 83, 54};
// Arrays.toString : 출력 메소드
System.out.println(Arrays.toString(iArr2));
// Arrays.sort : 오름차순 정렬 메소드
Arrays.sort(iArr2);
System.out.println(Arrays.toString(iArr2));
}
}
출력 결과
정렬 전 : 51 15 65 85 12 5
정렬 후 : 5 12 15 51 65 85
[29, 4, 29, 84, 83, 54] .
[4, 29, 29, 54, 83, 84]
set, Map, List
: 자료 저장 구조 기초 방법론 (Array) + 객체 지향 프로그래밍(OOP) 설계 방법론
: HashSet, ArrayList
package ch04_1;
import java.util.ArrayList;
import java.util.Collections;
public class Ch04_1Ex055 {
public static void main(String[] args) {
// set, Map, List - 기본 자료 저장 구조
// > HashSet, ArrayList
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(24); list.add(342); list.add(42);
list.add(89); list.add(45); list.add(20);
// list 출력
System.out.println(list);
// list 오름차순 정렬
Collections.sort(list);
System.out.println(list);
// list 내림차순 정렬
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);
}
}
출력 결과
[24, 342, 42, 89, 45, 20][20, 24, 42, 45, 89, 342]
[342, 89, 45, 42, 24, 20]
: 현실 모델링으로 프로그램 제작
◆ Reveiw
▶ 모델링
: 개념 탐색(개념 모델링) > 개념 정리, 선별(논리 모델링) > 결과 변환(물리 모델링)
: java 물리 모델링의 결과 - class(~.java 파일)
▶ Class
: 프로그램 실행 단위 (class 단위로 메모리에 load)
: 설계도 - 이를 기반으로 제한없이 생성 가능
: new를 통해 메모리에 load
: 하나의 파일에 여러 class 선언 가능
: 하나의 파일에 public class는 하나만 선언 가능
→ public class의 이름으로 파일 이름 선언
▷ 구성 요소
: package, import, 멤버 변수, 멤버 메소드(method), 생성자(특수 메소드)
: 프로그램 실행 단위이기 때문에 모든 코드는 class 내부에 와야 함.
: 예외) 폴더 구조 : package, import
package : class를 컴파일한 결과가 들어가는 폴더의 위치
import : 사용하기 위해 필요한 class의 위치
→ 선언 방법 : 상위폴더.하위폴더 - 폴더 이름은 소문자 권장
member 변수 : class의 구성 요소 중, 데이터적 요소
member method : class의 구성 요소 중, 행위적(동작) 요소
◆ 게시판 class Example
package ch04_2;
import java.util.Scanner;
class Ch04_2Board {
// class member 변수
String title;
String writer;
String contents;
String date;
String category;
// class member method
void printBoard() {
System.out.println("구분 : " + category);
System.out.println("제목 : " + title);
System.out.println("작성자 : " + writer);
System.out.println("작성일 : " + date);
System.out.println("내용 : " + contents);
}
}
public class Ch04_2Ex03 {
public static void main(String[] args) {
Ch04_2Board bArr[] = new Ch04_2Board[100];
int input, cnt = 0;
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("0 : 종료, 1 : 작성, 2 : 출력");
System.out.print("메뉴 선택 : ");
input = sc.nextInt();
sc.nextLine(); // 버퍼 비우기
if (input == 0) {
System.out.println("Program exit.");
sc.close();
break; //System.exit(0);
} else if (input == 1) {
if (cnt == 100) {
System.out.println("게시글이 꽉 찼습니다. 관리자에게 문의하세요.");
continue;
}
bArr[cnt] = new Ch04_2Board();
System.out.print("제목 입력 : ");
bArr[cnt].title = sc.nextLine();
//sc.nextLine();
System.out.print("작성자 입력 : ");
bArr[cnt].writer = sc.nextLine();
System.out.print("내용 입력 : ");
bArr[cnt].contents = sc.nextLine();
System.out.print("날짜 입력 : ");
bArr[cnt].date = sc.nextLine();
System.out.print("카테고리 입력 : ");
bArr[cnt].category = sc.nextLine();
cnt++;
} else if (input == 2) {
if (cnt == 0) {
System.out.println("작성된 게시글이 없습니다.");
}
for (int i = 0; i < cnt; i++) {
bArr[i].printBoard();
}
} else {
System.out.println("Wrong input. Try again.");
}
}
}
}
출력 결과
0 : 종료, 1 : 작성, 2 : 출력
메뉴 선택 : 2
작성된 게시글이 없습니다.
0 : 종료, 1 : 작성, 2 : 출력
메뉴 선택 : 1
제목 입력 : t
작성자 입력 : w
내용 입력 : cc
날짜 입력 : ddd
카테고리 입력 : cate
0 : 종료, 1 : 작성, 2 : 출력
메뉴 선택 : 2
구분 : cate
제목 : t
작성자 : w
작성일 : ddd
내용 : cc
0 : 종료, 1 : 작성, 2 : 출력
메뉴 선택 : 0
Program exit.
◆ package
: 현재 ~.java 파일의 컴파일된 결과 위치
: 상위 폴더에서 하위 폴더 순으로 표현(선언), .(dot)를 통해 폴더 구분
→ .(dot) : ~의 내부를 지칭 (ex. a.b - a 안 b)
: 하나의 ~.java 파일에 하나의 package 선언만 가능
: java 폴더는 소문자 선호
: comple - javac -d . PackageObject.java
→ PackageObject.class 파일을 ch04_2 폴더 내부의 packagetest 폴더에 삽입
◆ import
: 현재 ~.java 파일에서 필요한 class 파일 위치 표현
: 상위 폴더에서 하위 폴더 순으로 표현(선언), .(dot)를 통해 폴더 구분
: 하나의 ~.java 파일에 필요한만큼 import 선언 가능
: java 폴더는 소문자 선호
: ex) import java.util.Scanner;
→ java 폴더 > util 폴더 > Scanner class 불러오기
: ex) import java.uitl.*;
→ java 폴더 > util 폴더 > 모든 class 불러오기
→ 사용하지 않는 class 파일도 호출 > 프로그램 효율 ↓ > 비권장사항
◎ 접근제한자
: 접근제한자가 없는 경우, 같은 폴더(package)에서만 접근 가능
: class 안에서 class / member 변수 / member 메소드는 각각의 접근제한자 필요
→ public class 여도 public 변수, public 메소드가 아니면 접근 불가
멤버 변수
: class를 구성하는 변수
: class의 속성 (ex. 사람 class의 Name)
지역 변수
: method 작업에 필요한 변수
: (), {} 내부에 존재하는 변수
→ ex. for (int i = 0; i < arr.length; i++)
: method가 실행될 때만 생성, 종료되면 소실
: 선언된 (), {} 밖에서는 접근 불가
◎ 명명
멤버 변수와 지역 변수는 같은 이름을 가질 수 있으나, 일반적으로 다른 이름을 사용
멤버 변수와 지역 변수의 이름이 같을 경우, 지역 변수를 먼저 적용
멤버 변수와 지역 변수의 이름이 같을 경우, this를 사용해 멤버 변수에 접근 가능
package ch04_2;
class LocalVarTest {
int memberInt = 999;
void print() {
int localInt = 333; // print() 실행 시에만 생성되는 지역 변수
System.out.println("print() localInt : " + localInt);
// eclipse에서 멤버 변수(파랑)와 지역 변수(갈색)의 색상이 다름
int memberInt = 555;
System.out.println("local memberInt : " + memberInt); // 지역 변수를 먼저 적용
// 멤버 변수 지정 방법
System.out.println("LocalVarTest memberInt : " + this.memberInt);
// this : 현재 instance(class)를 지칭
}
}
public class Ch04_2Ex04 {
public static void main(String[] args) {
{
int iVar1 = 777; // 지역 변수
System.out.println("main 지역 변수 : " + iVar1);
}
// 선언된 {} 밖에서 접근 불가
//System.out.println(iVar1); // error
LocalVarTest lvt = new LocalVarTest();
lvt.print();
}
}
출력 결과
main 지역 변수 : 777
print() localInt : 333
local memberInt : 555
LocalVarTest memberInt : 999