WRITTEN BY
빨강꼬마

,

문제) 성적 처리 -> ArrayList 컬렉션, RecordDTO 클래스 이용. 메뉴 구성 추가

여러명의 이름, 국어, 영어, 수학 입력 받아서 총점, 평균 계산해서 출력. 출력시 이름 오름차순 정렬해서 출력.


실행 예)

======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->1


1번 학생 성적 입력(이름 국어 영어 수학)?park 80 75 60

2번 학생 성적 입력(이름 국어 영어 수학)?hong 100 90 80

3번 학생 성적 입력(이름 국어 영어 수학)?kim 80 85 80

4번 학생 성적 입력(이름 국어 영어 수학)?-1


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->2


 이름   국어  영어  수학  총점  평균

 hong    100   90    80    XXX  XXX.X

 kim      80   85    80    XXX  XXX.X

 park     80   75    60    XXX  XXX.X



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 이름?kim

 이름   국어  영어  수학  총점  평균

 kim      80   85    80    XXX  XXX.X



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 이름?choi

검색 결과가 없습니다.


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->-1


프로그램이 종료되었습니다.


//ScoreDTO.java

//Process.java

//Class70.java








이름과 전화번호를 저장할 수 있는 자료형 만들기.

MemberDTO 클래스, ArrayList 컬렉션


출력시 이름 오름차순 출력


=======  회원 관리  ========

1. 회원 입력

2. 회원 전체 출력

3. 이름 검색 출력


실행 예)

이름 전화번호(1)?홍길동 010-123-1234

이름 전화번호(2)?김길동 010-222-3333


--------------------

이름   전화번호

--------------------

홍길동 010-123-1234

김길동 010-222-3333

--------------------


//문제임 알아서 풀어보세용~ㅋㅋ










ScoreDAO, ScoreDTO 클래스. 

ArrayList 컬렉션


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3



//ScoreDTO.java -> 자료 처리 전용 클래스

//ScoreDAO.java -> 데이터 엑세스 전용 클래스

//Process2.java -> 메뉴 액션 처리 전용 클래스

//Class72.java -> main() 메소드 추가. 메뉴 출력








Map 인터페이스를 구현한 TreeMap 클래스


1. 컬렉션 종류

◆ Collection 인터페이스

- Value의 집합체

- 특정 Value를 얻기 위해서는 검색 과정 필요.


◆ Map 인터페이스

- Key, Value의 집합체.

- Key을 제시하면 Value를 얻을 수 있는 구조.


**개별정리내용**

TreeMap에서 자동인덱스가 아닌 키값 구분 인덱스 이기때문에 단일 출력에는 편리하나,

전체출력을 할 경우 while 문을 통해 출력해야 하며, 이때 , Iterator클래스를 사용해야 함.

ex)

Iterator<Integer> it = tm.keySet().iterator(); //Integer > 키자료형

while(it.hasNext()) {

int key = it.next();

System.out.printf("%d %s %d %d %d %d %.1f %n"

, key

, tm.get(key).getName()

, tm.get(key).getKor()

, tm.get(key).getEng()

, tm.get(key).getMat()

, tm.get(key).getTotal()

, tm.get(key).getAve());

}





//Class73.java ->TreeMap에서의 선언, 자료 입력, 출력.







문제) 성적 처리 -> TreeMap 컬렉션, ScoreDTO 클래스, ScoreDAO 클래스 이용,

메뉴 구성 추가. 


여러명의 학번, 이름, 국어, 영어, 수학 입력 받아서 총점, 평균 계산해서 출력. 

학번은 Key로 사용하고, 이름~평균은 ScoreDTO 객체로 만들어서 Value로 사용한다.

실행 예)

======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 학번 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->1


학생 성적 입력(학번 이름 국어 영어 수학)?1 park 80 75 60

학생 성적 입력(학번 이름 국어 영어 수학)?2 hong 100 90 80

학생 성적 입력(학번 이름 국어 영어 수학)?3 kim 80 85 80

학생 성적 입력(학번 이름 국어 영어 수학)?-1


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 학번 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->1


학생 성적 입력(학번 이름 국어 영어 수학)?3 choi 80 80 80

이미 입력된 학번입니다.

학생 성적 입력(학번 이름 국어 영어 수학)?4 choi 80 80 80

