메소드 오버로딩(method overloading)


1. 동일한 명칭을 가진 메소드가 두개 이상인 경우를 메소드 오버로딩 상태라고 함. 같은 클래스에 있는 두개 이상의 같은 메소드명의 메소드를 말함.

2. 메소드가 중복 정의된 상태를 말함.

3. 오버로딩된 상태가 되려면 메소드 이름은 같지만 매개변수 리스트가 달라야 한다. 자료형, 갯수, 순서등이 틀린 경우만 허용.


//Class39.java






문제) 덧셈 결과를 출력하는 메소드 만들기. 오버로딩 메소드로 구현.


1. 1부터 10까지의 합을 출력 

-> public int add()

2. 1부터 n까지의 합을 출력 

-> public int add(int n)

3. n부터 m까지의 합을 출력 

-> public int add(int n, int m)

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

-> public int add(int n, int m, int x)

5. 임의의 수를 여러개 입력 받아서 합을 출력 

-> public int add(int[] arr)


실행 예)

덧셈 결과를 출력하는 메소드 만들기

1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

5. 임의의 수를 여러개 입력 받아서 합을 출력 

6. 종료

선택(1~5, 6:종료)?1


1부터 10까지 합 : xxxx


덧셈 결과를 출력하는 메소드 만들기

1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

5. 임의의 수를 여러개 입력 받아서 합을 출력 

6. 종료

선택(1~5, 6:종료)?2


숫자 입력(n)? 100

1부터 100까지 합 : xxxx



//Calc.java

//Process.java

//Class40.java -> main() 포함








상속(inheritance)


1. 객체 지향 프로그램에서 가장 중요한 개념.

2. 객체 지향 프로그램의 특성

- 상속, 다양성, 은닉성, 캡슐화


3. 클래스와 클래스 사이에 부모, 자식 관계가 맺어진 상태를 상속이라고 한다. 상속 관계인 클래스들은 파생 할 수 있는 상태가 된다.

원본A 클래스(기능3가지) -> (상속) -> 파생 B 클래스(기능3가지+기능 추가)

 수퍼(부모) 클래스                   서브(자식) 클래스


파생B 클래스는 원본 A 클래스의 기능을 재구현하기 위해서 해야 할 일이 없는 상태다. -> 상속 받겠다는 구문만 추가하면 됨.

서브 클래스가 수퍼 클래스를 선택해서 상속 표현하면 수퍼 클래스의 기능을 모두 내것으로 만들 수 있다.

상속 관계가 계속 이루어지는 경우 모든 수퍼 클래스의 모든 기능은 서브 클래스가 가지게 된다.


A 클래스(3가지) -> 상속 -> B 클래스(3가지 + 2가지) -> 상속 -> C 클래스(5가지+1가지)


4. 상속 관계에서 최상위 클래스는 Object 클래스이다. Object 클래스만은 상속 표기를 하지 않아도 자동 상속된다.

5. 상속 표기

public class 서브클래스명 extends 수퍼클래스명 {

//수퍼클래스의 멤버는 자동으로 서브클래스것이 된다.

//추가 멤버 구성

}




//Class41.java







수퍼클래스, 서브클래스 구현하기


//Super.java -> 메소드 한개만 구현

package com.test;


//Object 클래스 자동 상속

public class Super {

public void method1() {

}

}


//Sub.java -> 메소드 한개만 구현

package com.test;


//super 클래스를 상속받고 있다.

public class Sub extends Super {

//Super 클래스의 멤버도 Sub 클래스의 멤버가 된다.

//sub 클래스만의 고유 멤버 추가

public void method2() {

}

}



//Class42.java -> main() 

//Sub 클래스의 멤버확인 -> 2개

package com.test;


public class Class42 {


public static void main(String[] args) {

//Sub 클래스의 객체 생성 과정

Sub obj = new Sub();

//멤버구성 확인

obj.method1(); //-> Super의 고유멤버

obj.method2(); //-> Sub의 고유멤버

}

}



6. 상속은 수퍼 클래스를 한개만 선택할 수 있다.

7. 수퍼클래스의 멤버중에서 private 멤버는 상속 받을 수 없다.

8. final 키워드가 있는 클래스는 상속 받을 수 없다.







