(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)
- 어제의 Review(기본개요)
- 자바의 가장 큰 특징
- 플랫폼 독립적=Anywhere
내가 만든 코드가 어떤 플랫폼에서도 실행 된다.
JMV(Java Virtual Mechine)으로 가능함. - 객체지향(OOP)
- 런타임언어
컴파일 하기는 하지만, 메모리 할당이 컴파일 때가 아니라 실행시에 된다.
- 플랫폼 독립적=Anywhere
- Data Type
- Primitive Type
- 정수 - byte, short, int, long
- 부동소수점 - float, double
- 논리 - Boolean - true, false
- 문자 - char - 0~65535
- Reference Type
- 배열
- Homogeneous Collection = 같은 종류의 데이터를 모아 놓은 것.
- immutable = 불변한다.=갯수 확장 X
- 선언->생성->초기화 과정으로 사용할 수 있다.
- primitive type의 배열의 선언, 생성, 초기화(생성은 reference type과 같다.)
- 선언 : 선언된 타입에 따라서 Primitive, Reference 배열로 나뉜다. 이에 따라 선언방법이 다르다.( int[] )
- 생성 : (ex. jumsu = new int[10];)
- 초기화 : (ex. junsu[0] = 10;)
- 선언, 생성, 초기화를 한번에 할 수 있다. (ex. int[] jumsu = {10,20,30,40};)
- primitive type의 배열의 선언, 생성, 초기화(생성은 reference type과 같다.)
- 차원
- 1차원
- 2차원
- 다차원
- 길이 - .length
- enum
- 클래스
- 배열
- Primitive Type
- 개발 환경설정
- JDK 설치
- Eclipse 설치 (EE용)
- 연산자
- 3항 - (조건문) ? true : false
- 논리 - short circuit(&&, ||), !
- 비트
- 이동 - <<, >>, >>>
- 연산 - &, |, ~, ^
- 기본 - 사칙, 할당
- 자바의 가장 큰 특징
- 저장에 대한 진화
- 배열이용저장
- 제어문, 반복문
- OOP(객체)
- Collection
- File 저장
- DB 저장
- Web interface로 변환
- 배열이용저장
- 제어문
메소드 내에서는 절차식으로 수행되는제 제어문을 이용한 흐름 제어가 가능하다.- 조건문
조건식 결과에 따라 중괄호 블록을 실행할지 여부를 결정한다.- if - 반드시 조건문이 들어가서 true/fasle로 조건식의 답이 나와야한다.
- 단독 if 문
- if-else 문
- 중첩 if 문
- switch
- switch(표현식 expression)
- 표현식에는 int형으로 묵시적으로 변환되는 값이 와야한다.
- 표현식에는 enum
- 표현식에는 문자열(JDK 1.7 이상)(String)
- switch(표현식 expression)
- if - 반드시 조건문이 들어가서 true/fasle로 조건식의 답이 나와야한다.
- 반복문
- for - 반복 횟수가 정해져 있을때
- for( ; ; )
- for( : ) - JAVA5에 추가
- while - 반복 횟수가 정해져 있지 않을때
- do-while - 무조건 1회 이상 실행 시켜야 할 때
- for - 반복 횟수가 정해져 있을때
- 탈출문
- break - 반복문을 종료시킨다.
- continue - 1회만 skip. 1회만 건너뛴다.
- return - 메소드를 종료. return문도 탈출문의 일부라는걸 알아야한다.
- 반복문에 레이블을 가질 수 있다. = 이름을 가질 수 있다.
break와 continue가 레이블과 같이 사용될 수 있다.
레이블을 이용한 흐름제어가 가능하다.
- 조건문
- Tip
- args이용하기
- 이클립스에서도 실행시 args에 인자를 주고 싶을때
- Run-Run Configuration
- 왼쪽에서 'Java Application'에서 실행할 항목 선택.
- 오른쪽 상단 'Arguments'탭
- 'Program arguments'에서 옆에 'Variable'선택
- 'string_prompt' 선택
- 이렇게 하면 이클립스에서 실행해도 입력을 받고 실행한다.
- 이클립스에서도 실행시 args에 인자를 주고 싶을때
- switch-case문에서 2개이상의 case에 대해 같은 동작을 수행하고자 할때는 case들을 연달아서 쓰고 동작은 맨 밑의 case에만 구현. 그러면 위의 case들 모두 수행되도 맨 아래 case를 수행하고 break로 나가니깐 정상수행된다.
- 임의의 수를 사용하기 위하여 예전에는 Math.random()함수(0~1.0)를 사용하였지만 사용하는데 불편함이 있어서 요즘은 Random클래스를 이용한다.(ex. rand.nextInt(10) )
- Stack, Heap
- Stack은 FILO(First In Last Out)
- Java의 배열은 런타임에 크기가 가변할 수 있기 때문에 Stack에 잡을 수 없다.
- Java에서 배열은 Heap에 잡히고, Heap에 잡힌 배열의 주소를 Stack에 잡는다. 그래서 Stack에는 4byte만 소모한다. 정확하게는 Hash코드값이라고 한다.
- args이용하기
- 실습 코드
- IfApplicationpublic class IfApplication {
//main프로그램 실행 진입점(Entry point)
public static void main(String[] args) {
//args는 프로그램을 실핼 할 때 입력하는 명령행 인자를 저장
//Command Line Arguments
//args에서 하나씩 arg에 담아서 for문 수행
for(String arg : args) {
System.out.println(arg);
}
//점수를 입력받아 60점 이상이면 합격
//그렇지 않으면 불합격을 출력하세요.
if(args.length != 1) {
System.out.println("사용 예 : java IfApplication 70");
System.exit(0);
}
String data = args[0];
int jumsu = Integer.parseInt(data);
if(jumsu>=60) {
System.out.println("합격");
} else {
System.out.println("불합격");
}
}
} - ScannerApplicationimport java.util.Scanner;
public class ScannerApplication {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
/* System.out.print("점수를 입력하세요. : "); int jumsu = scan.nextInt(); if(jumsu >= 60) { System.out.println("합격"); } else { System.out.println("불합격"); } */
//1.점수를 입력받아 학점을 출력하는 프로그램을 작성하세요.
//점수는 0점부터 100점까지 (100점 포함) 입력할 수 있습니다.
//점수가 90점 이상이면 A
//점수가 80점 이상이면 B
//점수가 70점 이상이면 C
//점수가 60점 이상이면 D
//점수가 60점보다 작으면 F를 출력하세요.
//if 블럭, else if 블럭, else 블럭을 이용해서 해결
/* System.out.print("점수를 입력하세요. : "); int jumsu = scan.nextInt();
if((jumsu > 100) || (jumsu < 0)) { System.out.println("0부터 100까지 범위에서 입력하세요."); System.exit(0); }
if(jumsu >= 90) { System.out.println("학점 A"); } else if(jumsu >= 80) { System.out.println("학점 B"); } else if(jumsu >= 70) { System.out.println("학점 C"); } else if(jumsu >= 60) { System.out.println("학점 D"); } else { System.out.println("학점 F"); } */
//205호 앞문에 있는 스위치 값을 저장하는 변수와
//뒷문에 있는 스위치 값을 저장하는 변수를 선언하고
//각 스위치 값은 0 또는 1을 저장합니다.
//0은 on, 1은 off.
//앞문에서 켜고 뒷 문으로 나가면서 불을 끌 수 있도록 제어문을 작성하세요.
//Hint:int front = 0;
// int rear = 0;
// 앞 문 스위치를 켤 때는 F 1
// 앞 문 스위치를 끌 때는 F 0
// 뒷 문 스위치를 켤 때는 R 1
// 뒷 문 스위치를 끌 때는 R 0
//으로 입력합니다.
//아직 반복문 배우기 전이므로 한번만 실행.
//조작은 앞문 스위치 한번, 뒷문 스위치 한번.
int front = 0;
int rear = 0;
System.out.print("스위치를 조작하세요 : ");
if(scan.next().equals("F")) {
front = scan.nextInt();
if(front == 1) {
System.out.println("앞 문의 스위치를 켰습니다.");
}
if((front^rear)==1){
System.out.println("불이 켜졌습니다.");
}
}
System.out.print("스위치를 조작하세요 : ");
if(scan.next().equals("R")) {
rear = scan.nextInt();
if(rear == 1) {
System.out.println("뒷 문의 스위치를 켰습니다.");
}
if((front^rear)==0){
System.out.println("불이 꺼졌습니다.");
}
}
}
} - LightApplicationimport java.util.Scanner;
public class LightApplication {
public static void main(String[] args) {
int front = 0;
int rear = 0;
//데이터 입력
Scanner scan = new Scanner(System.in);
while(true) {
System.out.print("스위치를 조작하세요 : "); //F 1
String door = scan.next();
int onoff = scan.nextInt();
//스위치 조작
if(door.equals("F")) {
front = onoff;
if(onoff == 1) {
System.out.println("앞문 스위치를 켭니다.");
} else {
System.out.println("앞문 스위치를 끕니다.");
}
} else if(door.equals("R")) {
rear = onoff;
if(onoff == 1) {
System.out.println("뒷문 스위치를 켭니다.");
} else {
System.out.println("뒷문 스위치를 끕니다.");
}
} else {
System.out.println("잘못 입력된 명령입니다.");
}
//전등 켜기 끄기
if((front^rear) == 1) {
System.out.println("전등을 켭니다.");
} else {
System.out.println("전등을 끕니다.");
}
}
}
} - SwitchApplicationimport java.util.Scanner;
public class SwitchApplication {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean key = true;
while(key) {
//메뉴 안내 출력
System.out.println("메뉴를 입력하세요.");
System.out.print("(I)nsert, (U)pdate, (D)elete, (S)earch, (Q)uit : ");
//메뉴 입력 받기
String menu = scan.next();
switch(menu.toUpperCase().charAt(0)) {
case 'I': //'I'는 char(stack에 저장), "I"는 String(heap에 저장)
case 'ㅑ':
System.out.println(">>데이터 입력을 처리합니다.");
break;
case 'U':
case 'ㅕ':
System.out.println(">>데이터 수정을 처리합니다.");
break;
case 'D':
case 'ㅇ':
System.out.println(">>데이터 삭제를 처리합니다.");
break;
case 'S':
case 'ㄴ':
System.out.println(">>데이터 조회를 처리합니다.");
break;
case 'Q':
case 'ㅂ':
System.out.println(">>종료합니다.");
key = false;
break;
default:
System.out.println(">>잘못된 입력입니다.");
}
System.out.println("");
}
}
} - LoopApplicationpublic class LoopApplication {
public static void main(String[] args) {
//for(초기값 ; 조건식 ; 증/감문) { 실행문장; }
for(int i=0 ; i<10 ; i++) {
System.out.println(i);
}
//for다른형태. for문 괄호 안을 반드시 채울 필요는 없다.
int j = 0;
for( ; j < 10 ; ) {
System.out.println(j);
j++;
}
int k = 0;
while(k < 10) {
System.out.println(k);
k++;
}
}
} - EchoApplicationimport java.util.Scanner;
public class EchoApplication {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String message;
do {
message = scan.nextLine();
System.out.println(message);
}while(!message.equals("q"));
System.out.println("프로그램을 종료합니다.");
}
} - BreakApplicationimport java.util.Random;
public class BreakApplication {
public static void main(String[] args) {
for(int i=0; i<10;i++) {
if(i==5){
//break; //현재 진행중인 반복문 한개만 탈출
continue; //현재 진행중인 반복 1회만 skip
}
System.out.println(i);
}
System.out.println("--------------");
outer: //첫번째 for문에 레이블(이름) 부여
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(j==1){
break outer; //outer라는 이름을 가진 for문을 빠져나간다.
//단, break를 둘러싸고 있는 반복문만 지정할 수 있다.
}
System.out.printf("i=%d, j=%d\n",i,j);
}
}
System.out.println(Math.random());
int dice = (int)(Math.random()*6 + 1);
System.out.println(dice);
Random rand = new Random();
int num = rand.nextInt(6) + 1;
System.out.println(num);
}
} - ArrayApplicationpublic class ArrayApplication {
public static void main(String[] args) {
//기본 데이터 타입을 저장하는 배열
int[] jumsuList = new int[10];
jumsuList[0] = 10;
for(int i=0 ; i<10 ; i++) {
System.out.print(jumsuList[i]+" ");
}
System.out.println("");
System.out.println("--------------");
for(int jumsu : jumsuList) { //enhanced for, advanced for
System.out.print(jumsu+" ");
}
System.out.println("");
int[] jumsuList2 = {100, 200, 300, 400};
for(int jumsu : jumsuList2) {
System.out.println(jumsu);
}
//참조 데이터 타입을 저장하는 배열
//고객의 이메일 주소를 10개 저장하는 배열을 선언/생성/초기화 하자.
String[] emailList; //선언
emailList = new String[10]; //생성
emailList[0] = "naraniga@nate.com"; //초기화, 문자열일때만
emailList[1] = new String("walkinpcm@gmail.com");
//초기화, 문자열이 아닐때는 new를 이용해서 객체로 초기화한다.
for(String email : emailList) {
System.out.println(email);
}
//배열의 Immutable 확인
//새로운 배열을 heap에 생성하여 jumsuList에 할당
//이전의 배열은 G.C의 대상이 된다.
jumsuList = new int[20];
for(int jumsu : jumsuList) {
System.out.print(jumsu+" ");
}
System.out.println("");
//다차원 배열(2차원)
//1학년의 1반부터 5반까지 학생들의 국어점수를 저장하는 배열을 생성하라.
int[][] korList = new int[5][30]; //1~5반국어점수
korList[0][0] = 30; //1반 1번 학생의 점수 초기화
//2차원 배열 선언,생성,초기화 한번에
int[][] dataList = {{1,2,3},{4,5,6}}; //2행3열[2][3] 배열 만들어짐.
//반별로 학생수가 다르면?
int[][] engList = new int[5][]; //열은 나중에 생성가능
engList[0] = new int[29]; //1반 29명
engList[1] = new int[31]; //2반 31명
//배열 복사
int[] num1 = {9,8,7,6,5,4,3,2,1};
int[] num2 = {10,20,30,40,50,60,70,80};
//결과가10,7,6,5,4,60,70,80
System.arraycopy(num1, 2, num2, 1, 4);
for(int n : num2) {
System.out.println(n);
}
}
}
- IfApplication
댓글 없음:
댓글 쓰기