학생 성적 입력(학번 이름 국어 영어 수학)?-1


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 학번 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->2


학번 이름   국어  영어  수학  총점  평균

  1  hong    100   90    80    XXX  XXX.X

  2  kim      80   85    80    XXX  XXX.X

  3  park     80   75    60    XXX  XXX.X

  4  choi     80   80    80    XXX  XXX.X


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 학번 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 학번?2

학번 이름   국어  영어  수학  총점  평균

  2  kim      80   85    80    XXX  XXX.X


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 학번 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 학번?5

검색 결과가 없습니다.



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 학번 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->-1


프로그램이 종료되었습니다.




//ScoreDTO.java -> 동일(학번은 TreeMap의 키로만 사용되므로 DTO에는 학번이 없다)

//ScoreDAO3.java -> 변경(자료저장공간이 ArrayList 에서 TreeMap으로 변경되므로)

//Process3.java -> 변경(자료저장공간이 ArrayList 에서 TreeMap으로 변경되므로 관련 액션 수정)

//Class74.java -> 변경(이름 검색 출력을 학번 검색 출력으로 수정





JAVA SE 과목 끝.


예외처리 배우지 않았으므로 ORACLE 과목 종료되면 배워야함.


WRITTEN BY
빨강꼬마

,

개별정리 내용


* Comparator 인터페이스(오버라이딩 필수) 개별 공부 

* 인터페이스를 new 키워드를 사용하여 객체를 생성한다는 것은 익명클래스로 처리하여 메소드를 오버라이딩하여 사용하겠다라는 의미







컬렉션(collection) - 중요 항목


1. 자료구조를 표현하는 방법.

2. 자료구조

-선형구조: 배열, 스택, 큐

-비선형구조: 트리, 그래프


배열 - 자료가 연속적으로 모여져있는 상태

스택 - 자료를 입력하는 입구와 출력하는 출구가 같은 상태. 선입후출 특성을 갖는 자료 구조. FILO

큐 - 자료를 입력하는 입구와 출력하는 출구가 반대 상태. 선입선출 특성을 갖는 자료 구조. FIFO


3. 컬렉션의 종류 (interface)

java.util.Collection - 순서없는 단순한 요소들의 집합(최상위 인터페이스)

java.util.Set - 중복을 허용하지 않는 단순한 요소들의 집합

java.util.List - 순차적 나열, 순서 지정이 가능한 단순한 요소들의 집합

java.util.SortedSet - 값들이 정렬된 Set


java.util.Map - Key와 Value로 구성된 구조(최상위 인터페이스)

java.util.SortedMap - Key가 정렬된 Map



4. Key, Value


Collection 구조-------------------------------------------

Value - 자료구조에 저장되는 데이터(값) 자신. 자동 인덱스

Key - Map 구조에서 사용되는 데이터(값)에 대한 사용자 정의 인덱스.


Value        index->Key의 역할. 자동인덱스

------       -----

홍길동         0

김길동         1  ->자료를 탐색할 때 인덱스를 사용해서 탐색.

박길동         2

...           ...



Map구조---------------------------------------------------

Value         Key ->사용자 정의 인덱스

------       -----

홍길동        hong

김길동        kim  ->자료를 탐색할 때 Key를 사용해서 탐색.

박길동        park

...           ...







ArrayList 클래스


1. Collection 인터페이스를 상속 받은 List 인터페이스를 구현한 클래스.

2. 배열과 비슷한 특성을 가지면서 컬렉션의 특성(크기 지정 필요없음)을 가지고 있다.

3. 형태

-선언

ArrayList 변수 = new ArrayList(); //크기지정 불필요.


-입력

변수.add(값);

변수.add(값);

...


-출력 ->배열과 컬렉션만 지원하는 전용 for문 사용.(확장 for문) 단, 일반for문도 사용 가능.

for(변수의자료형 포문내에서사용할객체명 : 변수) {  // (데이터의자료형 임의의변수명 : 데이터)

System.out.println(obj);

}



//Class60.java -> 배열사용

//Class61.java -> 컬렉션사용








제네릭 표현을 사용한 컬렉션


1. 컬렉션에서 사용할 데이터의 자료형을 한정시키는 것.