문제) 프린터라는 원본 클래스를 가지고 파생을 시켜본다.







상속 제한1 - 수퍼클래스를 한개만 선택할 수 있다.



//Class43.java







상속 제한2 - 수퍼 클래스의 멤버중에서 private 멤버는 상속받을 수 없다.


//Super3.java

//Sub3.java

//Class44.java







상속제한3 - final 키워드가 있는 클래스는 상속 받을 수 없다.


//Class46.java








메소드 오버라이딩(method overriding)


1. 동일한 명칭을 가진 메소드가 두개 이상인 경우를 메소드 오버라이딩 상태라고 함. 단, 서로 다른 클래스에서 같은 메소드가 존재하는 경우이고, 서로 다른 클래스는 상속 관계일 때만 성립.

2. 메소드가 재정의된 상태를 말함.


class Super {

public void method() {

//기능1

}

}


class Sub extends Super {

@Override

public void method() { //메소드 오버라이딩

//기능2 -> 기능1을 재정의한 상태

}

}


class Sub2 extends Sub {

@Override

public void method() { //메소드 오버라이딩

//기능3 -> 기능2을 재정의한 상태

}

}



//Class47.java







Member 클래스의 toString() 메소드 오버라이딩 테스트


//Member.java -> 이름, 전화번호 저장용 클래스

//Class48.java









문제) 덧셈 결과를 출력하는 메소드 만들기. toString()메소드를 오버라이딩하여 구현.


1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 



실행 예)

덧셈 결과를 출력하는 메소드 만들기

1. 1부터 10까지의 합을 출력 

2. 1부터 n까지의 합을 출력 

3. n부터 m까지의 합을 출력 

4. n부터 m까지의 합을 출력하되, x의 배수만 계산 

선택(1~5, -1:종료)?1


1부터 10까지 합 : xxxx



//Calc2.java

//Class49.java


WRITTEN BY
빨강꼬마

,

중복되지 않는 난수 발생. 클래스 이용.








야구 게임


1. 중복되지 않은 숫자 2자리 이상을 랜덤하게 발생.

2. 사용자가 숫자를 예상해서 제시해서 랜덤하게 발생한 숫자와 일치하는지 비교.

3. 숫자와 위치가 모두 맞으면 스트라이크 판정, 숫자는 맞고 위치가 틀리면 볼 판정.

4. 자리수 전체의 숫자와 위치가 맞을때까지 계속 진행.

예를 들어, 

컴퓨터가 제시한 랜덤한 숫자가 123이고,

사용자가 제시한 숫자가

456 -> 0 Strike, 0 Ball

345 -> 0 Strike, 1 Ball

321 -> 1 Strike, 2 Ball

...

123 -> 3 Strike, 0 Ball -> 정답


실행 예)

원하는 자릿수 입력?3

랜덤 숫자(3자리) 발생 완료!

(샘플 정답:345)

3자리 숫자 입력(-1:종료)?123

0 Strike, 1 Ball

3자리 숫자 입력(-1:종료)?456

0 Strike, 2 Ball

3자리 숫자 입력(-1:종료)?678

0 Strike, 0 Ball

3자리 숫자 입력(-1:종료)?345

정답입니다!









문제) 아이디와 패스워드를 동시에 검사하는 과정. 클래스 이용.

//MemberCheck.java

//Class20.java








문제) 임의의 숫자사이 (n 부터 m까지)에서 짝수들의 합, 홀수들의 합까지 출력. 클래스 이용.


실행예)

짝수들의 합 : xxxx

홀수들의 합 : xxxx

//SumNumber.java

//Class21.java








문제) 임의의 숫자사이 (n 부터 m까지)에서 특정 수(N)의 배수들의 합을 출력. 클래스 이용.

실행예)

배수 지정(2~9)?

3의 배수들의 합 : XXXX

//Calc.java

//Class22.java









문제) 임의의 숫자 사이(n부터 m까지)에서 특정 수(x, y)의 배수들의 합을 출력. 클래스 이용. 현재는 1부터 100까지를 기준으로 작성.


실행 예)

배수 지정1(2~9)?3

배수 지정2(2~9)?4

3의 배수들의 합 : XXXX

4의 배수들의 합 : XXXX

