728x90

출처 : 라임소프트 님의 블로그(http://raimsoft.com/xe/2997)

 

비주얼스튜디오에 비주얼 어시스트가 있다면, 이클립스에는 테마 플러그인이 있습니다.

 

하지만, 오늘은 플러그인을 사용하지 않고도 이클립스 테마를 변경하는 법을 알아보겠습니다.

http://www.eclipsecolorthemes.org/

바로 이클립스 테마 파일을 제공하는 사이트인데요

자신이 테마를 직접 변경하면서 확인할 수도 있고요.

만들어진 테마나, 인기 있는 테마들을 구경하면서 마음에 드는 것을 자신의 이클립스에 적용시킬 수 잇습니다.

 

 

사이트에서 볼 수 있는 테마들입니다.

주로 노트북 배터리 절약이나, 흰 바탕이 눈이 아프시다거나 소스가 눈이 쏙쏙 잘 들어오신다는 이유로

어두운 배경의 테마를 선호하시는 듯합니다.

xml 파일은 플러그인을 별도로 사용하셔야 하고요.

 

*.epf 파일을 받으실 경우에는 다음과 같은 방법으로 적용시키실 수 있습니다.

1. Project Explorer 에서 오른쪽 마우스 클릭

2. Import 메뉴뉴

3. General -> Preferences

4. Browse 로 원하는 테마를 선택한 후에 Finish 를 누르면 자동으로 적용된답니다.


Posted by 앗뜨거
,
728x90

mysql DATETIME형의 기본값으로 현재시간 설정

mysql에서 시간을 저장하는 컬럼에 현재시간을 기본으로 설정하려면 기본값을 CURRENT_TIMESTAMP로 하면 된다. CURRENT_TIMESTAMP를 기본값으로 하면 INSERT나 UPDATE시 now()를 쓰는 것과 같은 효과를 볼 수 있다.

하지만 DATETIME형의 경우 5.6버전 이후부터 CURRENT_TIMESTAMP를 사용할 수 있다.

5.5이하 버전에서 기본값으로 현재시간을 설정하려면 DATETIME형 대신 TIMESTAMP형을 사용한다. 저장하려는 시간이 아래 기간 안에 있다면 문제없이 쓸 수 있다.

'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

위 시간에 벗어나는 시간대를 저장해야 하고 INSERT시 현재값을 저장하려면 아래 방법 중 1개를 선택한다.
1. mysql 5.6버전 이상으로 업그레이드하고 DATETIME형을 사용, DEFAULT값을 CURRENT_TIMESTAMP로 한다.
2. 5.5버전 이하에서는 DATETIME형으로 선언하고, INSERT시 now()를 사용해서 시간을 수동으로 설정한다.


Posted by 앗뜨거
,
728x90

MySQL이 설치된 폴더의 'BIN' 로 이동하세요.

파일의 형태로 백업이 됩니다.

 

1. 백업 

MySQLDump -u사용자 -p암호 DB이름 > DB백업.sql

ex) mysqldump -uroot -p1234 test_db > test_db.sql -- ('test_db' 전체 내용을 백업)

 

2. 테이블 백업

MySQLDump -u사용자 -p암호 DB이름 TB이름 > TB백업.sql

ex) mysqldump -uroot -p1234 test_db test_table > test_table.sq-- ('test_db' 의 'test_table' 내용을 백업)

 

3. 데이터 백업

MySQLDump -u사용자 -p암호 DB이름 TB이름 -w "조건" > 데이터백업.sql

ex) mysqldump -uroot -p1234 test_db test_table -w "name='홍길동' > test_table.sql 

 -- ('test_db' 의 'test_table' 에서 'name' 이 홍길동인 데이터만 백업) 

 

4. 복원 (데이터 등록)

MySQL -u사용자 -p암호 DB이름 < DB백업.sql -- DB가 존재 하지 않는 경우 미리 생성 후 진행 하여야 함.

MySQL -u사용자 -p암호 DB이름 TB이름 < TB백업.sql

MySQL -u사용자 -p암호 DB이름 TB이름 < 데이터백업.sql

 

주의) 복원 명령 시 기존의 테이블은 제거 된 후 재생성 하여 복원 됩니다. (기존 데이터는 삭제됨) 

 

TIP) 파일명 자동 생성 명령을 위한 명령문 

ex) mysqldump -uroot -p1234 test_db > test_db_%date%.sql -- ('test_db_2013-04-02.sql' 형태로 생성됨.)   