2. 메소드나 멤버 변수의 기능은 같지만 그것을 필요로 하는 곳에 따라 넘겨받는 결과의 자료형이 서로 다를 때 틀이 되는 하나의 메소드나 멤버 변수를 정의해놓고 호출하는 쪽에서 요구하는 자료형의 값을 갖도록 하는 것.


//Class62.java -> 제네릭 사용전

//Class63.java -> 제네릭 사용후








제네릭(Generic) 지원 클래스 만들기


1. 제네릭을 지원하기 위해서는 데이터형 인자를 클래스 정의시에 지정해야 하며, 일반적으로 데이터형 인자는 1글자의 영문 대문자로 인자의 수만큼 사용한다.


2. 형태

접근지정자 class 클래스명<데이터형인자, > {


}



//Class64.java







문제) 이름과 전화번호를 저장할 수 있는 자료형 만들기. 컬렉션(ArrayList), Member클래스 이용.

실행 예)

이름 전화번호(1)? hong 111-1111

이름 전화번호(2)? kim 222-2222

이름 전화번호(3)? -1 -> 입력 종료

이름    전화번호

----------------

hong    111-1111

kim     222-2222

park    333-3333

----------------


//MemberDTO.java

//Class65.java








문제) 외부에서 임의의 여러개의 숫자를 입력받고 정렬해서 출력. 컬렉션 이용

실행 예)

숫자 입력(1)?

숫자 입력(2)?

숫자 입력(3)?

숫자 입력(4)?

숫자 입력(5)? -1 > 입력끝 지정 필요

원본:

정렬:


//Class66.java









문제)여러명의 성적을 입력 받고, 점수가 높은 순으로 등수 부여해서 출력. 컬렉션, RecordDTO 이용.

실행 예)

이름 점수(1)?kim 80

이름 점수(2)?park 90

이름 점수(3)?choi 100

이름 점수(4)?hong 70

이름 점수(5)?kang 60->-1 입력끝 지정 필요

-----------------------

1등 choi 100

2등 park 90

3등 kim 80

4등 hong 70

5등 kang 60


//RecordDTO.java

//Class67.java









문제) 여러명의 국,영,수 점수를 입력 받아서 총점, 평균, 판정 결과 출력.

컬렉션, DTO 클래스, Collections.sort(), Comparator 이용.

판정 기준은 

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.

과락 -> 과목중 40점 미만이 있고, 평균이 60이상.

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

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

평균이 60점 이하 -> 불합격

정렬 기준은 총점 기준으로 내림차순 정렬.

실행 예)

성적 입력(이름 국어 영어 수학)?hong 100 100 100

성적 입력(이름 국어 영어 수학)?kim 80 90 80

성적 입력(이름 국어 영어 수학)?-1 -> 입력끝 지정 필요

------------------------------------------

이름  국어  영어  수학  총점   평균   판정

------------------------------------------

hong   100   100   100   300  100.0   합격

kim     80    90    80    ..    ..    합격

------------------------------------------


//ScoreDTO.java

//Class68.java








문제) 여러명의 국,영,수 점수를 입력 받아서 총점, 평균, 판정 결과 출력.

컬렉션, DTO 클래스, Collections.sort(), Comparator 이용.


판정 기준은 

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.

과락 -> 과목중 40점 미만이 있고, 평균이 60이상.

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


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

평균이 60점 이하 -> 불합격


정렬없이 등수를 판별해서 출력.


실행 예)

성적 입력(이름 국어 영어 수학)?hong 100 100 100

성적 입력(이름 국어 영어 수학)?kim 80 90 80

성적 입력(이름 국어 영어 수학)?-1 -> 입력끝 지정 필요


------------------------------------------------

이름  국어  영어  수학  총점   평균   판정  등수

------------------------------------------------

hong   100   100   100   300  100.0   합격   2등

kim     80    90    80    ..    ..    합격   1등

------------------------------------------------


//ScoreDTO.java

//Class69.java



WRITTEN BY
빨강꼬마

,

abstract 키워드


1. abstract (추상적)은 실제 코드가 존재하지 않지만 개념만 존재하는 멤버를 가지고 있는 상태.

추상: 여러가지 사물이나 개념에서 공통되는 특성이 속성따위를 추출하여 파악하는 작용

<=반댓말=>

구상: 사물, 특히 예술작품 따위가 직접 경험하거나 지각할 수 있도록 일정한 형태와 성질을 갖춤.