3과 4의 배수들의 합 : XXXXX

//Calc3.java

//Class23.java








문제) 입력 받은 숫자(양의 정수)를 화면에 출력하되, -1이 입력될때까지 계속 반복. 출력된 숫자들의 합을 마지막에 한 번 출력. 클래스 이용.

실행 예)

숫자 입력(양의 정수)?1

1

숫자 입력(양의 정수)?2

1 2

숫자 입력(양의 정수)?3

1 2 3


...


숫자 입력(양의 정수)?-1

현재까지 입력된 숫자들의 합 : XXXX

//Calc4.java

//Class24.java



WRITTEN BY
빨강꼬마

,

static 키워드


1. 정적 요소를 지정할 때 사용하는 키워드.

2. 클래스의 멤버는 두 종류가 있다.

인스턴스 멤버 - 멤버 정의시 static 키워드가 없는 경우
스태틱 멤버 - 멤버 정의시 static 키워드가 있는 경우


인스턴스, 스태틱 멤버 선언 예)

public class Test{
public int max;  // 인스턴스 멤버
public static int min;  // 스태틱 멤버

public void method1() { // 인스턴스 멤버
}

public static void method2() { // 스태틱 멤버
}
}


3. 

인스턴스 멤버는 객체 생성시 독립적으로 활동 상태 유지가 가능하다.
객체마다 고유한 값을 유지할 때 사용한다.

스태틱 멤버는 객체 생성과 무관하게 동일한 상태를 유지한다.
객체간의 공유하고자 하는 값을 유지할 때 사용한다.


4.

실행시 메모리 적재는 스태틱이 먼저되고, 인스턴스 멤버는 객체 생성후에만 생성된다.


스태틱 멤버 -> 객체 생성 -> 인스턴스 멤버 적재

스태틱 멤버 -> 인스턴스 멤버에 객체 생성 후에만 접근 가능
인스턴스 멤버 -> 스태틱 멤버에 언제든지 접근 가능



5.

인스턴스 멤버는 객체 소멸시 같이 소멸됨.
스태틱 멤버는 프로그램이 종료되어야 소멸된다. (* 스태틱 멤버는 프로그램이 종료되기 전까지 메모리를 항상 차지함)



6.
인스턴스 멤버 접근 방법

클래스명 객체변수 = new 클래스명();
객체변수.인스턴스멤버;

스태틱 멤버 접근 방법
클래스.스태틱멤버;

단, 클래스 내부에서 서로 접근하는 경우는 객체변수나 클래스명 등을 생략할 수 있다.






멤버 접근 테스트 예제







스태틱 멤버에서 값 공유 테스트





문제) 국,영,수 점수를 입력 받아서 총점, 평균, 판정 결과 출력. 클래스 이용.
판정 기준은 
합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.
과락 -> 과목중 40점 미만이 있고, 평균이 60이상.
불합격 -> 평균이 60점 미만

평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인.
평균이 60점 이하 -> 불합격

실행 예)
국어(0~100)?XX
영어(0~100)?YY
수학(0~100)?ZZ

입력받은 점수 : 국어 xx점, 영어 xx점, 수학 xx점
총점: xxxx
평균: xxx.x
판정: 합격






문제) 여러명의 국,영,수 점수를 입력 받아서 총점, 평균, 판정 결과 출력. 클래스 이용.
판정 기준은 
합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.
과락 -> 과목중 40점 미만이 있고, 평균이 60이상.
불합격 -> 평균이 60점 미만

평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인.
평균이 60점 이하 -> 불합격

실행 예)
인원수 입력(1~10)?2
성적 입력(이름 국어 영어 수학)?hong 100 100 100
성적 입력(이름 국어 영어 수학)?kim 80 90 80
------------------------------------------
이름  국어  영어  수학  총점   평균   판정
------------------------------------------
hong   100   100   100   300  100.0   합격
kim     80    90    80    ..    ..    합격
------------------------------------------






문제) 여러명의 국,영,수 점수를 입력 받아서 총점, 평균, 판정, 등수 결과 출력. 클래스 이용.
판정 기준은 
합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.
과락 -> 과목중 40점 미만이 있고, 평균이 60이상.
불합격 -> 평균이 60점 미만

