문자열 구분자 | 사용 하는 경우 파싱이 안될 때가 있다.


System.out.println(Arrays.toString("test|test|test|".split("|")));


각 각 하나씩 파싱이 되어 원하는 결과를 얻을 수 없다.


[, t, e, s, t, |, t, e, s, t, |, t, e, s, t]


수정 후 실행 해 보자.


System.out.println(Arrays.toString("test|test|test|".split("\\|")));


원하는 결과를 얻을 수 있다.


[test, test, test]


Sample


<c:forEach var="entry" items="${sampleMap}">
    Key: <c:out value="${entry.key}"/>
    Value: <c:out value="${entry.value}"/>
</c:forEach>

참고사이트


설명


HashMap의 경우에는 무작위로 Key, Value 가 들어간다. 활용 용도에 따라서 정렬이 필요 할수 있는대 TreeMap 에서 제공 하고 있다. 기본적인 Map에 정렬 기능이 추가 되있다고 생각하면 되겠다.


Sample


private Map<String, String> testMaps() {
    Map<String, String> testMaps = new HashMap<String, String>();

    // Doing (PUT)

    testMaps = new TreeMap<String, String>(actionCodes);

    logger.debug(testMaps.toString()); // ASC
    logger.debug(testMaps.descendingMap().toString()); // DESC

    return testMaps;
}


TreeMap은 객체 생성 시 Map을 생성자 인자로 받게 되어 있다. 오름차순 정렬이 기본이다. 내림차순을 이용하려면 descendingMap() 메소드를 사용하자.


참고사이트





Reflection 이란 단어는 반사, 방향, 거울 등에 비친 상 이라는 의미를 담고 있습니다.


개발 당시 많이 사용 하는 new 연산자는 Class의 규칙에 의해서 객체화 된 Instance를 생성 합니다.  


Test test = new Test();


Instance를 거울에 비추어 보면 반대로 Class의 정보를 얻을 수 있습니다. 

거울의 역할을 하는 메소드는 Object Class의 getClass 라고 볼 수 있습니다.


아래는 실제 사용 예 입니다.


public final native Class<?> getClass();


이제 반대로 확인이 가능합니다. Class의 구성 요소인 생성자, 메소드, 전역 변수 등 정보가 필요 할 떄 사용되는 패키지가 java.lang.reflect 입니다. 


패키지를 이용하면 변수의 값을 바꿀 수도 있고, 메소드를 실행도 할 수 있습니다. 막강한 기능인 패키지를 기반으로한 Instance 생성도 가능 합니다. 


Java Framework 중 하나인 Spring의 중요한 기능인 DI(Dependency Injection) 가 동작이 가능한 것도 java.lang.Class<T>, java.lang.reflect 가 존재하기 때문 입니다.


DI 추가 설명 - http://blog.whitelife.co.kr/13


Spring ApplicationContent.xml 중 일부

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd">

 <bean class="kr.whitelife.controller.Wcontroller">
  <constructor-arg ref="service"/>
 </bean>
 
 <bean id="service" class="kr.whitelife.service.Wservice">
  <property name="dao" ref="dao"></property>
 </bean>
 
 <bean id="dao" class="kr.whitelife.dao.Wdao"/>
 
</beans>


<bean> 태그의 class 속성에 들어가 있는 정보를 가지고 package 기반의 Instance 생성을 할 수 있습니다.


간단한 예제 입니다.

import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

public class Reflective {

  public void message(String choice) throws NoSuchMethodException, NullPointerException, SecurityException, IllegalAccessException, InvocationTargetException {
    this.getClass().getDeclaredMethod(choice, (Class<?>[]) null).invoke(this);
  }

  public void hello() {
    System.out.println("hello");
  }