2. 멤버중 abstract인 메소드를 가지고 있는 클래스를 abstract 클래스라고 한다.

public abstract class 클래스명 {  //추상 클래스


접근지정자 반환자료형 메소드명() {

//실행문;

}


접근지정자 abstract 반환자료형 메소드명(매개변수 리스트);

접근지정자 abstract 반환자료형 메소드명(매개변수 리스트);


}



3. abstract 멤버는 상속 받은 서브 클래스에서 반드시 오버라이딩 하도록 강제하는 역할.

4. abstract 클래스는 객체 생성 불가.

   abstract 클래스에서 abstract이 아닌 일반 멤버는 서브 클래스에서 상속받은 후 객체 생성을 하고 멤버 접근.


//Class50.java







추상 클래스를 이용한 정렬 프로그램

- Arrays.sort() 메소드에 대한 사용자 정의


//SuperSort.java -> 수퍼클래스. 추상클래스로 구현

//SubSort.java -> SuperSort 클래스를 상속받을 서브 클래스

//Class51.java -> main() 메소드 포함







final 키워드

1. 클래스에 final 사용시 -> 상속 불가 클래스

2. 메소드에 final 사용시 -> 오버라이딩 불가 메소드

3. 멤버변수에 final 사용시 -> 초기값 외에 값 재지정 불가 변수 -> 상수(constant)


//Class52.java






interface 키워드


1. interface는 클래스의 템플릿(template) 기능을 수행하는 추상 전용 클래스.

    템플릿 : 어떤 도식이나 서식에서 자주 사용되는 기본 골격.

2. class 키워드 대신 interface 키워드 사용.

3. interface의 멤버는 

멤버변수인 경우 public final static 이며

메소드인 경우 public abstract 이다.

(코딩 생략가능)

4. interface는 수퍼클래스로만 사용 가능하며, 다중 상속을 허용한다. 상속 표현시 extends 대신 implements 키워드 사용.

5. 형식

interface 인터페이스명 {

자료형 멤버변수명 = 초기값;      //public final static 이 앞에 생략되어 있는 상태. 주로, 변수명은 대문자로 표기

반환자료형 메소드명();  //public abstract 이 앞에 생략되어 있는 상태.

}


class 클래스명 implements 인터페이스명 {

@Override

반환자료형 메소드명() { // 상속받은 추상클래스 내 추상 메소드는 필수로 오버라이딩.

}

}



//Class53.java







참조형 변수의 형 변환


1. 참조형 변수의 형 변환은 상속 관계에 있는 수퍼, 서브 클래스 간에서만 형변환이 가능하다.

2. 서브 클래스 객체를 수퍼 클래스 자료형 변수에 저장하는 경우는 묵시적으로 가능. -> 업캐스팅

수퍼클래스명 변수1 = new 서브클래스명();


3. 수퍼 클래스 자료형 변수에 저장된 서브 클래스 객체를 다시 원래의 자료형으로 되돌려야 할때는 명시적으로만 가능. -> 다운캐스팅

서브클래스명 변수2 = new (서브클래스명)변수1;



//Class54.java



//Class55.java







중첩 클래스


1. 클래스 선언 내부에 클래스 선언이 되는 경우 중첩 클래스라고 함.

2. static nested class, inner class, local class, anonymous class


◆ static nested class

- 형태 

접근지정자 class 외부 클래스명 {


//인스턴스 멤버

//스태틱 멤버


접근지정자 static class 내부 클래스명{  //자기 자신도 스택틱 멤버임

//외부 클래스의 스태틱 멤버 접근 가능.

}

}


- static으로 선언된 내부 클래스이다.

- 중첩 클래스의 객체는 중첩 클래스를 포함하고 있는 외부 클래스의 객체와 동일하다.

- 외부 클래스의 클래스 변수와 클래스 메소드는 바로 접근하여 사용가능하다.

- 중첩 클래스와 중첩 클래스를 포함하고 있는 외부 클래스의 인스턴스 변수와 인스턴스 메소드는

  객체를 생성해서 서로 접근이 가능하다.

- 중첩 클래스를 외부에서 단독으로 접근 가능하다.


//Class56.java




◆ inner class

- 형태 