평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인.
평균이 60점 이하 -> 불합격

실행 예)
인원수 입력(1~10)?2
성적 입력(이름 국어 영어 수학)?hong 100 100 100
성적 입력(이름 국어 영어 수학)?kim 80 90 80
-------------------------------------------------
이름  국어  영어  수학  총점   평균   판정   등수
-------------------------------------------------
hong   100   100   100   300  100.0   합격    1등
kim     80    90    80    ..    ..    합격   10등 
-------------------------------------------------






문제) 여러명의 국어, 영어, 수학 점수를 입력 받아서 총점, 평균, 판정, 등수, 과목별 판정 결과 출력. 배열, 클래스 이용.

판정 기준은
합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상
과락 -> 과목중에 40점 미만이 있고, 평균은 60점 이상
불합격 -> 평균이 60점 미만

평균이 60점 이상 -> 합격
평균이 60점 미만 -> 불합격

합격 또는 과락 구분은 -> 국어, 영어, 수학 점수가 모두 40점 이상인 확인.

과목별 판정 기준은
90점 이상은 A
80점 이상은 B
70점 이상은 C
60점 이상은 D
60점 미만은 F

실행 예)
인원수 입력(1~10)?2
성적 입력(이름 국어 영어 수학)?hong 100 100 100
성적 입력(이름 국어 영어 수학)?kim 80 90 80
-----------------------------------------
이름 국어 영어 수학 총점 평균 판정  등수
-----------------------------------------
hong 100(A)  100(A)  100(A)  300  100.0 합격  1
kim   80(B)   90(A)   80(B)  ..    ..   합격  2
-----------------------------------------



WRITTEN BY
빨강꼬마

,
10일차의 가장 중요한 포인트

- 사용자 정의 클래스 자료형 만들기 및 클래스 자료형 선언 방법
- 선언한 클래스 자료형을 이용하여 여러 객체 생성
- 클래스 자료형으로 배열 만드는 이유
- 유저가 자료를 임의로 입력할때 setter 를 이용하여 클래스 자료형 배열에 객체를 저장.
- 클래스 자료형 배열 내에 getter를 이용하여 객체n번째에 저장된 자료를 출력


클래스, 객체, 인스턴스

1. 클래스의 객체에 원본 정의서.

2. 객체(instance)는 클래스가 실행되서 메모리에 적재된 상태를 말함.
클래스(원본) -> 객체1 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터
                  -> 객체2 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터
                  -> 객체3 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터

클래스명 변수명 = new 클래스명();



문제) 거스름돈을 화폐단위로 구분해서 출력.
실행예)
금액(10~1000)? 990
총액 : 990원
오백원 1개, 백원 4개, 오십원 1개, 십원 4개




문제) 2자리 이상의 수를 입력 받아서 자릿수들의 합을 계산해서 출력. 클래스 이용.
실행 예)
숫자 입력(2자리 이상)?1234
1000자리의 수 -> 1
100자리의 수 -> 2
10자리의 수 -> 3
1자리의 수 -> 4
자릿수의 합 : 10

1234 -> 문자열 길이를 얻는다 -> 4

2 -> (10)2-1승 -> 10
3 -> (10)3-1승 -> 100
4 -> (10)4-1승 -> 1000
...
n -> (10)n-1승 -> 100000....  -> a

1234 -> (1234%10000)/1000 -> 1234/1000   -> 1
1234 -> (1234%1000)/100 -> 2
1234 -> ((1234%1000)%100)/10 -> 3
1234 -> (((1234%1000)%100)%10)/1 -> 4






문제) 2자리 이상의 수를 입력 받아서 자릿수들의 합을 계산해서 출력. 클래스 이용.
문자열을 한 글자씩 분리하는 방법으로 해결 
실행 예)
숫자 입력(2자리 이상)?1234
1000자리의 수 -> 1
100자리의 수 -> 2
10자리의 수 -> 3
1자리의 수 -> 4
자릿수의 합 : 10






문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기. 사용자 정의 클래스 이용. sort() 메소드 금지
실행 예)
숫자1? X
숫자2? Y
숫자3? Z
입력 받은 숫자: X, Y, Z가장 큰 숫자: X