  public static void main(String[] args) {
    try {
      Reflective r = (Reflective) Class.forName("Reflective").newInstance();
      r.message("hello");
    } catch (NoSuchMethodException e) {
      System.out.println(e);
    } catch (NullPointerException e) {
      System.out.println(e);
    } catch (ClassNotFoundException e) {
      System.out.println(e);
    } catch (SecurityException e) {
      System.out.println(e);
    } catch (InstantiationException e) {
      System.out.println(e);
    } catch (IllegalAccessException e) {
      System.out.println(e);
    } catch (InvocationTargetException e) {
      System.out.println(e);
    }
  }
}

위 기능은 Package를 이용한 객체 생성, method 정보를 찾아서 실행 까지 합니다.  기존에 new 연산자를 이용해서 Instance 생성을 했다면 reflect 패키지 활용 시 문자열을 활용하여 동적으로 Instance 제어가 된다.


Java의 상속, 인터페이스와 더불어 reflection과 결합하게 된다면 훨씬 개발이 요구사항에 따른 대응이 수월해지고, Class 단위의 분기를 했다면, Method 단위의 분기도 수월하게 처리가 가능 합니다.


※ 참고 사이트

  Java API - http://docs.oracle.com/javase/6/docs/api/

  이미지 URL - http://www.clker.com/cliparts/e/K/g/G/i/j/blue-stick-man-reflect-hi.png


'Java' 카테고리의 다른 글

Java HashMap Key 정렬 하기  (0) 2014.09.24
Google Guava 라이브러리 사용하기  (0) 2014.07.24
Java Console 게시판 만들기 - 4  (4) 2013.11.13
Java Console 게시판 만들기 - 3  (0) 2013.11.12
Java Console 게시판 만들기 - 2  (0) 2013.11.11


[Java Console 게시판 만들기 - 3] - http://blog.whitelife.co.kr/165


윗 글의 게시판 소스 개선 입니다.


-  Java API 사용

  - List<E>

  - ArrayList<E>


기존 방식은 String 2차원 배열을 사용 했기 때문에 수동으로 Array가 꽉 찼을 경우 재 할당을 해야 했습니다. 개선 방안으로는 Java API 중 List가 있습니다. 내부적으로 배열을 증가 시키는 로직이 있습니다.


Bbs.java

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class Bbs {
  
	private Scanner s;
	private List<String[]> bbsList;

	private int seq;
	
	public Bbs() {
		this.s = new Scanner(System.in);
		this.bbsList = new ArrayList<String[]>();

		this.seq = 1;
	}

	public void readme() {
		System.out.println("1. 등록, 2. 상세보기, 3. 수정, 4. 삭제, 5. 목록, x. 종료");
	}

	public void exit() {
		System.out.println("프로그램을 종료 합니다.");
	}

	public String getInput() {
		return this.s.next();
	}

	public void create() {
		String no = String.valueOf(seq);
		
		System.out.println("input title...");
		String title = getInput();

		System.out.println("input content...");
		String content = getInput();

		String[] bbs = new String[3];
		bbs[0] = no;
		bbs[1] = title;
		bbs[2] = content;
		
		this.bbsList.add(bbs);

		this.seq++;

		System.out.println("등록이 완료 되었습니다.");
	}
	
	private String[] getSearch(String no) {
		for (String[] bbs : this.bbsList) {
			if (bbs != null && bbs[0].equals(no)) {
				return bbs;			
			}
		}

		return null;
	}

	public void read(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}
	
		String[] bbs = this.getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}
		
		System.out.println("no: " + bbs[0]);
		System.out.println("title: " + bbs[1]);
		System.out.println("content: " + bbs[2]);
	}

	public void update(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}
	
		String[] bbs = this.getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}

		System.out.println("input title...");
		String title = this.getInput();

		System.out.println("input content...");
		String content = this.getInput();

		bbs[1] = title;
		bbs[2] = content;

		System.out.println("수정이 완료 되었습니다.");
	}
	
	public void delete(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}

		String[] bbs = this.getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}
		
		this.bbsList.remove(bbs);

		System.out.println("삭제가 완료 되었습니다.");
	}

	public void getList() {
		for (String[] bbs : this.bbsList) {
			if (bbs != null) {
				System.out.println("no: " + bbs[0]);
				System.out.println("title: " + bbs[1]);
				System.out.println("content: " + bbs[2]);
			}
		}
	}

  public static void main(String[] args) {

	Bbs bbs = new Bbs(); 

	while(true) {
	        bbs.readme();		

		String choice = bbs.getInput();

		if (choice.equals("1")) {
			bbs.create();
		} else if (choice.equals("2")) {
			System.out.println("번호를 입력해 주십시오.");
			bbs.read(bbs.getInput());
		} else if (choice.equals("3")) {
			System.out.println("번호를 입력해 주십시오.");
			bbs.update(bbs.getInput());
		} else if (choice.equals("4")) {
			System.out.println("번호를 입력해 주십시오.");
			bbs.delete(bbs.getInput());
		} else if (choice.equals("5")) {
			bbs.getList();
		} else if (choice.equals("x")) {
			bbs.exit();
			break;
		} else {
			System.out.println("잘못 입력 하셨습니다.\n다시 입력해 주십시오.");
		}
    }   
  }
}