아래와 같이 "backup.bat" batch 파일을 만들면 내가 원하는 형태의 날짜및시간을 표현 할 수 있다. 

----------------------------------------------------------------------------------

@echo off  

SET now=%date:~0,4% -- 2013-04-02 (0번째 부터 4개)
SET now=%now%%date:~5,2% -- 2013-04-02 (5번째 부터 2개)
SET now=%now%%date:~8,2%
 -- 2013-04-02
  

SET now=%now%_%time:~0,2% -- 14:10:10.10
SET now=%now%%time:~3,2% -- 14:10:10.10
SET now=%now%%time:~6,2% -- 14:10:10.10

mysqldump -uroot -p1234 %1 > %1_%now%.sql  -- %1 : 배치 파일 실행 시 포함 한 DB명

-----------------------------------------------------------------------------------

backup.bat test_db < 샐행  -- ('test_db_20130402_141010.sql' 형태로 생성됨.)   


출처 : http://blog.naver.com/kilsu1024/110165190855


Posted by 앗뜨거
,
728x90

mysql -u[아이디] -p [데이터베이스명] < [SQL파일경로]


아이디 : root
데이터베이스명 : test
SQL파일경로 : c:\test.sql

> mysql -uroot -p test < c:\test.sql
Enter password : 

위와 같은 화면이 나왔으면 정상적으로 명령어가 작동하는것 입니다. 패스워드를 입력하면 MYSQL에 Import가 이뤄집니다.


'프로그래밍 > MySQL' 카테고리의 다른 글

엑셀 파일을 Mysql 로 자료 넣기  (2) 2014.07.04
mysql date 현재시간으로 insert 하기  (0) 2014.06.23
MySQL 백업 및 복원  (0) 2014.06.20
MySQL 기본 명령어 정리  (0) 2014.06.18
MySQL 명령어 모음  (0) 2014.06.16
Posted by 앗뜨거
,
728x90

출처 : http://kwonnam.pe.kr/wiki/database/mysql/basic


MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지...
Redhat Linux 7.3, MySQL 3.23.58 에서 테스트함.
설치는 Redhat 기본 제공 RPM으로 했다.

데이터베이스 접속

$ mysql -u 사용자명 -p dbname


설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

$ mysql -u root mysql



비밀번호 변경
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
다음 세가지 방법으로 비밀번호를 변경 할 수 있다.


  • mysqladmin이용
    $ mysqladmin -u root password 새비밀번호

  • update문 이용
    $ mysql -u root mysql

    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';
    mysql> FLUSH PRIVILEGES;


  • Set Password 이용
    SET PASSWORD FOR root=password('새비밀번호');


일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

사용자 추가/삭제

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';


username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는
데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';


위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
아래 댓글에서 rukikuki님이 알려주셨습니다.
GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;
처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요.. 

http://tech.zhenhua.info/2009/01/mysql-error-104528000-access-denied-for.html 에 따르면 '%'란 localhost 를 제외한 모든 호스트를 뜻한다고 한다. 즉, localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.

불필요한 사용자 삭제는

mysql> DLETE FROM user WHERE user='username';
mysql> FLUSH PRIVILEGES;



데이터베이스 생성/보기


  • 데이터베이스를 생성하고,
    mysql> CREATE DATABASE dbname;

  • 현재 존재하는 데이터베이스 목록을 보여준다.
    mysql> SHOW DATABASES;

  • 특정 데이타베이스를 사용하겠다고 선언한다.
    mysql> USE dbname;

  • 쓸모 없으면 과감히 삭제한다.
    mysql> DROP DATABASE [IF EXISTS] dbname;

    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.



테이블 생성/보기


  • 테이블을 생성하고,
    mysql> CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

  • 현재 데이타베이스의 테이블 목록을 보고
    mysql> SHOW TABLES;

  • 테이블 구조를 살펴본다.
    mysql> EXPLAIN tablesname;
    혹은
    mysql> DESCRIBE tablename;

  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.
    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

  • 필요 없으면 삭제한다.
    mysql> DROP TABLE [IF EXISTS] tablename;



현재 상태 보기


mysql> status

--------------
mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)

Connection id: 26
Current database: study
Current user: study@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: euc_kr
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 hours 9 min 59 sec

Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1
Open tables: 1 Queries per second avg: 0.021
--------------



INSERT

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);