문제) 여러 개의 숫자 중에서 가장 큰 숫자 구하기. 배열 및 사용자 정의 클래스 이용. sort() 메소드 금지
실행 예)
입력할 숫자의 갯수 지정(2~10)?
숫자1? X
숫자2? Y
숫자3? Z
...
입력 받은 숫자: X, Y, Z, .....
가장 큰 숫자: X





접근 지정자


1. public, private, protected, default(표시하지 않는 상태)

2. 외부에서 해당 멤버를 접근할 수 있는 기준제시.

package 패키지명;
접근지정자 class 클래스명 {

접근지정자 자료형 멤버변수;
접근지정자 자료형 메소드명(매개변수 리스트) {
자료형 지역변수; //접근지정자 사용 불가.
//실행문
}

자료형 멤버변수;
접근지정자 자료형 메소드명(매개변수 리스트) {
자료형 지역변수; //접근지정자 사용 불가.
//실행문
}
}


3. 멤버변수는 private, 클래스나 메소드는 public을 주로 사용.

4.
public 지정시 -> 어떤 위치에서든지 접근 가능.
private 지정시 -> 해당 영역 안에서만 접근 가능.
protected 지정시 -> 상속 관계가 있는 클래스에서만 접근 가능.
default 지정시(아무것도 안썼을때) -> 같은 패키지 내에서만 접근 가능.

Class08_02 -> [각주:1] (같은 패키지에 소속되어 있는 상태)
Class08_3 -> [각주:2] (다른 패키지에 소속되어 있는 상태)
Class08_4 -> [각주:3] (다른 패키지에 소속되어 있는 상태)





getter, setter

1. 메소드중에서 private 멤버변수를 위한 접근용 메소드.






이클립스 기능을 이용한 getter, setter 메소드 자동 완성





중요 예제 (클래스 자료형 선언, 객체 생성, 출력등)

이름과 전화번호를 저장할 수 있는 자료형 만들기
실행 예)
회원 수(1~10)?3
이름 전화번호(1)? hong 111-1111
이름 전화번호(2)? kim 222-2222
이름 전화번호(3)? park 333-3333
----------------
전체 회원수: 3명
----------------
이름    전화번호
hong    111-1111
kim     222-2222
park    333-3333
----------------

//Member.java (사용자 정의 클래스)

package com.test;

public class Member {

private String name, tel;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}


//Class11.java (main() 메소드 포함 클래스)


package com.test;

import java.util.*;

public class Class11 {
public static void main(String[] args) {

//입력
Scanner sc = new Scanner(System.in);
System.out.print("회원수 입력(1~10)?");
String num = sc.next();
int count = Integer.parseInt(num);

//이름및 전화번호 자료형 클래스 활성화 및 저장용 배열 생성
                //아래에서 사용된 Member는 사용자 정의 클래스 자료형(참조형)을 의미한다.
                //배열의 자료형 선언은 String, int, 참조형등 여러 자료형 선언이 가능하고,
                //
배열 자체가 for문등 사용자 임의의 수를 기반으로 데이터를 운용하기에 
                //매우 적합하기 때문에 이 예제에서 클래스 자료형 배열을 생성한 것이다.

Member[] members = new Member[count]; // 사용자 정의 클래스 자료형인 배열을 생성

//처리

for (int a=0; a<members.length; a++) {
System.out.printf("이름:전화번호(%d)?", (a+1));
String name = sc.next(); //이름
String tel = sc.next(); //전화번호

Member member = new Member();   // member 객체 생성 과정
member.setName(name);                //member 객체에 이름 저장(바로 윗줄에서 생성한 객체이름)
member.setTel(tel);                       //member 객체에 전화번호 저장
members[a] = member;                 //member 객체를 배열에 저장하는 과정

}

//출력

System.out.println("----------------");
System.out.printf("전체 회원수: %d명%n", count);
System.out.println("----------------");
System.out.println("이름   전화번호");
for (int a=0; a<members.length; a++) {

//members[a]는  Member 객체를 리턴할 뿐이다.
//name, tel 접근을 하려면  Member 객체에서 gerName(), gerTel()을 이용해야 한다.
// System.out.printf("%s %s %n", members[a]); 일케하면 members[a]는 자동으로 이름과 전화번호를 뿌려주지 않는다.


//캐스트 연산자 Member 유의. 추후 캐스트 연산자를 이런식으로 사용할 수 있는 케이스가 있다.
//현재 예제에서는 캐스트 연산자를 사용하지 않아도 된다.


//members[a] 에는 name 과 tel 이라는 두 저장공간이 있다.
//
출력단에서 출력할때에 members[a]라고만 기재할 경우 출력되지 않으며,
//(배열명).사용자정의클래스내메소드명()     형식으로 기재해야한다.
//
즉, (members[a]).getName()

    System.out.printf("%s    %s %n", ((Member)members[a]).getName(), ((Member)members[a]).getTel()); 
}

System.out.println("----------------");

}

}

  1. public void method1() { System.out.println("Class08_2 > method1() 호출");} void method2() { System.out.println("Class08_2 > method2() 호출");} private void method3() { System.out.println("Class08_2 > method3() 호출");} [본문으로]
  2. public void method1() { System.out.println("Class08_3 > method1() 호출");} void method2() { System.out.println("Class08_3 > method2() 호출");} private void method3() { System.out.println("Class08_3 > method3() 호출");} [본문으로]
  3. public void method1() { System.out.println("Class08_4 > method1() 호출");} void method2() { System.out.println("Class08_4 > method2() 호출");} private void method3() { System.out.println("Class08_4 > method3() 호출");} public void method4() { method3();} } [본문으로]

