간만에 자바를 이용하여 프로그래밍 공부를 하였다. 후배의 부탁으로 jsp와 서블릿으로 자바를 처음 접하고나서 처음으로 제대로 공부해 보기 위해 책도 구입해서 열공하면서 오늘 코딩한 내용을 붙여넣기 해 본다.
내가 생각해도 오늘은 너무 무리하게 진도를 나간것 같다. 확실히 C언어를 먼저 선행학습해서 그런지 함수사용방법이나 함수선언, 문법 등은 기본가락이 있어서 그냥 넘어갔다. 또한 C++, C#, VB.NET으로 여러 프로젝트를 진행했던지라 그닥 객체지향 쪽도 어렵지 않게 수행할 수 있었다. 오늘 사실 책 전체를 다 봤다. 낼은 시간이 남으면 JFrame 쪽을 공부해야 겠다. 사실 JFrame을 해야 진짜 윈도우프로그램 다운걸 만들지 이런 콘솔은 통신외에는 써먹을때도 없다. 기본로직은 모든 언어와 마찬가지로 비슷하기 때문에 문법만 조금 틀어지기 때문이다. 사실 통신도 C언어나 C++ 만들어서 사용을 마니 하기 때문에 통신부분도 그닥 마음에 들진 않지만 그래도 자바를 공부하고 준비된 모습으로 어디를 가든 자신이 붙을려면 해야 한다고 생각해서 이렇게 작성하고 또 만들어 봐야 겠다. 여러가지 예외사항이나 변수들이 많을꺼라 생각하지만 책에 있는것을 치는것인데 설마 어려울까...

public class IfLeapYear {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  for(int year=1998;year<2006;year++){
   boolean yearTF = false;
   if((0==(year%4)&&0!=(year%100))||0==year%400){
    yearTF = true;
   }else{
    yearTF = false;
   }
   
   if(yearTF){
    System.out.println(year+"는 윤년입니다.");
   }else{
    System.out.println(year+"는 윤년이 아닙니다.");
   }
  }//for

 }

}

import javax.swing.*;
import java.awt.*;
public class Hello4Applet extends JApplet{
 private static final long serialVersionUID=122454214237L;
 public void init(){
  
 }
 public void start(){
  
 }
 public void paint(Graphics g){
  super.paint(g); // 습관적으로 쓰자
  g.drawString("안녕하세요", 50, 50);
 }
}


public class FiveOperation {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int ia=20;
  int ib=67;
  
  double da=69.67;
  double db=34;
  int iResultA=ia+ib;
  int iResultB=ia-ib;
  int iResultC=ia*ib;
  int iResultD=ia/ib;
  int iResultE=ia%ib;
  
  System.out.println("1:"+iResultA);
  System.out.println("2:"+iResultB);
  System.out.println("3:"+iResultC);
  System.out.println("4:"+iResultD);
  System.out.println("5:"+iResultE);
  
  double dResultA=da/db;
  double dResultB=da%db;
  double dc=(da-db*((int)(da/db)));
  System.out.println("6:"+dResultA);
  System.out.println("7:"+dResultB);
  System.out.println("8:"+dc);
  
  int even=4%2;
  int odd=5%2;
  System.out.println("9:"+even);
  System.out.println("9:"+odd);
  
 }

}

import java.util.*;
public class PrintTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int a=20;
  long b=30000L;
  float c=34.98F;
  double d=234.234;
  char e='k';
  Calendar today=Calendar.getInstance();
  System.out.println("1:"+a+""+b+""+c+""+d+""+e);
  System.out.printf("2: \\ %% %d %d %f %f %c %n", a,b,c,d,e);
  System.out.printf("today %1$tm %1te, %1$tY %n", today);
 }

}

학기초에 MFC를 공부하기 위해서 구입한 도서 인데
책 두께로 보거나 프리텍에 명성의 걸맞은 걸주간 책이 나왔다고 생각하고 그당시 학생신분에서는 꽤 큰돈으로 구입했었다.
학기초에는 시간도 나고 해서 공부를 첨에만 조금 했다가 최근들어 소켓통신 공부좀 해볼려고 책을 펼쳐서
뒷장으로 넘어가서 보는데 이건모 어다르고 아 다르다고, 원래 책을 보면서 코딩을 하면 쭈~~욱 쳐 내려가면서 이해하고 칠수 있을정도로 책을 지필해야 하는데 이건모 완전 순서도 엉켜져 있고, 초보들이 따라치다가는 날샐꺼 같다. 비록 본인은 MFC를 조금 해봐서 이리저리 앞뒤로 책을 넘겨보면서 쳐서 완성은 했지만 그래도 이건 아니다 쉽다.
책의 순서가 이렇게 엉켜 있음 어떻게 독자가 보란 말인가?
반성해 하자.

