자바 프로그래밍

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입니다.");
	}
}
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("진도개");
	}
}

주소록 모델 설계

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 ArrayList jusorokDB;
	
	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 ArrayList jusorokDB;
	
	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));	
	}
}
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 {
	ArrayList board;
	
	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();
	}

}


접근 제한 지정

2009. 8. 21. 00:45

접근제한 테스트용 예제

  • 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
현재 디렉터리를 기준으로 패키지 지정

+ Recent posts