WRITTEN BY
빨강꼬마

,

만년달력

1. 1년 1월 1일부터 전년도 12월 31일까지의 총 날짜수 구함.
int total = (year-1)*365 + ((year-1)/4 - (year-1)/100 + (year-1)/400);


2. 해당년도 1월 1일부터 해당년도 해당월 1일까지의 총 날짜수 구함.
int[] m = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (int a=0; a<month-1; a++) {
total += m[a];
}
//해당월 1일 때문에 +1
total++;
//올해가 윤년이면서 2월 이상인 경우 +1
if (month>=3 && (year%4==0 && year%100!=0 || year%400==0)) {
total++;
}


3. 해당년도 해당월의 첫 날(1일)의 요일(일, 월, 화, 수, 목, 금, 토) 구함.
String[] d = {"일", "월", "화", "수", "목", "금", "토"};
int days = total % 7;
System.out.printf("%s요일 %n", d[days]);


4. 콘솔버전에서 날짜를 달력 형태로 출력.






난수 발생

1. 0 부터 1 사이의 무작위 숫자를 난수라고 함.

2. Random 클래스의 nextInt() 메소드를 이용하면 쉽게 난수를 얻을 수 있다.

import java.util.*;
Random rd = new Random();

int val = rd.nextInt(100); //0 보다 크거나 같고 100 보다는 작은 난수

예를 들어, 로또번호는 1~45까지만 존재. rd.nextInt(45) + 1 라고 계산함.
난수를 여러개 발생시키고, 배열에 저장한 다음, 난수 출력. 1~45 범위의 숫자 6개.






문제) 여러개의 난수를 발생시키고, 난수들 중에서 가장 큰 값과 가장 작은 값을 별도 출력. 난수 허용 범위는 1~100. 배열 이용.
실행 예)
난수 갯수(2~20)?5
난수 결과 : 55 9 12 6 90 
가장 큰 값 : 90
가장 작은 값 : 6






중복되지 않은 난수 얻기 (1~100)_방법1
실행 예)
난수 갯수(2~20)? 5
난수 결과 : 3 4 5 10 12


//중복되는 경우

int size=5;
int count=0;
int[] arr = new int[size];
Random rd = new Random();
while(true) { //무한실행 (특정 갯수의 난수를 얻을때까지 반복)
int random = rd.nextInt(100) + 1;
arr[count] = random;
count++;
if (count == size) {
break;
}
}


//중복되지 않은 경우

int size=5;
int count=0;
int[] arr = new int[size];
Random rd = new Random();

while(true) { //무한실행 (특정 갯수의 난수를 얻을때까지 반복)
int random = 0;
boolean check = false;


do {
check = false;
random = rd.nextInt(100) + 1;
for (int a=0; a<count; a++) {
if (arr[a] == random) {
check = true;
}
}
}while(check);  //무한실행 (중복되지 않는 경우만 배열에 저장)


arr[count] = random;
count++;
if (count == size) {
break;
}
}