'Java' 카테고리의 다른 글

Google Guava 라이브러리 사용하기  (0) 2014.07.24
Java Reflection 활용하기  (0) 2013.11.18
Java Console 게시판 만들기 - 3  (0) 2013.11.12
Java Console 게시판 만들기 - 2  (0) 2013.11.11
Java Console 게시판 만들기  (1) 2013.11.10


[Java Console 게시판 만들기 - 2] - http://blog.whitelife.co.kr/163


윗 글의 게시판 소스 개선 입니다.


-  Object 형태로 변경

-  게시판 Array가 꽉 찼을 경우 동적 Array 생성


이제는 게시글을 제한 없이 입력이 가능 합니다.


Bbs.java

import java.util.Scanner;

public class Bbs {
  
	private Scanner s;
	
	private String[][] bbses;
	private int seq;
	private int gindex;
	
	public Bbs() {
		this.s = new Scanner(System.in);

		this.bbses = new String[9][];
		this.seq = 1;
		this.gindex = 0;
	}

	public void addArray() {
		String[][] temp = this.bbses;
		
		this.bbses = new String[(int)temp.length + 10][];
		System.arraycopy(temp, 0, this.bbses, 0, temp.length);
	}

	public void readme() {
		System.out.println("1. 등록, 2. 상세보기, 3. 수정, 4. 삭제, 5. 목록, x. 종료");
	}

	public void exit() {
		System.out.println("프로그램을 종료 합니다.");
	}

	public String getInput() {
		return this.s.next();
	}

	public void create() {
		if (gindex == bbses.length) {
			this.addArray();
		}

		String no = String.valueOf(seq);
		
		System.out.println("input title...");
		String title = getInput();

		System.out.println("input content...");
		String content = getInput();

		String[] bbs = new String[3];
		bbs[0] = no;
		bbs[1] = title;
		bbs[2] = content;

		this.bbses[this.gindex++] = bbs;
		this.seq++;

		System.out.println("등록이 완료 되었습니다.");
	}
	
	private String[] getSearch(String no) {
		for (String[] bbs : this.bbses) {
			if (bbs != null && bbs[0].equals(no)) {
				return bbs;			
			}
		}

		return null;
	}

	private int getIndex(String no) {
		for (int i=0; i<this.bbses.length; i++) {
			String[] bbs = this.bbses[i];
			
			if (bbs != null && bbs[0].equals(no)) {
				return i;
			}
		}
		
		return -1;
	}

	public void read(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}
	