접근지정자 class 외부 클래스명 {


//인스턴스 멤버

//스태틱 멤버


접근지정자 class 내부 클래스명{ //자기 자신도 인스턴스 멤버임


}

}


- static 키워드가 없는 내부 클래스

- 내부 클래스 내부에 스태틱 멤버를 가질 수 없다.

- 외부클래스의 멤버 참조시 외부클래스명.this 키워드 사용.


//Class57.java



◆ local class

- 형태 

class 외부클래스명 {


//인스턴스 멤버

//스태틱 멤버


접근지정자 반환자료형 메소드명 (매개변수 리스트){


//지역 변수


//자기 자신이 지역 변수와 같은 멤버이다.

class 로컬클래스명{

//멤버

}


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

변수.멤버명();

}

}


- 메소드 내부에서 선언된 클래스

- 접근지정자는 붙일 수 없다.

- 로컬클래스의 객체 활동 범위는 메소드 내부에서만 가능.



//Class58.java




◆ anonymous class (익명 클래스)

- 형태 

class 외부클래스명 {

접근지정자 반환자료형 메소드명() {

return new 상위클래스명() {

//오버라이딩 메소드만 구현 가능

};

}

}


//Class59.java



WRITTEN BY
빨강꼬마

,

메소드 오버로딩(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. 정의하는 방법


접근지정자 기타 제어자 반환자료형 메소드명(매개 변수){

//실행문;

//return 구문;

}


3. 클래스 내부에는 멤버변수, 메소드만 정의 가능.


public class 클래스명 {


//멤버변수 정의


//메소드 정의


//클래스 차원에서는 실행문이 올 수 없다. -> 메소드 내부에만 존재가능.


}


4. 메소드에는 특별히 목적을 가진 메소드가 있다.

-> main: 프로그램의 진입점 역할

-> getter, setter : 멤버변수에 대해서 간접적인 데이터 입출력 담당.

-> 생성자 : 객체 생성에만 참여하는 전용 메소드. 멤버변수 초기화 역할 담당. 생성자는 표기하지 않아도 자동 생성 및 호출.


5. 메소드 인수 전달 방법

- Call by Value (값에 의한 전달) : 기본 자료형 간의 값 전달시 발생. 값이 복사되면서 전달

- Call by Reference (참조에 의한 전달) : 참조형 간의 값 전달시 발생. 값의 대한 참조 주소만 전달.

                                                         배열이나 String같이 참조자료형은 결국 값을 공유하게 된다는게 포인트


//Class25.java

//Class26.java







문제)return구문 없이 결과값 돌려받는 메소드 구현. 최대값, 최소값 얻기

실행 예)

입력할 숫자의 갯수 지정(2~10)?3

숫자1?XX

숫자2?YY

숫자3?ZZ

입력 받은 숫자 : XX, YY, ZZ

가장 큰 숫자 :  ZZ


//가장 큰 숫자를 리턴하는 메소드 구현

public void max(int[] arr) {

//가장 큰 값 얻는 과정 추가

}

//Calc.java

//Class27.java




문제) 사용자가 직접 sort() 메소드 구현. Test.sort(배열); 형태로 구성할 것.

//Test.java

//Class28.java








되부름(Recursion)

1. 메소드는 다른 메소드를 호출하여 이용할 수 있을 뿐 아니라 자기 자신의 메소드를 다시 호출하여 사용할 수 있다.

-> 주의. 무한 실행이 될 수도 있음.


public void method1() {

if(조건) {

return; //반환자료형이 void에서 return을 사용하면 메소드 종료를 의미.

}

method1(); //되부름

}


//Class29.java








문제) 팩토리얼(n!) 계산해서 출력. recursion 사용할 것. 반복문 이용 불가.

1 * 2 * 3 * 4 * 5 * 6 * ...  * n -> xxxx


10! -> 3628800


실행 예)

팩토리얼 값(2~10)?

1! -> 1

2! -> 2

3! -> 6

4! -> 24

...

10! -> 3628800

//Class30.java







문제) 밑수, 지수를 받아서 제곱승 출력, recursion 이용.

실행 예)

입력(밑수 지수)?2 10

2^10 -> 1024

//Class31.java







생성자


1. 객체 생성을 담당하는 전용 메소드. 자동 생성되기 때문에 표기하지 않고 생략하는 경우가 많음.