중복되지 않은 난수 얻기 (1~100)_방법2
실행 예)
난수 갯수(2~20)? 5
난수 결과 : 3 4 5 10 12






문제) 로또 번호를 원하는 장수 만큼 출력.
로또 번호는 1~45 범위의 숫자를 중복되지 않은 상태에서 6개가 되면 1장에 해당.
실행 예)
로또 장수(1~20)?3
번호1 :  1 12 13 34 35 36
번호2 : 12 20 25 30 39 45
번호3 :  1  4  9 20 30 42






문제) 가위,바위,보 게임. 
1~3 사이의 난수가 발생하면 가위, 바위, 보라고 생각하고 사용자가 내는 가위, 바위, 보와 비교해서 승패 결정.
실행 예)
사용자 선택(1:가위, 2:바위, 3:보, -1:종료)?1
사용자:가위, 컴퓨터:바위
결과 : 컴퓨터 승!

사용자 선택(1:가위, 2:바위, 3:보, -1:종료)?2
사용자:바위, 컴퓨터:바위
결과 : 비겼습니다.

사용자 선택(1:가위, 2:바위, 3:보, -1:종료)?-1
사용자 승:0회, 컴퓨터 승:1회





객체 지향 프로그래밍

-> 프로그램의 대상이 되는 데이터를 객체로 취급하는 프로그램 기법.


클래스 
- 객체에 대한 원본 정의서. 
- 데이터형을 정의하는 코드 작성 필요.
- 사용자가 직접 데이터형에 대한 정의를 추가해야 한다. 
- 멤버변수(상태), 메소드(행위)

예를 들어서, 
int 자료형은 상태값은 있지만 행위는 없다.
Integer 클래스는 상태값만 있는게 아니라 행위도 가능하다.

나무(상태) -> 조각가(클래스) -> 조각(행위) -> 작품(결과)

예를 들어, 프린터 클래스를 만든다면
class 프린터 {
//멤버변수
int 잉크 = 100;
int 종이 = 0;

//메소드
void 인쇄(대상) {
if (잉크>0 && 종이>0) {
//대상 출력
잉크--;
종이--;
} else {
//잉크 또는 종이 부족 메시지 출력
}
}
void 종이공급(매수) {
종이 += 매수;
}
}



클래스 정의 기본 형식

1. 클래스명은 첫 글자는 대문자로 표기

2. class 클래스명 { .... }

3. 저장시 물리적 파일명은 클래스명.java

4. public class 클래스명 {   ..    } 에서 public은 접근지정자. 

외부에서 클래스를 참조할 때 접근 가능한 지역 표시.

5. 멤버변수와 메소드는 사용자 정의.

6. 멤버변수와 메소드도 접근 지정자를 별도 지정. 멤버변수는 private, 메소드 public 주로 사용.


멤버변수 정의 예.  private int a = 0;

메소드 정의 예. public void method() { ...  }




산술연산 담당 클래스 연습
-> Calc
-> 숫자 두 개에 대한 덧셈 결과 리턴
실행 예)
숫자1?10
숫자2?20
입력된 숫자 : 10, 20
결과 : 30





산술연산 담당 클래스2 
-> 기존의 Calc 클래스에 메소드 추가를 이용해서 수정 가능.
-> 임의의 정수 두 개를 받아서 n부터 m까지의 합을 계산해서 출력.
실행 예)
숫자1?1
숫자2?10
입력된 숫자: 1, 10
연산 결과: 55



WRITTEN BY
빨강꼬마

,

- java se 설치


 

자바 환경 설정(setup, install)

1. JDK 7.0 설치

1. http://www.oracle.com에서 jdk-7u7-windows-i586.exe 다운로드
2. 자바 실행 환경 및 개발 환경에 대한 프로그램 설치과정
3. JDK 설치 확인
4. C:\Program Files\Java\jdk1.7.0_07
5. C:\Program Files\Java\jre7

 


2. Path 지정

