• 따뜻한 부모가 될 수 있도록 돕습니다. 현명한 학부모가 될 수 있도록 돕습니다.
  • 글도 쓰고 강연도 합니다.
  • 제 트위터는 @itmembers, 페이스북은 www.facebook.com/itmembers입니다.
  • 네이버 블로그는 charen.kr입니다. 최신 글은 네이버 블로그에서 보실 수 있습니다.
  • 요즘 중국차에 푹 빠져 있는데, 중국차에 대한 얘기도 네이버 블로그에서 전해드립니다.
  • DB연동프로그램 실습(2/7) – 데이터컨트롤을 사용하여 VB 연동

    Posted on : 2002-07-21 | By : SON BYOUNGMOK | In : 비주얼베이직 입문

    태그:, , , , , ,

    0

    정말 오랜만이네요. 강좌를 마무리해달라는 요구가 많았음에도 저의 게으름으로 인해 제때 업데이트하지 못한 점 죄송합니다. 이번달 중에는 꼭 끝내도록 하겠습니다.

    이번 시간에는 지난 시간(이라고 하기에는 너무 오래되었지만…여하튼), 지난 시간에 만든 db1.mdb 파일을 VB에 연결하는 실습을 하겠습니다.
    mdb 파일을 VB와 연동하기 위해서는 Data 컨트롤을 사용합니다. Data 컨트롤은 [그림1]에서 붉은 색 박스로 표시한 것입니다.
    Data 컨트롤을 폼 위에 올려 놓으면 [그림1]과 같이 DB의 레코드를 앞뒤로 이동할 수 있는 컨트롤 이 나타납니다. 이 컨트롤을 지난 시간에 만든 db1.mdb 파일과 연결하면 됩니다.

    1. 먼저 아래 [그림1]과 같은 폼을 만들어 봅시다.
      [그림1]

    2. 각각의 컨트롤에 다음과 같은 속성을 부여합니다.

      여기서 주의해야할 것은 바로 Data 컨트롤입니다.
      Data 컨트롤의 여러 속성 중에서 위의 표에서 굵게 표시한 속성들의 값을 정확하게 지정해주어야 합니다.

      • Connect 속성에는 Access를 선택해야 합니다.
        이 외에도 FoxPro, dBase, Excel 등 여러 데이터베이스 파일을 사용할 수 있습니다만 지난 시간에 비주얼데이터관리자로 만든 db1.mdb 파일은 액세스 파일이므로 반드시 Access로 지정을 해야겠죠.

      • DababaseName 속성에는 mdb 파일의 위치를 정확하게 지정해 줘야 합니다.
        직접 입력해도 되지만 오른쪽의 [...]버튼을 클릭해서 직접 지정해 주면 됩니다.

      • DefaultType 속성은 Jet를 선택합니다.
        Jet에 대해서는 지난 시간에 다루었으므로 설명은 생략합니다. Jet 외에도 ODBC를 사용할 수 있는데, ODBC는 이 강좌에서 다루지 않습니다.

      • RecordsetType는 다이너셋으로 지정합니다.
        다이너셋 외에도 ‘테이블’, ‘스냅샷’ 등이 있습니다. 일반적으로 다이너셋을 가장 많이 사용합니다. ‘스냅샷’은 데이터의 추가․수정 등이 불가능하고(단지 조회만 합니다), ‘테이블’은 하나의 테이블을 사용할 때는 유용하지만 SQL 문을 사용할 수 없어 다소 제약이 따릅니다.

      • RecordSource 속성은 선택한 DB 파일에서 사용할 테이블 이름을 지정합니다.
        지난 시간에 테이블 이름을 employee 라고 지정했으므로 이곳에도 역시 employee라고 입력하면 됩니다.
    3. 데이터 컨트롤이 정확하게 연결되었다면,
      아래와 같이 TextBox 컨트롤의 DataField 속성값을 employee 테이블의 각각의 필드 이름과 동일하게 지정해 주어야 합니다.
      그래야 폼을 실행할 때 해당 텍스트 박스에 employee 테이블의 값이 표시됩니다.

    이상으로 db1.mdb 데이터베이스 파일과 VB가 연결되었습니다.

    다음 시간에는 위 [그림1]의 검색 단추를 클릭했을 때 보일 폼을 디자인합니다. 그런 다음 SQL 실행 단추를 클릭했을 때 보일 폼도 디자인합니다.
    이렇게 세 개의 폼을 모두 만든 다음 본격적인 코딩에 들어갈 것입니다.

    이상 오랜만에 동주 아빠 손병목이었습니다.

    DB연동프로그램 실습(1/7) – MDB 파일 만들기

    Posted on : 2002-03-17 | By : SON BYOUNGMOK | In : 비주얼베이직 입문

    태그:, , , , , ,

    0

    이번 시간에는 데이터 컨트롤을 이용한 데이터베이스 연동 프로그램을 만들어 보겠습니다. 그런데 데이터베이스 연동 프로그램을 만들려면 먼저 데이터베이스가 있어야겠죠.
    비베에서는 ‘비주얼 데이터 관리자’라는 것으로 직접 데이터베이스 파일(*.mdb)을 만들거나 구조를 변경할 수 있습니다.
    따라서 이번 시간에는 먼저 비주얼 데이터 관리자를 이용해 데이터베이스 파일을 만들어 보기로 하겠습니다.

    비주얼 데이터 관리자로 간단하게 mdb 파일을 만들 수 있지만 실전에서는 MS 액세스를 이용하는 경우가 많습니다. 아무렴 전문 데이터베이스 관리 프로그램이 훨씬 편리하지 않을까요.
    그러나 이번 실습에서는 철저하게 비베만을 이용하여 데이터베이스를 만들고, 이와 연동하여 작동하는 프로그램을 만들어 보겠습니다.

    우리가 최종적으로 만들 프로그램의 모습은 이러합니다.

    다음과 같이 사번, 성명, 직위, 부서, 토익 필드로 이루어진 데이터베이스에 직접 데이터를 추가하거나 삭제, 검색할 수 있습니다.
    [그림1]
    [검색] 버튼을 누르면 사번을 입력하여 해당 레코드를 찾는 기능이 구현되고,
    [그림2]
    [그림1]에서 [SQL 실행] 단추를 누르면 직접 SQL 문장을 입력해서 원하는 레코드를 조회할 수 있도록 하는 것입니다.
    [그림3]

    위의 예제에는 JET를 이용한 데이터베이스 연동의 기본 개념과 방법이 모두 포함되어 있습니다.
    지금까지와의 실습 프로그램과는 다르게 매우 어렵게 느껴질지도 모르겠으나 비베에서는 비교적 간단하게 이 모든 기능을 구현할 수 있습니다.

    1. 먼저 다음과 같은 구조의 데이터베이스를 만들기 위해 비베의 [추가 기능] 메뉴에서 [비주얼 데이터 관리자]를 실행합니다.

      [그림4] employee 테이블 구조

      [그림5]

    2. [파일]-[새 파일]-[Microsoft Access]-[Version 7.0 MDB]를 선택합니다.
      [그림6]

    3. 원하는 위치에 원하는 파일명을 입력합니다.
      이 실습에서는 C드라이브의 db1 폴더에 db1.mdb라는 파일명으로 만들었습니다.
      [그림7]

    4. 그림과 같이 Properties를 마우스 오른쪽 단추로 눌러 나타나는 팝업 메뉴에서 [새 테이블]을 클릭합니다.
      [그림8]

    5. 테이블 이름 입력란에 ‘employee’를 입력하고 [필드 추가] 단추를 클릭합니다.
      [그림9]

    6. 이름 입력란에 ‘number’를 입력하고 형식은 ‘Text’, 크기는 ‘4′를 입력한 다음 [확인] 단추를 누릅니다.
      [그림10]

    7. 위와 같은 방식으로 name, class, position, toeic 필드를 추가합니다.
      [그림11]
      형식과 크기는 [그림4]를 참조하세요.

    이번 시간에 [그림1]과 같은 폼까지 만들어 볼 생각이었는데 그림이 많아 내용이 좀 길어졌네요.
    아쉽지만 폼을 만들고 코딩하는 것은 다음 시간부터 하기로 하죠.

    일요일이 다 가는 소리가 들리네요.
    이상 동주아빠 손병목이었습니다.

    비베와 데이터베이스 – JET와 데이터 컨트롤

    Posted on : 2002-03-14 | By : SON BYOUNGMOK | In : 비주얼베이직 입문

    태그:, , , , , ,

    0

    비베 입문 과정을 어디까지로 할까 고민입니다. 데이터베이스를 다루자니 입문 과정은 아닌 것 같고… 그렇다고 빼자니 비베에서 가장 중요한 부분을 빠뜨린 것 같고…
    그래서 내린 결론은, ‘비베에서 데이터베이스를 다루지 않으면 단팥없는 붕어빵을 먹은 것과 같다’는 것입니다.

    비베처럼 쉽고 강력하게 데이터베이스와 연동할 수 있는 프로그래밍 언어도 없을 것입니다. 물론 쉽다는 것에 더욱 강점을 두어야겠죠.

    1. 데이터베이스
      비베와 데이터베이스를 연동하는 실습을 하기 전에 데이터베이스에 대해 조금 알고 넘어가야겠죠?
      그러나 데이터베이스에 대한 개념 설명은 생략하겠습니다.
      마침 데이터베이스 기초 강좌가 별도로 있으니 오라클(데이터베이스) 입문 초기 강좌에서 비교적 자세히 다루고 있습니다.
      그래서 데이터베이스, 관계형 데이터베이스, 테이블, 필드, 레코드에 대한 개념 설명은 생략하겠습니다.

    2. JET
      JET는 Joint Engine Technology의 약자입니다. 마이크로소프트는 가끔 이렇게 이해안되는 이름을 짓더라구요. 아마도 제트기할 때의 jet와 비슷한 의미로 강력하다는 것을 강조하기 위해서 만든 이름이 아닐까하는 생각이 드네요.

      JET는 마이크로소프트 오피스와 비주얼베이직 등에 의해 사용되는 데이터베이스 엔진을 말합니다. 왠 엔진?
      엔진은 “핵심적이고 본질적인 기능을 수행하는” 프로그램이라는 뜻을 가지고 있습니다. 즉 기계적인 엔진에 필적할만한 역할을 하는 프로그램이라고 보면 되죠.

      결국 JET는 마이크로소프트에서 사용하는 데이터베이스의 핵심 기술이라고 보면 되겠네요. 그럼 마이크로소프트에서 사용하는 데이터베이스가 무엇일까요? 흔히 액세스 파일이라고 불리우는 확장자가 mdb인 데이터베이스를 말합니다. MS 액세스로 데이터베이스를 만들면 확장자가 mdb가 됩니다. 다른 데이터베이스와의 차이점이라면 모든 데이터베이스 개체들을 mdb라는 확장자를 갖는 단일 파일 내에 저장한다는 것입니다.
      MS 액세스 실행 화면

      그럼 왜 JET를 사용하는가?
      조금 전에 JET가 데이터베이스의 핵심 기술이라고 했죠? 그러니까 데이터베이스를 다루는 왠만한 것은 JET가 다 수행할 수 있다는 말이 됩니다. 그럼 비베는 뭘하죠?

      비베는 JET에게 명령만 합니다. 예를 들어 비베 프로그램에서 JET에게 데이터베이스의 어떤 레코드를 삭제하라고 명령만 합니다.(삭제할 때는 delete 메소드를 사용합니다.) 그러면 JET가 실제로 레코드를 삭제하는 것이죠. 비베는 데이터베이스의 레코드를 어떻게 삭제하고 추가하고 갱신하는지에 대해 자세하게 처리할 필요는 없습니다. 그냥 JET에게 명령만 내리는 거죠.

    3. 데이터 컨트롤
      폼에 데이터 컨트롤을 추가하면 수평 스크롤바 같은 것이 생깁니다.

      데이터 컨트롤을 추가함으로써 해당 프로그램에서는 JET를 사용할 수 있게 되는 것입니다. 이 데이터 컨트롤은 데이터베이스 파일(*.mdb)과 비베 프로그램을 연결시켜주는 역할을 합니다.
      데이터 컨트롤의 왼쪽 또는 오른쪽 화살표를 클릭하면 이 데이터 컨트롤과 연결된 데이터베이스의 전·후 레코드로 이동하게 해줍니다.
      데이터 컨트롤은 폼 위에 추가하여 컨트롤이 보이는 상태에서 사용할 수도 있고, 예전에 시계 프로그램 만들 때처럼 컨트롤은 추가했지만 실제로 보이지 않은 상태에서 그 기능만 이용할 수도 있습니다.

      그 외에도 바운드 컨트롤이나 레코드 세트 객체 등의 개념에 대해 이해하는 것이 좋으나 설명이 길어지면 오히려 헤깔릴 것 같습니다.
      이 강좌는 어디까지나 비주얼베이직의 여러 기능을 한번씩 훑어보는 데 그 목적이 있습니다. “아하~ 이런 것도 할 수 있구나”하는 것만 느끼시면 됩니다. 보다 구체적이고 체계적인 학습을 위해서는 별도의 참고 서적이 필요할 것입니다.


    이번 시간에는 개념 설명만 간단하게 했습니다.
    다음 시간에는 비베를 이용하여 직접 데이터베이스 파일을 만들어 보겠습니다.

    벌써 한 주의 반이 지나가버렸습니다.
    목요일 새벽, 동주 아빠 손병목이었습니다.

    배포용 설치 프로그램 만들기

    Posted on : 2002-03-10 | By : SON BYOUNGMOK | In : 비주얼베이직 입문

    태그:, , , , , ,

    0

    정말 오랜만이네요. 데이터베이스(오라클) 기초 강좌를 신설하고서 열심히 강좌를 올리느라 비베 강좌에 소홀했습니다.
    오늘은 예정된 순서를 바꿔 설치 프로그램을 만드는 실습을 해보겠습니다.
    앞으로 기초 과정에서 해야할 실습 중에서 가장 쉬운 내용이라 예정보다 먼저 다루기로 했습니다.

    비베에서는 매우 쉽게 설치 프로그램을 만들 수 있습니다.
    아주 간단한 프로그램이지만 그래도 누군가에게 배포하기 위해 줄 때는 Setup.exe 파일이 포함된 설치 프로그램 형태로 줘야 폼(?)이 나지 않을까요?
    그리고 상대방의 컴퓨터에 관련 DLL 파일이 모두 있다는 보장도 없구요.
    무슨 말이냐면, 비베로 만든 프로그램을 실행하기 위해서는 관련 DLL 파일이 필요합니다. 지난 시간에 실습한 랜덤 파일 실습 프로그램도 실행 파일만 있다고 실행되지는 않습니다.
    프로그램이 실행되는 PC에 Comcat.dll, Msvbvm60.dll, olepro32.dll, Vb6ko.dll 외에도 여러 개의 DLL 파일이 있어야 실행되는 것입니다.
    이런 파일들을 모두 찾아서 배포용 디스켓이나 CD에 담는다는 것은 매우 힘든 일입니다.
    이럴 때 비베에서는 ‘패키지 및 배포 마법사’를 사용해 손쉽게 설치 프로그램을 만들 수 있습니다.

    지난 시간에 실습한 랜덤 파일 실습 프로그램의 배포용 설치 프로그램을 만드는 실습을 하겠습니다.

    1. 지난 시간에 실습한 소스 파일을 불러 오세요.(소스 파일은 프로그래밍 소스 자료실에 있습니다.)
      그리고 프로젝트 이름을 ‘랜덤 파일’로 바꿉니다.
      그냥 Project1 이라고 두면 나중에 프로그램이 설치된 다음 Project1이라는 이름이 생깁니다.

    2. 설치 프로그램을 만들려면 우선 실행 파일이 필요하겠죠. 실습 파일 만들기는 예전에 시계 프로그램 만들 때 이미 해 본 바가 있습니다.
      다음과 같이 파일 메뉴에서 실행 파일을 만드세요.

    3. 이제 ‘패키지 및 배포 마법사’를 실행해야겠습니다.
      [추가 기능]-[패키지 및 배포 마법사]를 실행하세요.
      만약 [패키지 및 배포 마법사]가 없다면 [추가 기능]-[추가 기능 관리자]를 실행해서 다음과 같이 ‘패키지 및 배포 마법사’를 선택하고 ‘로드/언로드’,'시작할 때 로드’를 모두 체크 표시하고 [확인]을 누르세요.

      다시 [추가 기능] 메뉴를 보면 [패키지 및 배포 마법사]가 보입니다. 실행을 하세요.

    4. [패키지 및 배포 마법사] 대화 상자에서 ‘패키지’ 아이콘을 선택합니다.

    5. 다음과 같은 메시지가 나오면 그냥 [예] 버튼을 누르세요.

    6. 이후 화면부터는 계속 [다음] 버튼만 누르면 됩니다.
      • ‘패키지 형식’을 묻는 화면이 나오면 ‘표준 설치 패키지’가 선택된 상태에서 [다음] 버튼을 누르고

      • ‘패키지 폴더’를 선택하는 화면이 나오면 기본으로 제시한 폴더나 다른 폴더를 선택한 다음 [다음] 버튼을 누르고
      • ‘포함된 파일’을 선택하는 화면이 나오면 그냥 [다음] 버튼을 누릅니다.

        만약 배포할 프로그램에 Readme.txt나 기타 추가로 필요한 파일이 있으면 이 단계에서 [추가] 버튼을 눌러 추가할 수 있습니다.
        위 그림에서 보이듯이 배포용 설치 프로그램 여러 개의 파일이 필요하다는 것을 알 수 있습니다.

      • ‘Cab’ 옵션 화면에서는 그냥 ‘단일 Cab 파일’이 선택된 상태에서 [다음]을 누릅니다.
      • ‘설치 제목’ 화면에서는 설치 프로그램으로 설치할 때 나타나는 제목을 입력합니다.
        여기서는 ‘랜덤 파일 설치 실습’이라고 적어 보겠습니다.

      • ‘시작 메뉴 항목’ 화면도 그냥 [다음]을 누릅니다. 시작 메뉴에서 어느 곳에 위치하는지 확인하시고…
      • ‘설치 위치’ 화면에서도 그냥 [다음]을 누릅니다. 기본 지정된 위치가 왠지 오류도 없고 안심이 될 것 같으니까…
      • ‘공유 파일’ 화면에서도 [다음]을 눌러 넘어가세요. 공유 파일은 두 개 이상의 프로그램에서 함께 사용할 파일을 선택하는 것입니다.
      • 마지막으로 완료 화면에서는 그냥 [마침]을 눌러도 되고 ‘스크립트 이름’란에 적당한 이름을 입력해도 됩니다.
    7. 설치 프로그램을 완성하면 해당 폴더에 다음과 같은 파일이 보입니다.

      Support 폴더도 꼭 필요합니다. Support 폴더에는 각종 DLL 파일이 저장되어 있습니다.
      위 그림에서 보이는 파일 중 Setup.lst 파일을 메모장에서 한번 열어보세요.
      주~욱 훑어 보면 아시겠지만 배포용 설치 프로그램에 필요한 파일과 위치 등에 대한 정보가 기록되어 있습니다.

    8. 그럼 마지막으로 Setup 파일을 실행하여 프로그램을 직접 설치해 보세요.
      그리고 지울 때는…. 제어판의 ‘프로그램 추가 제거’를 이용하면 됩니다.

    비베에서 제공하는 배포용 설치 프로그램 마법사는 매우 훌륭합니다.
    그러나 전문가들은 비베에서 자체 제공하는 설치 프로그램 마법사가 아닌 다른 설치 프로그램 툴을 이용하는 경우가 많습니다.
    비베에서 제공하는 설치 프로그램 마법사로 만든 설치 프로그램의 덩치가 크고 실제 설치 속도가 느리다는 이유 때문이죠.

    벌써 일요일이 다 가버렸네요.
    내일부터는 다시 월요일입니다. 활기찬 한 주 되시길 바라면서,
    이상 동주 아빠 손병목이었습니다.

    예제로 익히는 파일 시스템(2) – 랜덤 접근 파일(下)

    Posted on : 2002-03-01 | By : SON BYOUNGMOK | In : 비주얼베이직 입문

    태그:, , , , , ,

    0

    지난 시간에 이어 랜덤 파일 실습 계속합니다. 지난 시간과 마찬가지로 일단 폼을 만들고 코딩을 다 하고 난 다음에 설명을 드리도록 하죠.
    소스 파일은 프로그래밍 소스 자료실에 있습니다.

    1. 지난 시간에 작성한 frmRandom 폼의 코드 창을 열어 cdmDisplay 개체의 Click 이벤트에 다음의 코드를 추가합니다.

      [조회] 단추를 누르면 frmDisplay 폼이 나타나도록 한 것입니다.

    2. 그러면 frmDisplay 폼을 만들어 봅시다.
      • 아래와 같이 폼을 디자인합니다. 지난 시간의 frmRandom과 거의 유사합니다.

      • 다음과 같이 속성 값을 변경합니다.
    3. 코드 창을 열어 다음과 같이 코딩을 합니다.

    4. 그럼 실행을 해보세요.
      • 실행을 하면 frmRandom 폼(랜덤 파일 실습 창)이 나타나죠. 데이터를 여러 개 입력하고 난 다음에

      • [조회] 단추를 눌러 frmDisplay 폼(랜덤 파일 조회 창)을 엽니다.
      • [<<] 와 [>>] 단추를 눌러 입력한 데이터를 앞 뒤로 검색해 봅니다.

    코드를 살펴 볼까요?
    ① 부분은 지난 시간의 코드와 비슷합니다. tPerson이라는 새로은 데이터 형을 선언하고 몇 가지 변수를 선언하였습니다.
    전체 레코드의 개수(iFileNumOfRec)와 현재 레코드의 위치(iCruRec)를 저장하기 위한 변수가 추가되었네요.

    ②는 사용자 정의 함수입니다.
    Display_File( )이라는 Sub 함수를 만든 것입니다.
    ③,⑤,⑥을 살펴보면 Call Display_File 이라고 씌어진 부분 있죠? 바로 이 함수를 실행하라는 것이죠.
    이 함수(프로시저)의 기능은 쉽게 이해됩니다.
    Get 명령은 랜덤 파일을 읽을 때 사용합니다.
    Get 파일 번호, 레코드 위치, 데이터와 같은 식으로 사용됩니다.
    #iFileNum 파일을 열어서 tPerson이라는 데이터에서 iCurRec 위치의 레코드를 읽으라는 뜻입니다.
    그렇게 읽어서 첫번째 텍스트 박스에 tPerson의 이름 필드(항목)의 내용을 표시합니다.(txtName.Text=tPerson.strName)
    같은 방식으로 지역과 연락처도 표시합니다.

    ③은 폼이 열릴 때 자동으로 실행되는 부분인데, Form 개체의 Load 이벤트에 작성합니다.
    파일을 랜덤 형식으로 열어서 전체 중에서 처음 레코드를 표시하라는 것입니다.
    현재 레코드를 표시할 때 위 ②에서 작성한 Display_File 함수를 실행했습니다.
    LOF 함수는 파일의 길이를 구할 때 사용합니다.
    형식은 LOF(파일번호)와 같은 식으로 사용합니다.
    따라서 위와 같이 LOF(iFileNum)는 현재 열린 파일(cardfile.txt)의 전체 길이를 구하라는 것입니다. 전체 길이를 구해서 Len(tPerson)으로 나누었습니다.
    tPerson은 하나의 레코드가 들어갈 수 있는 변수이니까, 전체 레코드의 길이에서 하나의 레코드의 길이를 나누면 전체 레코드의 개수가 구해집니다.
    대부분 레코드의 개수를 구할 때는 이와 같은 방법을 사용합니다. 이렇게 구한 전체 레코드이 개수를 iNumOfRec 변수에 저장을 하는 것이죠.

    ④는 Form 개체의 Unload 이벤트에 작성한 코드입니다.
    폼을 닫을 때 현재 열린 파일을 닫아주라는 것입니다.

    ⑤는 [<<] 단추를 눌렀을 때 현재 레코드보다 앞쪽의 레코드를 표시하라는 것이죠.
    단 현재 레코드의 위치(iCurRec)가 1보다 클 경우에만 그렇게 하라는 것입니다. 현재 레코드의 위치가 맨 처음(1) 레코드이면 그대로 두라는 뜻입니다.

    ⑥은 [>>] 단추를 눌렀을 때 현재 레코드보다 뒷쪽의 레코드를 표시하라는 것입니다.
    단 현재 레코드의 위치(iCurRec)가 최종 레코드의 위치(iNumOfRec)보다 작을 경우에만 그렇게 하라는 것입니다.

    만약 지난 시간의 내용을 이해하셨다면 이번 시간이 그리 어렵지는 않을 것입니다.
    그러나 파일의 입출력과 관련하여 프로그래밍 경험이 없을 경우에는 개념적으로 이해되지 않는 부분이 많아 선뜻 이해하기 쉽지 않을 수 있습니다.
    방법은 반복 학습밖에 없습니다.
    몇 번 비슷한 예제를 만들고 실행하다보면 어느새 그 개념을 깨치게 되는 것이죠.

    삼일절입니다.
    행복한 하루 되시고요…
    이상 동주아빠 손병목이었습니다.

    Switch to our mobile site