문제의 발단은 위에서 굵게 선언된 맴버함수를 사용하기 위해서 부터다. 책을 쭈욱 치고 갔지만 위에서와 같이 인텔리전스가 나오질 않아서 당황했다. 뒷장을 계속 찾아보아서 아래와 같은 코드를 찾을수 있었다. CClientSocket 클래스에서 맴버함수를 만들어 넣지도 않고 위에 코드가 먼저 설명이 나온것이다.

아 정말 어이없다. 이것때문에 시간 낭비하는 사람들을 위해서 구글링했을때 쉽게 찾을수 있도록 기록으로 남겨 둔다.

Dim RS As Recordset

strQUERY = "  SELECT * FROM TEST"

RS = TBOpen(strQUERY, False)

.RowCount = RS.RecordCount '전체레코드를 구하는 방법

처음에 이것도 잘 못찾아서 해맸다. 사경을...

레퍼런스만 뒤지다뒤지다 안돼서 스프레드 속성값을 찾아보니 protect 라는 속성이 보여서 false로 변경하니 바로 풀린다. 역시 사람은 경험을 해야 하는구나 하는 생각이 든다.

-------------makeCookie.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
<head>
<title>쿠키를 생성하는 예제</title>
</head>
<%
 String cookieName = "myCookie";
 Cookie cookie = new Cookie(cookieName, "hongkd");
 cookie.setMaxAge(60*2);
 cookie.setValue("kimkd");
 response.addCookie(cookie);
%>
<body>
<h2>쿠키를 생성하는 예제</h2>
<p>
"<%=cookieName %>" 쿠키가 생성되었습니다.<br>
<input type="button" value="쿠키의 내용확인"
onclick="javascript:window.location='useCookie.jsp'">
</p>
</body>
</html>

-------------useCookie.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<html>
<head>
<title>웹 브라이저에 저장된 쿠키를 가져오는 예제</title>
</head>
<body>
<h2>웹 브라저에 저장된 쿠키를 가져오는 예제</h2>
 <%
  Cookie[] cookies = request.getCookies();
  if(cookies != null){   
   for(int i=0; i<cookies.length;++i){
    if(cookies[i].getName().equals("myCookie")){
 %>
     쿠키의 이름은 : "<%=cookies[i].getName()%>" 이고,
     쿠키의 값은      : "<%=cookies[i].getValue()%>" 입니다.
      
 <%
             }
   }
  }
 %>
</body>
</html>

쿠키를 생성하고 사용하는 방법이다. 진하게 표시된 부분을 유념해야 한다. 저부분이 틀리면 파라미터를 제대로 전달받지 못해서 노가다하기 싶상이다. 처음이라 그런지 나도 10여분정도 저 부분 찾느라 훈줄이 났다. 책에 있는 데로 그대로 쳤는데 역시 책에 오타였다. 정말 찢어버리고 싶다. 그래도 그책으로 꿋꿋히 버티면서 열공중이다.

아래소스는 사용자가 주민번호를 입력할때 생일이 자동으로 입력되도록 해주라는 요구사항이였는데 아래와 같이 만들면 되겠다. 포커스를 이해하자.

Private Sub Jumin_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles mskJumin.LostFocus
    Dim strSex As String
    Dim strBirth As String

    strSex = Mid(mskJumin.CtlText, 8, 1)
    Select Case strSex
        Case "1", "3"
            cboSex.SelectedIndex = 1
        Case "2", "4"
            cboSex.SelectedIndex = 2
    End Select

    If mskJumin.CtlText <> "" Then '주민번호 자동생성
        mskBirth.CtlText = Format(Val("19" + MSVB.Left(mskJumin.CtlText, 6)), "####-##-##")
    End If
End Sub


mskindate.CtlText = Format(Now(), "yyyy-MM-dd") '날짜표현
mskBirth.CtlText = Format(Val(RS.Fields("birth").Value), "####-##-##") '생일
mskJumin.CtlText = Format(Val(RS.Fields("jumin").Value), "000000-0000000") '주민번호
txtB_surungyak.Text = Format(Val(Replace(txtB_surungyak.Text & "", ",", "")), "#,##0") '금액표현

사무용 프로그램에서는 주민번호나 생일, 금액표현 같은 부분이 세심하게 표현되어야 할때가 자주 있는데 이와 관련된 함수들을 외워두고 정리해 둔다면 유지보수 및 개발에 많은 도움이 될것이고 개발시간도 단축될것이다.

문자를 추출하는 함수는 여러가지가 있지만 이런 기법적인 함수는 외워두자. 가장 빈번하게 사용되는것 같다.

nowYear = MSVB.Left(mskDateYM.CtlText, 4) '년 추출
nowMonth = MSVB.Left(MSVB.Mid(mskDateYM.CtlText, 6), 2) '월 추출
nowDay = MSVB.Right(mskDateYM.CtlText, 2) '일 추출

+ Recent posts