자바 프로그래밍
-
예제 8월 27일 객체의 생성2009.08.27
-
예제 8월 26일 객체의 형변환2009.08.26
-
예제 8월 26일 주소록 만들기2009.08.26
-
예제 8월 25일 콘솔 기반 미니 게시판 만들기2009.08.25
-
접근 제한 지정2009.08.21
예제 8월 27일 객체의 생성
package net.jeonsam.examples; public class Car { public int wheel; public String color; public int door; private int speed; public void speedUp() { speed++; } public void speedUp(int speed) { this.speed += speed; } public void speedDown() { /*if (speed <= 0) speed = 0; else speed--;*/ speed = (speed <= 0) ? 0 : speed - 1; } public void speedDown(int speed) { this.speed = (this.speed - speed <= 0) ? 0 : this.speed - speed; } public void stop() { speed = 0; } public int showSpeed() { return speed; } public String getName() { String name = null; switch(wheel) { case 1: name = "외발자전거"; break; case 2: name = "오토바이"; break; case 3: case 4: name = wheel + "륜차"; break; default: name = "불량품"; break; } return name; } public static void main(String[] args) { Car myCar = new Car(); myCar.color = "Red"; myCar.wheel = 2; myCar.door = 0; myCar.speedUp(); myCar.speedUp(10); /*System.out.println("현재 당신의 " + ((myCar.wheel <= 2) ? "오토바이" : myCar.wheel + "륜차") + "의 속도는 " + myCar.showSpeed() + "Km입니다.");*/ System.out.println("현재 당신의 " + myCar.getName() + "의 속도는 " + myCar.showSpeed() + "Km입니다."); } }
예제 8월 26일 객체의 형변환
package net.jeonsam.examples; abstract public class Animal { public String name; public int legs; public Animal() { legs = 4; System.out.println("Animal()"); } public Animal(String name) { this(); this.name = name; System.out.println("Animal(" + name + ")"); } public String toString() { return name; } abstract public String action(); }
package net.jeonsam.examples; public abstract class Mammalia extends Animal { public String species; public Mammalia() { System.out.println("Mammalia()"); } public Mammalia(String species) { this(); this.species = species; System.out.println("Mammalia(" + species + ")"); } }
package net.jeonsam.examples; public class Dog extends Mammalia { public Dog() { System.out.println("Dog()"); } public Dog(String s) { super(s); System.out.println("Dog(" + s + ")"); } public String action() { return ("멍멍 짖다"); } public static void main(String[] args) { new Dog("진도개"); } }
예제 8월 26일 주소록 만들기
주소록 모델 설계
package net.jeongsam.jusorok; /** * 주소록 데이터 저장용 빈 * @author 정승용 * */ public class JusorokData { private int num; private String name; private String telNum; /** * Getter * get메서드이름 : * 멤버 변수의 값을 읽음. * 메서드 이름은 Camel 표기법을 따를 것. * 리턴 타입은 멤버 변수의 타입과 일치 시킬 것. * @return 주소록 번호 */ public int getNum() { return num; } /** * Setter * set메서드이름 : * 멤버 변수에 값을 저장. * 메서드 이름은 Camel 표기법을 따를 것. * 리턴 타입은 항상 void이며 매개변수로 멤버 변수와 동일한 타입 변수 선언. * @param num 주소록 번호 */ public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTelNum() { return telNum; } public void setTelNum(String telNum) { this.telNum = telNum; } }
주소록 manager 클래스 설계
package net.jeongsam.jusorok; import java.util.ArrayList; public class JusorokMgr { private ArrayListjusorokDB; public JusorokMgr() { jusorokDB = new ArrayList (); } public void addItem(JusorokData item) { // TODO 주소록을 추가 } public JusorokData getItem(int num) { // TODO 해당 번호 주소록 리턴 return null; } public void removeItem(int num) { // TODO 번호에 해당하는 주소록 삭제 } public ArrayList getListItem() { // TODO 주소록 목록을 리턴 return null; } private int searchItem(int num) { // TODO 번호에 해당하는 주소록 찾기 return 0; } }
완성된 주소록 manager 소스코드
package net.jeongsam.jusorok; import java.util.ArrayList; public class JusorokMgr { private ArrayListjusorokDB; public JusorokMgr() { jusorokDB = new ArrayList (); } public void addItem(JusorokData item) { jusorokDB.add(item); } public JusorokData getItem(int num) { return jusorokDB.get(searchItem(num)); } public void removeItem(int num) { jusorokDB.remove(searchItem(num)); } public ArrayList getListItem() { return jusorokDB; } private int searchItem(int num) { int index = -1; for (int i = 0; i < jusorokDB.size(); i++) { if (num == jusorokDB.get(i).getNum()) { index = i; } } return index; } public static void main(String[] args) { JusorokMgr mgr = new JusorokMgr(); JusorokData item = new JusorokData(); item.setNum(1); item.setName("홍길동"); item.setTelNum("123-123"); mgr.addItem(item); for (JusorokData e : mgr.getListItem()) { System.out.println(e.getNum()); System.out.println(e.getName()); System.out.println(e.getTelNum()); } System.out.println(mgr.searchItem(1)); mgr.removeItem(1); System.out.println(mgr.searchItem(1)); } }
예제 8월 25일 콘솔 기반 미니 게시판 만들기
package net.jeonsam.miniboard; public class MMBoardData { private String title; private String content; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
package net.jeonsam.miniboard; import java.util.ArrayList; import java.util.List; public class MMBoardMgr { ArrayListboard; public MMBoardMgr() { board = new ArrayList (); } public List list() { ArrayList result = new ArrayList (); for (MMBoardData rec : board) { result.add(rec.getTitle()); } return result; } public void write(MMBoardData rec) { board.add(rec); } }
package net.jeonsam.miniboard; import java.util.Scanner; public class MMBoardUI { private MMBoardMgr boardMgr; public MMBoardUI() { boardMgr = new MMBoardMgr(); } private void list() { System.out.println("-----------"); System.out.println("-- 게 시 판 --"); System.out.println("-----------"); if (boardMgr.list().size() == 0) { System.out.println("내용없음..."); } else { for (String e : boardMgr.list()) { System.out.println(e); } } } private void write() { MMBoardData rec = new MMBoardData(); Scanner scan = null; System.out.print("제목: "); scan = new Scanner(System.in); rec.setTitle(scan.nextLine()); System.out.print("내용: "); scan = new Scanner(System.in); rec.setContent(scan.nextLine()); boardMgr.write(rec); } private void prompt() { while(true) { Scanner scan = new Scanner(System.in); String cmd = scan.next(); if (cmd.equals("l")) { list(); } else if (cmd.equals("w")) { write(); } else { System.exit(0); } } } /** * @param args */ public static void main(String[] args) { MMBoardUI my = new MMBoardUI(); my.list(); my.prompt(); } }
접근 제한 지정
접근제한 테스트용 예제
- public 접근에 제한이 없음.
- protected 패키지 이름이 동일하거나 상속 관계에 있을 경우 접근 가능.
- default 패키지 이름이 동일할 경우에만 접근 가능.
- private 선언한 클래스 내에서만 접근 가능.
Base 클래스 선언
package net.jeongsam.exam1; public Base { public int a; private int b; protected int c; int d; // default Base() { a = 1; b = 2; c = 3; d = 4; } void print() { System.out.println(a); // public - 접근 제한 없음. System.out.println(b); // private - Base 클래스 내에서 접근 가능. System.out.println(c); // protected - Base 클래스 내에서 접근 가능. System.out.println(d); // default - Base 클래스 내에서 접근 가능. } public static void main(String[] args) { new Base().print(); } }
컴파일>javac -d . Base.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성
실행>java -classpath . net.jeongsam.exam1.Base
현재 디렉터리를 기준으로 패키지 지정
동일 패키지에서 선언된 클래스
package net.jeongsam.exam1; public Other1 { void print() { Base base = new Base(); System.out.println(base.a); // 출력 - 접근 제한 없음. System.out.println(base.b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(base.c); // 출력 - 동일 패키지 접근 가능. System.out.println(base.d); // 출력 - 동일 패키지 접근 가능. } public static void main(String[] args) { new Other1().print(); } }
컴파일>javac -d . Other1.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성
실행>java -classpath . net.jeongsam.exam1.Other1
현재 디렉터리를 기준으로 패키지 지정
동일 패키지에서 상속 관계 클래스
package net.jeongsam.exam1; public Other2 extends Base { void print() { System.out.println(a); // 출력 - 접근 제한 없음. System.out.println(b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(c); // 출력 - 동일 패키지 접근 가능. 상속 관계 접근 가능. System.out.println(d); // 출력 - 동일 패키지 접근 가능. } public static void main(String[] args) { new Other2().print(); } }
컴파일>javac -d . Other2.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성
실행>java -classpath . net.jeongsam.exam1.Other2
현재 디렉터리를 기준으로 패키지 지정
다른 패키지에서 선언된 클래스
package net.jeongsam.exam2; import net.jeongsam.exam1.Base; public Other3 { void print() { Base base = new Base(); System.out.println(base.a); // 출력 - 접근 제한 없음. System.out.println(base.b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(base.c); // 오류 - 동일 패키지만 접근 가능. System.out.println(base.d); // 오류 - 동일 패키지만 접근 가능. } public static void main(String[] args) { new Other3().print(); } }
컴파일>javac -d . -classpath . Other3.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성. import할 패키지 기준 위치 지정.
실행>java -classpath . net.jeongsam.exam2.Other3
현재 디렉터리를 기준으로 패키지 지정
다른 패키지에서 상속 관계 클래스
package net.jeongsam.exam2; import net.jeongsam.exam1.Base; public Other4 extends Base { void print() { System.out.println(a); // 출력 - 접근 제한 없음. System.out.println(b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(c); // 출력 - 상속 관계 접근 가능. System.out.println(d); // 오류 - 동일 패키지에만 접근 가능. } public static void main(String[] args) { new Other4().print(); } }
컴파일>javac -d . -classpath . Other4.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성. import할 패키지 기준 위치 지정.
실행>java -classpath . net.jeongsam.exam2.Other4
현재 디렉터리를 기준으로 패키지 지정