1. 자바 컴파일에 필요한 프로그램을 쉽게 찾을 수 있도록 설정.
2. 내컴퓨터 - 속성 - 고급 - 환경변수 - 시스템변수의 path 편집 - 경로 (C:\Program Files\Java\jdk1.7.0_07\bin) 추가 (; 구분자 사용)
3. path 지정 확인
4. cmd 내에서 javac 입력

 

3. javac.exe 와 java.exe 파일 확인

1. 자바 컴파일 및 실행에 필요한 프로그램

 

4. 확장자에 따른 분류

1.  .java:    소스코드      -> 편집기를 통해서만 확인이 가능
                                       편집기는 메모장, 워드패드, 에디트플러스, 이클립스(이클립스를 가장추천)
2.  .class: 자바실행파일


 

첫 번째 예제 작성

1. 탐색기에서 Test01.java 파일을 생성

1. 파일이름은 첫글자를 대문자로 표기한 영숫자로 작성
2. 확장자는 .java로 표기

 

2. 메모장으로 Test01.java 파일을 열기

 

3. 아래 코드 작성

public class Test01 {                                              -- public: 접근지정자, class: 클래스 선언, 
        public static void main(String[] args) {               -- main: 프로그램 진입점(시작점) // main 하나의 예약어이지만 main은 항상
                                                                                                                                  public static void 와 함께 사용되므로 함께 암기
              System.out.println("Hello, Java World!");
        }
}


4. 저장

 

5. 명령 프롬프트에서 위 파일이 저장된 위치로 이동

 

6. 아래 명령을 이용해서 컴파일 및 실행

1. 컴파일 및 실행 명령
 
D:> javac Test01.java                                   -- 컴파일
D:> java Test01                                            -- 소스파일(.java)을 javac 파일로 컨버팅한 결과물인 .class 파일을 java파일로 실행
   > 결과는 Hello, Java World! 메세지 출력


 

프로그램 전용 글꼴 설치

-> 나눔고딕코딩 글꼴 


 

자바 프로그램 구성

1. 기본 형식

 -- [] 안에 있는 것은 생략 가능한것.

[import 패키지명]
[접근지정자] class 클래스명 {
        [멤버 변수 선언;]
        [접근 지정자][반환자료형] 메소드명([인자리스트]) {
                  // 프로그램 코드;
        }
        public static void main(String[] args) {
                 // 프로그램 코드;
        }
}

 

2. 자바 프로그램은 클래스(class)로 구성된다.
   물리적으로 저장하는 경우에도 클래스이름.java 형식으로 저장해야 한다.

잘못된 자바 프로그램 작성 예

public class Test02 {
        public static void main(String[] args){
        }
}

-> test02.java로 저장함. 클래스 이름과 파일 이름을 서로 다르게 저장

 

 

3. 주석
>>프로그램 내부에 설명을 추가하는 것. 실행하는 과정과는 아무런 상관이 없음.

// 한줄주석
/* 범위 주석 */

주석단 소스 코드 예

//클래스 선언
public class Test01 {
        // 메인 메소드 선언
        public static void main(String[] args) {
                // 콘솔창에 메세지 출력
                System.out.println("Hello, Java World!");
        }
}

 


4. 키워드
>> 이미 문법이 전해진 단어(예약어)


public, class, static, void, main 등등등....

if, for, while, new, this, super, protected, private, try, catch, finally, throw, thorws, boolean, byte, short, int, long, char, float, double, true, false, null, switch, default, case, do, break, continuem, return, extends, implement, package, import.. 등등 아주 많음~~

 

5. main() 메소드

public class Test03 {
        // main() 메소드가 없는 클래스는 실행이 되지 않는다.
        public static void test() {
                System.out.println("main이 없는 클래스");
        }
}

 

--> 실행결과:

D:> java Test03
오류: Test03 클래스에서 기본 메소드를 찾을 수 없습니다. 다음 형식으로 기본 메
드를 정의하십시오.
   public static void main(String[] args)

 

--> 메인 메소드를 추가해서 수정함

public class Test03 {
        // main() 메소드가 없는 클래스는 실행이 되지 않는다.
        public static void test() {
                System.out.println("main이 없는 클래스");
        }
        // main() 메소드는 클래스 내부 아무곳이나 추가가능.
        public static void main(String [] args) {
                System.out.println("main메소드 추가됨");
        }
}


WRITTEN BY
빨강꼬마

,