혹은

mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);



SELECT

mysql> SELECT col1, col2, ... FROM tablename;


컬럼명을 *로 하면 모든 컬럼 의미.

mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;


컬럼의 이름을 바꿔서 출력.

mysql> SELECT * FROM tablename ORDER BY col1 DESC;
mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;


DESC는 내림차순 ASC는 오름차순.

mysql> SELECT * FROM grade WHERE korean < 90;


조건줘서 SELECT.

mysql> SELECT * FROM grade LIMIT 10;


결과중 처음부터 10개만 가져오기

mysql> SELECT * FROM grade LIMIT 100, 10;


결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.

UPDATE

mysql> UPDATE tablename SET col1=새값 WEHER 조건



DELETE

mysql> DELETE FROM tablename WEHRE 조건



mysql에서 쿼리 결과 세로로 보기
-E 옵션을 줘서 실행한다.

$ mysql -E -u root -p mysql



mysql에서 발생한 오류나 경고 다시 보기

mysql> show errors;
mysql> show warnings;


Posted by 앗뜨거
,
728x90

mysql 명령어 모음


데이터베이스 생성 create database 데이터베이스명;
데이터베이스 목록보기 show databases;
데이터베이스 삭제 drop  database 데이터베이스명;
데이터베이스 선택 use 데이터베이스명;

테이블 생성 create table 테이블명(필드명, 타입, 공백 여부 등등);
테이블 보기 show tables;
테이블 구조 보기   desc 테이블명;
필드 추가 alter table 테이블명 add 새로추가할 필드명과 타입 (위치 설정[after 필드명]);
필드 삭제 alter table 테이블명 drop 삭제할 필드명;
필드명 변경 alter table 테이블명 change 기존 필드명 새로운 필드명 타입;
필드의 타입만 변경 alter table 테이블명 modify 기존필드명 새로운 타입;

테이블 이름 변경 alter table 기존 테이블명 rename 새 테이블명;
테이블 삭제 drop 테이블명;
---------------------------------------------------------------------------------
일괄실행 명령어 mysql -u root명 -p 비번 데이터베이스명 < 파일명
create table ep_tb(
sno int not null,
name varchar(10),
det char(20),
addr varchar(80),
tel char(20),
primary key(sno));

파일형식  sql로 library/bin/ 폴더에 저장
---------------------------------------------------------------------------------

단일레코드 변경
update  table name set 필드명 = 변경할 조건 where  필드명 = 기존 속성값
ex update haksa_tb set age = age - 3 where son  = 2002323;

전체 레코드 변경
update 테이블명 set 필드명 = 조건
update gk_tb set time = time - 1;

레코드 삭제
delete from table name where field name = 조건 ;

단일 레코드의 삭제 (like)
delete from haksa_tb where addr like '대전%';

특정 레코드 삭제 (where)
delete from 테이블명 where age >= 20 and age <= 30;

전체 체코드 삭제 
delete from table name;


백업 myslqdump -u -p 데이터베이스명 > 백업파일명

복원  mysql -u  -p db < 백업파일명



테이블의 모든 레코드 검색 select *from 테이블명;

load data 구문
load data infile "텍스트파일" into table 테이블명;
맥의 경우 기본 폴더 설정이 테이블까지 되어있음  mamp/db/mysql/디비명/파일.txt


중복된 레코드값 제거해서 출력
select distinct 필드명  from  테이블명;

조건 where
select  필드1 필드2 필드3 from  테이블명 where 조건;
(ex. select name, age, set, addr, sex from haksa_tb where sex = 'm';)

