분류 전체보기

주소록 모델 설계

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

자바의 접근제어

2009. 8. 20. 01:59

자바의 접근제어를 요점만 간단히 설명드립니다.

1. 디폴트 접근 : 패키지 접근 혹은 friendly라고도 하며, 같은 패키지안에서는 지정된 멤버에 접근 가능.

2. public 접근 : 지정된 멤버는 어디서나 접근이 가능함.

3. private 접근 : 클래스 내에서만 접근 가능.

4. protected 접근 : 상속관계에 있는 클래스간의 접근을 허용. 부모 클래스(베이스 클래스)의 멤버로의 접근을 허용. 패키지 접근도 허용.

수업정리 8월 19일

2009. 8. 19. 15:19

Java 문법 정리

1. 변수와 리터럴, 기본타입

1) 논리형 : boolean

2) 문자형 : char

3) 숫자형 : byte, short, int, long, float, double

2. 연산자

1) 대입연산자 : =

2) 산술연산자 : *, /, %, +, -

3) 산술대입연산자 : *=, /=, %=, +=, -=

4) 단항연산자 : ++, --, -(부호), +(부호)

5) 조건연산자(삼항연산자) : (조건) ? true일때 값 : false일때 값

6) 비교연산자 : >, >=, <, <=, ==, !=

7) 논리연산자 : !, &&, ||

8) 비트연산자 : ^, &, |

9) 쉬프트연산자 : <<, <<<, >>

3. 조건문

1) if문

2) if..else문

3) if..else if...else문(다중분기문)

4) switch문

4. 반복문

1) for문

2) while문

3) do..while문

4) 향상된 for문

5. 클래스

1) 구조

클래스명, 멤버변수(객체의 상태 저장), 메서드(객체의 동작), 생성자(멤버변수를 특정 값으로 초기화)

예)

class 클래스명 {
  멤버변수 선언문;
  ...

  생성자() {
  }

  리턴타입 메서드() {
    실행문;
    ...
    [리턴문;]
  }
}

+ Recent posts