		String[] bbs = getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}
		
		System.out.println("no: " + bbs[0]);
		System.out.println("title: " + bbs[1]);
		System.out.println("content: " + bbs[2]);
	}

	public void update(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}
	
		String[] bbs = this.getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}

		System.out.println("input title...");
		String title = this.getInput();

		System.out.println("input content...");
		String content = this.getInput();

		bbs[1] = title;
		bbs[2] = content;

		System.out.println("수정이 완료 되었습니다.");
	}
	
	public void delete(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}

		int index = this.getIndex(no);

		if (index == -1) {
			System.out.println("게시글이 없습니다.");
			return;
		}

		this.bbses[index] = null;
		this.gindex--;

		int length = this.bbses.length;				

		for (int i=0; i<length; i++) {
			
			if (index == 0) {
				break;
			}

			if (index == length-1) {
				break;
			}					

			if (i > index) {
				if (i < length) {
					this.bbses[i-1] = this.bbses[i];
					this.bbses[i] = null;
				}
			}
		}

		System.out.println("삭제가 완료 되었습니다.");
	}

	public void getList() {
		for (int i=0; i<this.bbses.length; i++) {
			if (this.bbses[i] == null) continue;				

			System.out.println("index: " + i);
			System.out.println("no: " + this.bbses[i][0]);
			System.out.println("title: " + this.bbses[i][1]);
			System.out.println("content: " + this.bbses[i][2]);
		}			
	}

    public static void main(String[] args) {

		Bbs bbs = new Bbs(); 

		while(true) {
			bbs.readme();		

			String choice = bbs.getInput();

			if (choice.equals("1")) {
				bbs.create();
			} else if (choice.equals("2")) {
				System.out.println("번호를 입력해 주십시오.");
				bbs.read(bbs.getInput());
			} else if (choice.equals("3")) {
				System.out.println("번호를 입력해 주십시오.");
				bbs.update(bbs.getInput());
			} else if (choice.equals("4")) {
				System.out.println("번호를 입력해 주십시오.");
				bbs.delete(bbs.getInput());
			} else if (choice.equals("5")) {
				bbs.getList();
			} else if (choice.equals("x")) {
				bbs.exit();
				break;
			} else {
				System.out.println("잘못 입력 하셨습니다.\n다시 입력해 주십시오.");
			}
        }	
    }
}



[Java Console 게시판 만들기] - http://blog.whitelife.co.kr/161 


윗 글의 게시판 소스 개선 입니다.


기존 main 함수로 작성 했던 부분을 기능별로 분리하여 작성 하였습니다. 


bbs.java

import java.util.Scanner;

public class bbs {
  
	private static Scanner s = new Scanner(System.in);
	
	private static String[][] bbses = new String[9][];
	private static int seq = 1;
	private static int gindex = 0;
	
	public static void readme() {
		System.out.println("1. 등록, 2. 상세보기, 3. 수정, 4. 삭제, 5. 목록, x. 종료");
	}

	public static void exit() {
		System.out.println("프로그램을 종료 합니다.");
	}

	public static String getInput() {
		return s.next();
	}
	
	public static void create() {
		if (gindex == bbses.length) {
			System.out.println("게시글이 꽉 찼습니다.\n삭제 후 이용해 주세요.");
			return;
		}

		String no = String.valueOf(seq);
		
		System.out.println("input title...");
		String title = getInput();

		System.out.println("input content...");
		String content = getInput();

		String[] bbs = new String[3];
		bbs[0] = no;
		bbs[1] = title;
		bbs[2] = content;

		bbses[gindex++] = bbs;
		seq++;

		System.out.println("등록이 완료 되었습니다.");
	}
	
	private static String[] getSearch(String no) {
		for (String[] bbs : bbses) {
			if (bbs != null && bbs[0].equals(no)) {
				return bbs;			
			}
		}

		return null;
	}

	private static int getIndex(String no) {
		for (int i=0; i<bbses.length; i++) {
			String[] bbs = bbses[i];
			
			if (bbs != null && bbs[0].equals(no)) {
				return i;
			}
		}
		
		return -1;
	}

	public static void read(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}
	
