22.04.25

오혜원·2022년 4월 25일

java

목록 보기
8/18

Review - 배열

: 같은 자료형 변수들의 집합
: 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]


객체 지향 프로그래밍(Object Oriented Programming, OOP)

: 현실 모델링으로 프로그램 제작

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


0개의 댓글