일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- network
- Ecilpse
- jdbc
- vision document
- 게시판 제작
- srs
- IO
- js꼬리
- Database
- System Requirement Specification
- 파일
- jdk설치
- 소켓
- workspace
- 제안서
- 이클립스 설정
- 설정
- 네크워크
- 클래스
- java
- 메소드
- Eclipse
- 자바
- 데이터베이스
- analysis
- sequence diagram
- mindmap
- FIle
- custom Tag
- 게시판
- Today
- Total
공적's life
2-1 문서 관리 (등록) 본문
여기까지 잘 따라 오셨습니다. 지금부터는 실제로 코딩을 해보도록 하죠. 제가 거의 다 해드리지는 않고
몇몇 가지 중요한 것만 설명하고 나머지는 구글 그룹스에 코드를 올려주시면 제가 검사해드리겠습니다.
일단 프로젝트를 하나 만들어 보죠.
이곳이 우리가 사용하게 될 워크 스페이스 입니다. 들어 간 후 이미 셋팅 완료 되어있다고 가정하고
마우스 오른쪽 버튼을 누른 후에
그림과 같이 Java Project를 선택해 줍니다. 그런 후에
프로젝트 명에 JDK_001_Board_melpis를 넣어 줍니다.
이것은 JDK> 단순 JDK만 쓰겠다 001> 첫 번째 Board> 프로젝트 이름 melpis> 작성자 입니다.
그런 후에 클래스를 만들어야 합니다. 그림과 같이 해주시면 됩니다.
Src 폴더에서 마우스 오른쪽을 누르면 이런 식으로 만들 수 있습니다. 그런 후에
여기서 포인트 클래스 이름은 항상 앞 글자는 대문자로 작성해주셔야 합니다.
그리고 여기서 public static void main(String[] agrs) 체크 안 해도 만들 수 있으니 혹 체크 안 했다고
쫄지 마시고 그냥 진행 하시면 됩니다. 이제 그러면 이제는 진짜 코드만 짜면 됩니다. ^^;
아 main 메소드 만드는 법은 그냥 main 이라고 치시고 컨트롤+ 스페이스 한방이면 만들어집니다.
이제 코드를 살펴 볼까요?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
첫 번째는 여기 입니다. 여기는 같은 패키지가 아닌 다른 곳에서 클래스를 참조 했다면
이곳에 import 됩니다.
public class Board {
두 번째 살펴 볼 곳은 여기 입니다.
첫 번째 붙어 있는 public은 누구나 접근 가능하다는 이야기 입니다.
두 번째 붙어 있는 class는 정말 간단히 클래스라는 것입니다. 나중에 배우게 될 interface라든가
다른 키워드가 저 자리에 붙기도 합니다.
세 번째는 이름입니다. 우리들도 이름으로 상대방을 구분하듯이 자바 세계도 마찬가지입니다. ^^;
public static void main(String[] args) throws IOException {
세 번째 살펴 볼 것은 여기 입니다. 흔히 이것을 메소드라고 부릅니다.
첫 번째 public은 위에서 설명한 것과 똑같습니다. 두 번째 static은 스스로 다른 영역을 구축하고 있고,
누구나 접근 가능합니다.
세 번째 void는 리턴 해줄 값을 선언 해주는 것입니다. 네 번째 main은 이름이고
다섯 번째 (String[] args) 파라미터로써 String[]은 문자클래스 배열이라는 것을 선언해주고 args는 이름입니다.
나머지 throws IOExceprion은 패스 하도록 하죠. 나중에 예외 처리 할 때 설명 하기에
이번에는 그냥 throws해주시면됩니다.
이제 나오는 코드가 실제로 우리가 짜는 코드인데 어떻게 이렇게 했을까? 퀴즈입니다.!!!
정답은 전에 작성했던 SRS와 Analysis Sequence Diagram을 보고 작성했습니다.
//1. 등록 폼출력
System.out.println("제목: ");
System.out.println("내용: ");
System.out.println("입력 해주세요 ex)제목:내용");
이 부분은 따로 설명 드릴 것 이 없네요.
//2. 사용자 입력(제목, 내용)
InputStreamReader inputStreamReader =new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inputStreamReader);
String userInputData = br.readLine();
이 부분은 사용자에게 데이터를 한 줄만 읽어서 userInputData에게 넘겨 주고 있네요.
변수 이름은 최대한 알기 쉽게 작성하는 것이 좋습니다.
왜냐하면 코드를 자신이 작성해서 자신만 보면 그다지 상관없겠지만, 다른 사람도 우리 코드를 읽고
사용하기 때문에 최대한 명시적으로 작성해주셔야 합니다.
명시적이지 않아도 컴파일러가 오류라고 생각하지 않지만 그래도 꼭 해주십시오.
System.in 이것이 바로 표준 입력 입니다. 이대로는 사용 못하기 때문에 가공해야 합니다.
저는 한 줄 단위로 입력을 구분하고 싶어서
BufferedReader 클래스를 사용했습니다. 이 클래스를 사용하기 위해서는 Reader타입에 데이터가 필요했고,
System.in은 결과는 InputStream 이기 때문에 InputStreamReader를 사용하여 변환하였습니다.
이러한 부분이 어렵게 느껴 질 수 있는데 논리적으로 하나씩 생각해 보면 됩니다. 이게 더 어려운가요? ㅜㅜ
한줄로 표현하자면 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
이렇게 되네요. 편히 쓰고 싶으신분들은 Scanner scanner = new Scanner(System.in);
이렇게 사용하시면 됩니다. 저는 데이터가 저런 식으로 변환한다는 것을 표현하기 위해서 저것을 쓴 것입니다.
String userInputData = scanner.nextLine(); 이렇게 하시면 됩니다.
//3. 데이터 추출
//3.1 데이터 구분하기
String outputData[]=userInputData.split("\\:");
//3.2 제목 추출
String title = outputData[0];
//3.3 내용 추출
String content = outputData[1];
자 이제 다음 데이터 추출이네요. 우리가 받은 데이터는 지정한 프로토콜에 의하여 합쳐져 있는 데이터 입니다.
전혀 아무런 의미가 없죠. 그러기 때문에 분리 해야 합니다. 나중에 웹 환경을 하게 되면 HTTP라는
프로토콜을 사용합니다. 물론 우리가 직접 파싱해서 추출하진 않지만, 그러한 원리를 배우기 위해서
미리 연습하는 것이죠^^; 프로토콜에 구분자로써 “:”을 사용했습니다.
split함수를 쓰면 지정한 문자열을 기준으로 잘라줍니다. 물론 지정한 문자열은 저장 되지 않고요.
결과 값으로는 문자클래스 배열 타입이 리턴이 됩니다. 그렇기 때문에 데이터를 담을 때도 문
자클래스 배열 타입인 String[]로 받습니다. 아시다시피 배열에 첫 번째는 0입니다. 1이 아닙니다.
//4. 유효성 검사
if(title.length()<1 && title.length()>600 ){
return ;
}
if(content.length()<1 && content.length()>2000){
return ;
}
추출이 끝난 데이터는 유효성 검사를 받게 됩니다. 왜 유효성 검사를 하느냐? 그 이유는 데이터가
잘못 될 수도 있기 때문입니다. 예를 들어서 네트워크를 타고 온 데이터가 중간에 소실이 된 데이터를
프로그램에 사용되게 하면 오류가 나기 때문입니다. 오류에 대부분은 아마도 데이터가 아닐까요? 라고
생각합니다. Analysis Sequence Diagram에 유효성 검사를 표기해서 최소 1자부터 600자 이상은
유효성에서 벗어 난 것으로 판단하여 프로그램을 종료 시킵니다.
여기서 이런 질문이 있을 수 있겠네요. 분명히 void로 리턴형을 지정했는데 왜 리턴을 하냐?
저렇게 써서 프로그램을 멈추었습니다.
//5. 문서 번호 가져오기
int seq = 1;
//6. 등록일 가져오기
Date registDate= new Date();
//7. 조회수 입력
int hit= 0;
//8. 등록
//9. 결과 출력
System.out.println("등록 완료");
이 부분은 특별히 설명 드릴게 없네요. 등록 부분에 왜 아무것도 없느냐 하면,
우리는 저 모든 데이터를 한 개에 데이터로 만들고 싶지만 방법을 몰라서 일단 내버려 두었습니다.
(아 진짜 모르는 게 아니고, 다음 진도를 생각해서 잠깐 비워 두었습니다.)
//10.확인
System.out.println("글번호 : "+ seq);
System.out.println("등록일 : "+ registDate +" 조회수 : "+hit);
System.out.println("제목 : "+ title);
System.out.println("내용 : "+ content);
확인 단계를 실상 필요는 없지만 잘 들어갔나 안 들어갔나 확인하는 것입니다.
}
}
자 그럼 결과를 볼까요?
제목:
내용:
입력 해주세요 ex)제목:내용
안녕하세요:자바의 세계에 오신것을 환영합니다^^
등록 완료
글번호 : 1
등록일 : Tue Jul 13 19:17:29 KST 2010 조회수 : 0
제목 : 안녕하세요
내용 : 자바의 세계에 오신것을 환영합니다^^
오 잘나왔네요^^;
그럼 다음 번에 또 뵙죠^^;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Date; public class Board { public static void main(String[] args) throws IOException { //1. 등록 폼출력 System.out.println("제목: "); System.out.println("내용: "); System.out.println("입력 해주세요 ex)제목:내용"); //2. 사용자 입력(제목, 내용) InputStreamReader inputStreamReader =new InputStreamReader(System.in); BufferedReader br = new BufferedReader(inputStreamReader); String userInputData = br.readLine(); //3. 데이터 추출 //3.1 데이터 구분하기 String outputData[]=userInputData.split("\\:"); //3.2 제목 추출 String title = outputData[0]; //3.3 내용 추출 String content = outputData[1]; //4. 유효성 검사 if(title.length()<1 && title.length()>600 ){ return ; } if(content.length()<1 && content.length()>2000){ return ; } //5. 문서 번호 가져오기 int seq = 1; //6. 등록일 가져오기 Date registDate= new Date(); //7. 조회수 입력 int hit= 0; //8. 등록 //9. 결과 출력 System.out.println("등록 완료"); //10.확인 System.out.println("글번호 : "+ seq); System.out.println("등록일 : "+ registDate +" 조회수 : "+hit); System.out.println("제목 : "+ title); System.out.println("내용 : "+ content); } }
'Programing > Java programing' 카테고리의 다른 글
2-6 다음 진행을 위한 회고 (0) | 2010.07.23 |
---|---|
2-5 문서관리 (수정) (0) | 2010.07.22 |
2-4 문서관리 (삭제) (0) | 2010.07.22 |
2-3 문서 관리 (목록 보기) (0) | 2010.07.22 |
2-2 문서 관리 (상세보기) (0) | 2010.07.20 |