		String[] bbs = getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}
		
		System.out.println("no: " + bbs[0]);
		System.out.println("title: " + bbs[1]);
		System.out.println("content: " + bbs[2]);
	}

	public static void update(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}
	
		String[] bbs = getSearch(no);
		
		if (bbs == null) {
			System.out.println("게시글이 없습니다.");
			return;
		}

		System.out.println("input title...");
		String title = getInput();

		System.out.println("input content...");
		String content = getInput();

		bbs[1] = title;
		bbs[2] = content;

		System.out.println("수정이 완료 되었습니다.");
	}
	
	public static void delete(String no) {
		if (no == null || no == "") {
			System.out.println("잘못 입력 하셨습니다.");
			return;
		}

		int index = getIndex(no);

		if (index == -1) {
			System.out.println("게시글이 없습니다.");
			return;
		}

		bbses[index] = null;
		gindex--;

		int length = bbses.length;				

		for (int i=0; i<length; i++) {
			
			if (index == 0) {
				break;
			}

			if (index == length-1) {
				break;
			}					

			if (i > index) {
				if (i < length) {
					bbses[i-1] = bbses[i];
					bbses[i] = null;
				}
			}
		}

		System.out.println("삭제가 완료 되었습니다.");
	}

	public static void getList() {
		for (int i=0; i<bbses.length; i++) {
			if (bbses[i] == null) continue;				

			System.out.println("index: " + i);
			System.out.println("no: " + bbses[i][0]);
			System.out.println("title: " + bbses[i][1]);
			System.out.println("content: " + bbses[i][2]);
		}			
	}

  public static void main(String[] args) {
	while(true) {
		readme();		

		String choice = getInput();

		if (choice.equals("1")) {
			create();
		} else if (choice.equals("2")) {
			System.out.println("번호를 입력해 주십시오.");
			read(getInput());
		} else if (choice.equals("3")) {
			System.out.println("번호를 입력해 주십시오.");
			update(getInput());
		} else if (choice.equals("4")) {
			System.out.println("번호를 입력해 주십시오.");
			delete(getInput());
		} else if (choice.equals("5")) {
			getList();
		} else if (choice.equals("x")) {
			exit();
			break;
		} else {
			System.out.println("잘못 입력 하셨습니다.\n다시 입력해 주십시오.");
		}
     }	
  }
}



최근 들어 자바란 아이에게 신경을 별로 쓰지 못 했다. ㅎㅎ

생각 없이 코딩을 하던 중 String 비교를 하는데 비교가 되지 않아서 equals 함수를 써서 해결을 했다. 무심했던 것 일까...


test.java

public class test {
  public static void main(String[] args) {

    String a = "test";
    String b = "test";
    String c = new String("test");
    String d = new String("test");

    System.out.println("a: " + System.identityHashCode(a));
    System.out.println("b: " + System.identityHashCode(b));
    System.out.println("c: " + System.identityHashCode(c));
    System.out.println("d: " + System.identityHashCode(d));

    System.out.println("a == b: " + (a == b));
    System.out.println("a equals b: " + a.equals(b));
    System.out.println("c == d: " + (c == d));
    System.out.println("c equals d: " + c.equals(d));
  }
}

실행 결과

a: 1579880541
b: 1579880541
c: 1564441079
d: 1918924532
a == b: true
a equals b: true
c == d: false
c equals d: true

c == d 부분을 보면 hash 값이 다른 것을 볼 수 있다. 당연히 주소 값을 비교 하기 때문이다. 뻘짓을 하다니 완전 좌절 했다. ㅋ


게시판을 만들어 보자 


기능 정의

게시글의 최대 수는 9개로 제한 한다. 아래는 세부 기능 이다.


1.  등록

2.  상세 보기

3.  수정

4.  삭제

5.  리스트 보기

6.  종료


Sample

게시 글 항목은 번호, 제목, 내용 간단하게 3가지로 간다.


no: 1

title: title

content: content

 

Code

bbs.java

import java.util.Scanner;

public class bbs {
  
