'Java > 기본문법' 카테고리의 다른 글
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 과목 종료되면 배워야함.
개별정리 내용
* 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
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
메소드 오버로딩(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
메소드
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 메소드 내 코등에 아래의 내용이 추가됨
중복되지 않는 난수 발생. 클래스 이용.
야구 게임
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
[20121016] 14일차(메소드 오버로딩, 상속(inheritance), 메소드오버라이딩) (0) | 2012.10.16 |
---|---|
[20121015] 13일차 (메소드, 생성자, 생성자 오버로딩, 멤버변수 초기화 과정, 초기화 블럭, 되부름(recursion), this키워드) (0) | 2012.10.15 |
[20121011] 11일차(static 키워드, 멤버접근, 객체간의 값 공유, 성적처리 문제) (0) | 2012.10.11 |
[20121010] 10일차(클래스, instance, 접근지정자, public, private, protected, default, getter, setter) (0) | 2012.10.10 |
야구게임 (0) | 2012.10.09 |
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
-----------------------------------------
[20121015] 13일차 (메소드, 생성자, 생성자 오버로딩, 멤버변수 초기화 과정, 초기화 블럭, 되부름(recursion), this키워드) (0) | 2012.10.15 |
---|---|
[20121012] 12일차 (객체 지향(사용자 정의 클래스) 프로그래밍 연습) (0) | 2012.10.15 |
[20121010] 10일차(클래스, instance, 접근지정자, public, private, protected, default, getter, setter) (0) | 2012.10.10 |
야구게임 (0) | 2012.10.09 |
[20121009] 9일차(만년달력, 난수, 클래스, 객체 지향 프로그래밍) (0) | 2012.10.09 |
클래스, 객체, 인스턴스
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("----------------");
}
}
[20121012] 12일차 (객체 지향(사용자 정의 클래스) 프로그래밍 연습) (0) | 2012.10.15 |
---|---|
[20121011] 11일차(static 키워드, 멤버접근, 객체간의 값 공유, 성적처리 문제) (0) | 2012.10.11 |
야구게임 (0) | 2012.10.09 |
[20121009] 9일차(만년달력, 난수, 클래스, 객체 지향 프로그래밍) (0) | 2012.10.09 |
[20121008] 8일차(정렬, 석차알고리즘, 배열의 배열, 마방진, 만년달력(요일구하기)) (0) | 2012.10.09 |
야구 게임
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
정답입니다!
[20121011] 11일차(static 키워드, 멤버접근, 객체간의 값 공유, 성적처리 문제) (0) | 2012.10.11 |
---|---|
[20121010] 10일차(클래스, instance, 접근지정자, public, private, protected, default, getter, setter) (0) | 2012.10.10 |
[20121009] 9일차(만년달력, 난수, 클래스, 객체 지향 프로그래밍) (0) | 2012.10.09 |
[20121008] 8일차(정렬, 석차알고리즘, 배열의 배열, 마방진, 만년달력(요일구하기)) (0) | 2012.10.09 |
[20121005] 7일차(구구단 출력, break, continue, 배열) (0) | 2012.10.08 |