필드정렬
order by 필드명 sac(오름차순)-  작은 숫자부터 정렬  desc(내림차순) - 큰숫자부터 정렬
(ex. select name,age, det, addr, sex from haksa_tb where sex='M' order by age ASC;

결과값 제한 Limit
select *from 테이블명 order by 필드명 asc or desc limit 숫자;

집계함수 count

count(*) : 테이블 속에 속하는 레코드의 갯수
count(필드명) : null값이 아닌 레코드의 개수
sum(필드명) : 필드명의 값들의 합계
avg(필듬명) : 필드명의 값들의 평균
max(필드명) :  필드명의 값들의 최대값
min(필드명) : 필드명의 값들의 최소값

group by 는 필드명 기준으로 그 결과를 그룹화 한다.

select sno, sum(score) from jumsu_tb group by son;

group by 에 의해 수행된 결과에 대해 조건을 적용하고 검색 하려면 having절을 이용한다.
주의할점은 반드시 group by를 먼저 기술해야 한다.
ex . select son from jumsu_tb group by sno having count(*) >= 2;

특정 문자열 검색
_(언더스코어) 임의의 한문자 한글의 경우 2바이트이므로2개 사용 
예를 들어 준이라는 이름으로 끝나는 사람을 찾는다.  '__준'

null값을 갖는 정보 검색

select *from gk_tb where hakjum IS NULL;

null값이 정보를 제외하고 검색
select *from gk_tb where hakjum IS NOT NULL;

join검색

2개 이상의 테이블로 결과를 검색하는 과정을 조인검색이라고 한다.

select haksa_tb.name from haksa_tb, jumsu_tb where haksa_tb.sno = jumsu.sno AND jumsu_tb.codee = 1001;


Posted by 앗뜨거
,
728x90

  1. import javax.swing.JFrame;  
  2. import javax.swing.JPanel;  
  3. import java.awt.Color;  
  4.   
  5. public class ChangeJFrameBackgroundColour  
  6. {  
  7. public static void main(String[]args)  
  8. {  
  9.  JFrame a=new JFrame("CHANGE BACKGROUND COLOUR");  
  10.   
  11.  //Now we will try change it's value  
  12.  Color b=new Color(120,255,0);  
  13.   
  14.  JPanel c=new JPanel();  // 이렇게 컬러값을 생성 후
  15.  c.setBackground(b);     // 센 백그라운드에 넣어준다
  16.   
  17.  a.add(c);  
  18.  a.setSize(600,200);  
  19.  a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  20.  a.setVisible(true);  
  21.   
  22.  //I hope you enjoy  
  23.  //Bye  
  24. }  
  25. }  


Posted by 앗뜨거
,
728x90


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ParseExam {
    
    public static void main(String[] args) {
        
        String numStr = "54";
        
        // String값을 int형의 값으로 바꾸는 방법
        int numInt = Integer.parseInt(numStr);
        System.out.println(numInt);
        
        // int형의 값을 String으로 바꾸는 방법
        String numStr2 = String.valueOf(numInt);
        System.out.println(numStr2);
    }
 
}


Posted by 앗뜨거
,
728x90

1. 이클립스 폴더로 들어가 eclipse.ini 를 킨후 제일 아래에 -XX:MaxPermSize=128M 를 넣어준다

2. 윈도우즈 업데이트


윈도우즈 업데이트하면 해결!

Posted by 앗뜨거
,
728x90

출처 : http://alecture.blogspot.kr/2012/09/enum.html


자바의 열거형(enum)


오늘부터 새로운 기분으로 시작한다는 의미에서 JDK 1.5버젼 이상, 즉 자바 5부터 새롭게 등장한 기능인 enum이란 타입에 대해서 알아보도록 하겠다. 자바 5 이상의 버젼이 아닐경우 enum이란 키워드를 이용해 클래스나 변수 혹은 메소드를 그 이전에 만든 프로그램에 쓰려면 여러분은 안타깝지만 새로운 버젼에서는 그 소스들을 다 수정해야한다. 물론 강이의 자바강좌로 자바의 시작을 함께한 이들은 필요가 없겠지만 말이다.^^

enum이란 키워드를 처음본 이들도 있을테고 아니면 자바나 그외 언어를 공부해온 이들은 enum 이놈(?)에 대해서 들어는 보았겠지만 아직도 생소하거나 자유자재로 이용을 못하는 이들이 생각보다 많을 것이다. 그 이유는 단 하나! 이제서야 강이의 자바강좌에서 다루기로 했기 때문이다.ㅎㅎ

농담이고 아직까지 enum에 대해서 익숙하지 않은 이들은 이번 필자의 강의를 집중한다면 여러분이 프로그래머로서 배열을 굳이 만들지 않고서도 간단하게 코드를 작성할수 있는 새로운 자바병기(?)를 하나 가지게 될것이다.^^

enum은 그럼 어떨때 쓰는 것이 효과적일까?
일단 enum은 enumeration이라는 영어단어를 짧게 쓴것이라 보인다. 필자의 영어실력을 믿으므로 확인해본바 없으나 아마 그럴것이다.ㅎㅎ 우리말로 뜻이 "열거" 즉 길게 늘어뜨려놓은 형태를 뜻하는데 자바에서는 쉽게 그런 형태의 예로 배열을 떠올릴수 있을 것이다.

enum을 쓰지않아도 코드 짜는것이 불가능한 것은 아니다. 그런데 이게 왜 등장했냐면 이유는 당연지사 더 편하게 코딩하라고 나온것이다. 프로그램을 만들다보면 배열은 배열인데 이게 우리가 임의로 만들 필요가 없는 아주 당연한 배열의 형태들이 있다. 그 예를 들어보자면, 월요일부터 일요일까지 요일을 쓴다던가, 아니면 위의 그림처럼 화폐의 동전들을 나열한다던가, 그것도 아니면 수금지화목토천해명 같이 행성들을 태양에서부터 차례로 놓기위함이라던지, 이런 식으로 아주 일상적으로 쓰이는 배열 형태들이 있는데 이것을 굳이 배열로 다 정의하려면 시간도 오래걸리고 코드도 상당히 복잡해 보일 것인데 이런 상황에 enum이란 키워드를 쓰면 시간도 시간이지만 그 효율성과 강력한 기능의 이놈(?)을 굳이 두고 어려운 길을 갈 필요는 없을 것이다.ㅎㅎ

그럼 본격적으로 enum을 어떻게 쓰는지 공부해 보기로 하겠다. 그전에 한마디 덧붙이자면, enum을 공부하다가 지친 이들은 용어의 생소함과 더불어 복잡한 이론에 공부하다 지친 이들이 의외로 많을 것인데 그런 이들은 오늘 이 강의로 말미암아 어려운 설명없이도 그동안의 궁금증을 말끔히 씻어주도록 필자가 핵심중의 핵심만 찌르고 나머지는 모두 짤라버리는 초특급 핵심강의를 펼치려하니 이제부터 정신을 한곳에 모아주기 바란다.^^

뭐 대단한 걸 기대하고 있을지 모르는 이들에게는 김이 빠질지 모르겠지만 오늘도 아니나 다를까 딴거 다 필요없고 필자의 예제 하나만 보면 그동안 이해안되었던 모든 의문들이 눈녹듯이 사라질 것이고 새로 배우는 이들은 별거없어 손가락만 빠는 사태가 즐비할지 모르는 황당한 사태가 벌어질 것을 알면서도 필자의 공력을 아낌없이 쏟아부은 예제를 아래에 공개하노니 모두 눈깔빠지도록 쳐다보면서 직접 타이핑해 보기 바란다.ㅎㅎ




강이의 자바강좌 본 예제의 결과값은 아래와 같다.

Today is Monday.
Today is not Monday.
Weekday is Monday to Friday.
NICKLE
5
5

enum을 조금 공부해본 이들이라면 예제를 보면 필자의 설명없이도 저절로 이해가 될정도로 소스를 아주 쉽게 구성하였으나 처음 본 이들은 조금 주춤할지 모르나 필자가 여기에 조금만 강의양념을 쳐주면 역시 별거없다는 것을 깨닫게 될것이다. 그럼 지금부터 예제 설명에 들어가보기로 하겠다.

지금 프로그램을 보면 enum을 이용해서 만든 것이 크게 2가지가 있다. 하나는 Day 열거형이고 또 다른 하나는 Currency 열거형이다. 내용은 안에 보다시피 하나는 일요일~토요일에 관한 요일을 열거한 것이고 또 다른 하나는 화폐통화중 동전들 페니부터~쿼터까지 모아놓은 것이다. 우리나라의 동전 10원, 50원, 100원, 500원처럼 외국에서는 동전이 1센트(페니), 5센트(니컬), 10센트(다임), 25센트(쿼터)라 하는데 그걸 쓴것이다. 우리나라 동전으로 예제를 만들까 하다가 이럴때라도 외국물(?) 먹어보자고 필자가 특별히 외국화폐를 가져왔다.ㅎㅎ

자 일단,
enum Day {SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}
를 열거하였는데 이렇게 static final 상수처럼 enum '이름'을 넣어 관련항목을 위처럼 열거해서 써먹을수가 있다. 그밑에 있는 check 메소드는 필자가 그냥 간단히 오늘이 월요일인지 아닌지를 확인하는 간단한 예를 if~else 구문을 활용해 돌려본 것뿐이다.

그럼 다음으로,
enum Currency를 들수 있는데 enum 이넘이 매력적인 이유중 하나가 위처럼 단순 열거에 그치지 않고 이렇게 이놈안에 메소드나 필드를 정의해서 쓸수가 있는데 이넘이 클래스나 객체로서도 강력한 성능을 발휘하는 것과 동전에서 보듯이 이처럼 물건의 의미가 바로 수치랑 연결되는 것들이 있을때 바로 예제처럼 수치까지 적용해서 써먹을수 있는 기능이 또한 매력적이다.

지금 enum Currency에서는 value 변수를 이용한 생성자가 들어가 있는데 동전이 어떤 것이냐에 따라 그 값어치 즉 화폐단위를 바로 인식하도록 만든 것이다. 만약 PENNY(1) 이런식으로 쓰지 못하였다면 이것을 일일히 변수를 만들어 값을 하나하나 대입해야하는 번거로운 소스를 만들어야할 것이나 이넘(?) 덕분에 그 수고를 한번에 덜수 있었다 하겠다^^

여러분이 지금 필자가 무슨 말하는지 이해가 잘 안되고 있을텐데 그건 당연한 것이다. 지금 필자는 이미 메인메소드의 내용을 알면서 설명을 하는 것이고 여러분은 아직 메인메소드 내용을 잘 모르는 상태로 설명을 듣고 있으니 이해가 잘 안되는 것은 당연하다. 그런데 왜 이렇게 먼저 설명부터 하냐고? 메인메소드를 지금부터 필자의 설명과 함께 보다보면 그 이유를 끝에 알게 될것이다.ㅎㅎ

자 그럼 무엇을 테스트해 보려하는지 메인메소드의 내용을 보기로 하자.
일단 첫째줄에
Day today=Day.MONDAY;
라고 썼는데 말그대로 오늘이 월요일이라고 알려준 것이다.
여기서 알수 있는 것은 enum은 굳이 new라는 키워드를 이용해 레퍼런스로 접근하지 않고 바로 써먹을수 있다는 것이다. 그런 까닭에 check 메소드에 static을 쓴것인데 이 부분에 대해서는 그냥 넘겨도되고 궁금해서 못참겠거든 필자의 예전 static에 관련된 강의를 검색해서 찾아보기 바란다. 그럼 다시 돌아와서 다음줄을 보자
check(today);
오늘이 무슨 요일인지 체크해보라는 명령이다.
아까 오늘이 월요일이라고 알려줬으니 당연히
Today is Monday. 라는 값이 나와야 할것이다.
그 다음에는 토요일이냐고 물어봤으니
월요일이 아니라는 답이 나온 것이고
그 밑에 스위치문에는 오늘이 월요일이니
월요일은 case에 해당이 없으므로 default 구문의 값이 찍히는 것이다.

자 그럼 이제 Currency에 관련된 enum 구문을 테스트해 보기로 하자.
Currency coin=Currency.NICKLE;
즉 coin이 5센트짜리 니컬이라고 정의해 주었다.
그럼 다음줄에 무슨 동전 들고있는지 찍어보라고 아래 명령을 줬더니
System.out.println(coin);
NICKLE이라고 찍힌 것이고
다음줄에 coin.value를 찍으라고 했는데
이게 생성자를 이용해 동전에 따라 수치를 나타내라고 한것이니
결과값에 보는 것처럼 숫자 5가 찍혔으니 enum의 강력한 힘(?)이
제대로 발휘하고 있다고 느낄수 있다.
그 다음줄은 똑같은 명령인데
그렇게 바로 지정해서 쓸수 있다는 것도 보여줄겸 적었을 뿐이다.

뭐 거창한 프로그램 같은데 벌써 끝나버렸다.ㅎㅎ 예제에서 스위치 구문을 메인메소드 안에 바로 썼는데 사실 이건 좋은 예가 아니나 바로 이해가능하도록 핵심사항을 여러분께 바로 전달하기 위해 긴급조치한 부분이니 이점 양해하기 바란다.^ 아까 초반에 필자의 설명이 잘 이해되지 않은 이들도 지금 다시 보면 술술 모든 의문이 다 풀릴 것이다. 필자가 이 한 예제에 두개의 enum 구문을 넣어 이렇게도 저렇게도 쓸수 있다는 것을 보여준 이곳에선 아주 귀한 일석이조(一石二鳥) 자바공법(?)을 불어넣은 예제이니 확실히 복습해서 몽땅 자기걸로 만들기 바란다.^^ 


Posted by 앗뜨거
,