  public static void main(String[] args) {
   
  	Scanner s = new Scanner(System.in);

	String[][] bbses = new String[9][];
	int seq = 1;
	int gindex = 0;

	while(true) {
			
		System.out.println("1. create, 2. read, 3. update, 4. delete, 5. list, x. exit");

		String choice = s.next();

		if (choice.equals("1")) {
				
			if (gindex == bbses.length) {
				System.out.println("게시글이 꽉 찼습니다.\n삭제 후 이용해 주세요.");
				continue;
			}

			String no = String.valueOf(seq);
				
			System.out.println("input title...");
			String title = s.next();

			System.out.println("input content...");
			String content = s.next();

			String[] bbs = new String[3];
			bbs[0] = no;
			bbs[1] = title;
			bbs[2] = content;

			bbses[gindex++] = bbs;
			seq++;

			System.out.println("Complete...");
		} else if (choice.equals("2")) {
				
			System.out.println("input no...");
			String no = s.next();					
				
			boolean flag = false;		

			for (String[] bbs : bbses) {
				if (bbs != null && bbs[0].equals(no)) {
					System.out.println("no: " + bbs[0]);
					System.out.println("title: " + bbs[1]);
					System.out.println("content: " + bbs[2]);
					flag = true;
					break;
				}
			}

			if (!flag) {
				System.out.println("게시글이 없습니다.");
			}
		} else if (choice.equals("3")) {
				
			System.out.println("input no...");
			String no = s.next();					
				
			boolean flag = false;		

			for (String[] bbs : bbses) {
				if (bbs != null && bbs[0].equals(no)) {
					System.out.println("input title...");
					String title = s.next();

					System.out.println("input content...");
					String content = s.next();

					bbs[1] = title;
					bbs[2] = content;

					flag = true;
					break;
				}
			}
				
			if (flag) {
				System.out.println("Complete...");
			} else {
				System.out.println("게시글이 없습니다.");
			}
		} else if (choice.equals("4")) {

			System.out.println("input no...");
			String no = s.next();					
				
			int index = -1;			
			boolean flag = false;		
				
			if (gindex == 0) {
				System.out.println("입력된 게시글이 없습니다.");
				continue;
			}

			for (int i=0; i<bbses.length; i++) {
				String[] bbs = bbses[i];

				if (bbs != null && bbs[0].equals(no)) {
					bbses[i] = null;
					index = i;
					gindex--;
					flag = true;
					break;
				}
			}
				
			if (flag) {
					
				int length = bbses.length;				

				for (int i=0; i<length; i++) {
						
					if (index == 0) {
						break;
					}

					if (index == length-1) {
						break;
					}					

					if (i > index) {
						if (i < length) {
							bbses[i-1] = bbses[i];
							bbses[i] = null;
						}
					}
				}

				System.out.println("Complete...");
			} else {
				System.out.println("게시글이 없습니다.");
			}

		} else if (choice.equals("5")) {
			for (int i=0; i<bbses.length; i++) {
				if (bbses[i] == null) continue;				

				System.out.println("index: " + i);
				System.out.println("no: " + bbses[i][0]);
				System.out.println("title: " + bbses[i][1]);
				System.out.println("content: " + bbses[i][2]);
			}			
		} else if (choice.equals("x")) {
			System.out.println("프로그램을 종료 합니다.");
			break;
		} else {
			System.out.println("잘못 입력 하셨습니다.\n다시 입력해 주십시오.");
		}
	}	
  }
}

실행 결과


1. create, 2. read, 3. update, 4. delete, 5. list, x. exit

1

input title...

111

input content...

222

Complete...

1. create, 2. read, 3. update, 4. delete, 5. list, x. exit

1

input title...

333

input content...

444

Complete...

1. create, 2. read, 3. update, 4. delete, 5. list, x. exit

1

input title...

555

input content...

666

Complete...

1. create, 2. read, 3. update, 4. delete, 5. list, x. exit

5

index: 0

no: 1

title: 111

content: 222

index: 1

no: 2

title: 333

content: 444

index: 2

no: 3

title: 555

content: 666

1. create, 2. read, 3. update, 4. delete, 5. list, x. exit

x

프로그램을 종료 합니다.


심플한 게시판이 실행 되는 것을 확인 할 수 있다.


긴 글을 읽어 주셔서 감사합니다. 


+ Recent posts