2. 멤버 변수 초기화 역할 담당.

3. 생성자 정의

public class 클래스명 {


//생성자

//반환자료형이 없다.

//메소드명은 클래스명으로만 가능.

//기본 생성자는 컴파일러에 의해 자동 생성되므로 주로 생략함.

public 클래스명() {

}


public static void main(String[] args) {

//생성자 호출 부분

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

}

}


4. 멤버 변수 초기화 역할을 하는 경우는 반드시 생성자를 표기해야 한다.

public class 클래스명 {


//멤버 변수

자료형 변수명;


//생성자

//반환자료형이 없다.

//메소드명은 클래스명으로만 가능.

//기본 생성자는 컴파일러에 의해 자동 생성되므로 주로 생략함.

//매개변수가 존재하는 생성자 표기시 반드시 기본 생성자를 같이 표기해야 한다.


//동일한 명칭을 가진 메소드가 두개 이상인 경우를 메소드 오버로딩 상태라고 함.

//생성자가 두개인 경우는 생성자 오버로딩(constructor overloading)

public 클래스명() {

}


public 클래스명(매개변수 리스트) {

변수명 = 값;

}


public static void main(String[] args) {

//생성자 호출 부분

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

}

}


//Class32.java


//Class33.java







this 생성자


1. this 키워드는 생성된 객체를 지정하는 자기 자신을 의미하는 용어.

2. 객체가 생성될 예정인 경우 미리 변수 선언을 할 수 없으므로, this 키워드로 표현. 객체가 생성되면 그때 비로소 참조주소가 저장된다.


예를 들어 홍길동이라는 객체가 있다면

홍길동 -> 3인칭

나, 너 -> 1, 2인칭

홍길동 입장에서는 '나'라는 표현이 바로 홍길동 자신을 의미.'나'에 해당하는 표현이 바로 this 키워드의 역할.


public class 클래스명 {


private 자료형 변수;


public 클래스명() {

//this 생성자

this(값); // this 키워드 생략불가

}

public 클래스명(자료형 변수) {

this.멤버변수 = 변수; // this 키워드 생략불가

}

public void method1() {

this.method2(); //this 키워드 생략가능

}

public void method2() {

}

}



//Class34







문제) n부터 m까지의 합을 계산해서 출력. 생성자 이용.

실행 예)

숫자1(n)?1

숫자2(m)?100


1부터 100까지의 합 : 5050

//Calc2.java

//Class35.java








멤버변수 초기화 과정


1. 자동 초기화 > 초기화 수식 > 초기화 블럭 > 생성자

2. 자동 초기화, 초기화 수식, 초기화 블럭을 이용하면 외부에서 전달 받은 데이터를 가지고 초기화 시키지는 못함.

3. 동일한 멤버변수에 대해서  자동 초기화, 초기화 수식, 초기화 블럭, 생성자에 의한 초기화 과정을 모두 거치게 되면

    최종적으로 생성자에 의한 초기값만 남게됨.

4. 초기화 과정은 객체가 생성되는 과정에서 자동 실행된다.

public class 클래스명 {

private int a; //자동 초기화

private int b = 10; //초기화 수식

private int c = 10; //초기화 수식

{ //초기화 블럭 (인스턴스 멤버용) -> 제어문 등 사용이 가능. 

this.b = 20;

this.c = 20;

}


public 클래스명() { //생성자에 의한 초기화

this.c = 30;

}


public int getA() {

return a;

}

public int getB() {

return b;

}

public int getC() {

return c;

}

}


//Class36.java







setter와 생성자에 의한 멤버변수 초기화 과정 비교


//Class37.java







문제) 여러명의 국어, 영어, 수학 점수를 입력 받아서 

총점, 평균, 판정, 등수, 과목별 판정, 과목별 평균 결과 출력. 배열, 클래스 이용.


판정 기준은

합격 -> 과목별로 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

과목평균 xxx.x   xxx.x   xxx.x  

-----------------------------------------



//Class38.. 

//기존 코드와 완전 동일하며, main 메소드 내 코등에 아래의 내용이 추가됨


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
빨강꼬마

,

야구게임

Java/기본문법 2012. 10. 9. 17:57

야구 게임


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

정답입니다!




WRITTEN BY
빨강꼬마

,