1. 연산자(Operator)
  
연산자는 모든 프로그래밍언어에서 가장 기본적이면서도 중요한 요소이다. 각 연산자의 특징과 수행결과, 그리고 우선순위에 대해서 아주 잘 알고 있어야 한다. 
자바는 연산자의 대부분과 조건문과 반복문 등의 기본 구문을 C언어에서 가져왔다. 그 것이 C언어를 배운 사람이 자바를 쉽게 배우는 이유이기도 하다. 
하지만, 프로그래밍 언어를 처음 배우는 사람이 자바를 배우기 위해 C언어를 배울 필요는 없다. 그 시간에 자바를 배우는 데 투자하는 것이 프로그래밍실력을 향상시키는데 더 도움이 되기 때문이다. 


[표3-1연산자의 종류와 우선순위] 

[참고]instanceof연산자는 인스턴스의 타입을 알아내는데 사용되는 연산자이다. 후에 자세하게 다룰 것이므로 이에 대한 설명은 생략하겠다. 

위의 표에서 같은 줄에 있는 연산자들은 우선순위가 같다. 우선순위가 같은 연산자들 간에는 연산방향에 의해서 연산순서가 정해진다. 


1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다. 
2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다. 
3. 단항연산자와 대입연산자를 제외하고는 연산의 진행방향이 왼쪽에서 오른쪽이다. 

[참고]연산자가 연산을 하는데 필요로 하는 피연산자의 개수에 따라서 단항, 이항, 삼항 연산자라고 부른다. 덧셈 연산자(+)는 두 개의 피연산자를 필요로 하므로 이항연산자이다. 
[참고]표3-1에서 산술연산자 중 단항연산자의 '(자료형)'은 형변환에 사용되는 캐스트 연산자이다.
 

연산의 진행방향을 설명하기위해 다음과 같은 두 개의 식을 예로 들어보자. 수식 3*4*5는 곱셈연산자(*)의 연산방향이 왼쪽에서 오른쪽이므로 수식의 왼쪽에 있는 3*4가 먼저 계산되고, 그 다음 3*4의 연산결과인 12와 5의 곱셈을 수행한다. 

 <BR> 

대입연산자는 연산방향이 오른쪽에서 왼쪽으로 진행하므로, 수식 x=y=3의 경우 제일 오른쪽에서부터 계산을 시작해서 왼쪽으로 진행해 나간다. 
따라서, y=3이 가장 먼저 수행되어서 y에 3이 저장되며, 그 다음에 x=y가 수행되어 y에 저장되어 있는 값이 다시 x에 저장되어 x 역시 y와 같은 값을 갖게 된다. 
즉, x=y=3;은 아래 두 문장을 한 문장으로 줄여 쓴 것과 같다. 


y=3;       // 먼저 y에 3이 저장되고 
x=y;       // y에 저장되어 있는 값(3)이 x에 저장된다. 


[Tip]연산우선순위가 확실하지 않을 경우에는 괄호를 사용하면 된다. 괄호 안의 계산식이 먼저 계산될 것이 확실하기 때문이다. 

이제 위의 표에 나와 있는 연산자들을 하나씩 자세히 살펴보도록 하자. 




   2. 단항연산자
  
2.1증감연산자 - ++, --

일반적으로 단항연산자는 피연산자의 오른쪽에 위치하지만, ++와 --연산자는 양쪽 모두 가능하다. 연산자를 어느 위치에 놓는가에 따라서 연산결과가 달라질 수 있다. 


++ : 피연산자(operand)의 값을 1 증가 시킨다. 
-- : 피연산자(operand)의 값을 1 감소 시킨다. 


boolean형을 제외한 모든 기본형(Primitive Type) 변수에 사용 가능하며, 피연산자의 왼쪽에 사용하는 전위형과 오른쪽에 사용하는 후위형이 있다. 

[예제3-1] OperatorEx1.java

class OperatorEx1 { 
      public static void main(String args[]) { 
            int i=5; 
            i++;             // i=i+1과 같은 의미이다. ++i; 로 바꿔 써도 결과는 같다. 
            System.out.println(i); 
            i=5;             //       결과를 비교하기 위해 i값을 다시 5로 설정. 
            ++i; 
            System.out.println(i); 
      } 

[실행결과]



i의 값을 증가시킨 후 출력하는데, 한번은 전위형(++i)을 사용했고, 또 한번은 후위형(i++)을 사용했다. 결과를 보면 두 번 모두 i의 초기값 5에서 1이 증가된 6이 출력됨을 알 수 있다. 
이 경우에는 어떤 수식에 포함된 것이 아니라 단독적으로 사용된 것이기 때문에, 증감연산자(++)를 피연산자의 오른쪽에 사용한 경우(i++)와 왼쪽에 사용한 경우(++i)의 차이가 전혀 없다. 

[참고] 증감연산자를 피연산자의 앞에 사용하는 것을 전위형(prefix)이라 하고, 피연산자 다음에 사용하는 것을 후위형(postfix)이라고 한다. 

그러나, 다른 수식에 포함되거나 함수의 매개변수로 쓰여진 경우, 즉 단독으로 사용되지 않은 경우 전위형과 후위형의 결과는 다르다. 

[예제3-2] OperatorEx2.java

class OperatorEx2 { 
      public static void main(String args[]) { 
            int i=5; 
            int j=0; 
            j = i++; 
            System.out.println("j=i++; 실행 후, i=" + i +", j="+ j); 

            i=5;       // 결과를 비교하기 위해, i와 j의 값을 다시 5와 0으로 변경 
            j=0; 
            j = ++i; 
            System.out.println("j=++i; 실행 후, i=" + i +", j="+ j); 
      } 

[실행결과]
j=i++; 실행 후, i=6, j=5 
j=++i; 실행 후, i=6, j=6 

i의 값은 어느 경우에서나 1이 증가되어 6이 되지만 j의 값은 전위형과 후위형의 결과가 다르다는 것을 알 수 있다. 
전위형은 변수(피연산자)의 값을 먼저 증가시킨 후에 변수가 참조되는데 반해, 후위형은 변수의 값이 먼저 참조된 후에 값이 증가된다. 

따라서, j=i++;(후위형)에서는 i값인 5가 참조되어 j에 5가 저장된 후에 i가 증가한다. 
j=++i;(전위형)에서는 i가 5에서 6으로 먼저 증가한 다음에 참조되어 6이 j에 저장된다. 

다음은 함수의 매개변수에 증감연산자가 사용된 예이다. 

[예제3-3] OperatorEx3.java

class OperatorEx3 { 
      public static void main(String args[]) { 
            int i=5, j=5; 
            System.out.println(i++);       
            System.out.println(++j); 
            System.out.println("i = " + i + ", j = " +j); 
      } 

[실행결과]


i = 6, j = 6 

i는 값이 증가되기 전에 참조되므로 println메서드에 i에 저장된 값 5를 넘겨주고 나서 i의 값이 증가하기 때문에 5가 출력되고, j의 경우 j에 저장된 값을 증가 시킨 후에 println메서드에 값을 넘겨주므로 6이 출력된다. 결과적으로는 i, j 모두 1씩 증가되어 6이 된다. 
감소연산자(--)는 피연산자의 값을 1 감소시킨다는 것을 제외하고는 증가연산자와 동일하다. 

[알아두면 좋아요] ++i 와 i= i+1의 비교
두 수식의 결과는 같지만, 실제로 연산이 수행되는 과정은 다르다. ++i가 i = i + 1보다 더 적은 명령만으로 작업을 수행하기 때문에 더 빠르다. 그리고, ++i를 사용하면, 수식을 보다 더 간략히 할 수 있다. 


위의 표에서는 i = i + 1과 ++i를 컴파일 했을 때 생성되는 클래스 파일(*.class)의 바이트코드 명령어를 비교한 것이다.

i = i + 1은 5개의 명령으로 이루어져 있지만, ++i는 단 2개의 명령으로 이루어져 있다. 
같은 결과를 얻지만, i = i + 1에 비해 ++i가 훨씬 적은 명령만으로 수행된다는 것을 알 수 있다. 그리고 덧셈연산자(+)는 필요에 따라 피연산자를 형변환하지만 증감연산자는 형변환 없이 피연산자의 값을 변경한다. 


2.2 부호 연산자 - +, -

부호연산자는 피연산자의 부호를 변경하는데 사용되며, boolean형과 char형을 제외한 나머지 기본형에 사용할 수 있다. 
부호연산자 '+'의 경우는 피연산자에 양수 1을 곱한 결과를, 그리고 '-'의 경우에는 피연산자에 음수 1을 곱한 결과를 얻는다. 

[예제3-4] OperatorEx4.java

class OperatorEx4 

      public static void main(String[] args) 
      { 
            int i = -10; 
            i = +i; 
            System.out.println(i); 
            i=-10; 
            i = -i; 
            System.out.println(i); 
      } 

[실행결과]
-10 
10 



2.3 비트전환 연산자 - ~

'~'는 정수형과 char형에만 사용될 수 있으며, 피연산자를 2진수로 표현했을 때, 0은 1로 1은 0으로 바꾼다. 그래서, 연산자 '~'에 의해 비트전환 되고 나면, 피연산자의 부호가 반대로 변경된다. 
[주의]byte, short, char형은 int형으로 변환된 후에 전환된다. 



[예제3-5] OperatorEx5.java

class OperatorEx5 

      public static void main(String[] args) 
      { 
            byte b = 10;                         
            System.out.println("b = " + b ); 
            System.out.println("~b = " + ~b); 
            System.out.println("~b+1 = " + (~b+1)); 
      } 

[실행결과]
b = 10 
~b = -11 
~b+1 = -10 

결과를 보면, 어떤 양의 정수에 대한 음의 정수를 얻으려면 어떻게 해야 하는 지를 알 수 있다. 양의 정수 b가 있을 때, b에 대한 음의 정수를 얻으려면, ~b + 1을 계산하면 된다. 이 사실을 통해서 -10을 2진수로 어떻게 표현할 수 있는지 알 수 있을 것이다. 

 

먼저 10을 2진수로 표현한 다음 0은 1로, 1은 0으로 바꾸고 그 결과에 1을 더한다. 그러면 -10의 2진 표현을 얻을 수 있다. 

[예제3-6] OperatorEx6.java

class OperatorEx6 

      public static void main(String[] args) 
      { 
            byte b = 10;             
//         byte result =~b; // '~'연산의 결과가 int이기 때문에 byte형 변수에 저장할 수 없다. 
            byte result =(byte)~b;       // 또는 int result = ~b;와 같이 해야 한다. 

            System.out.println("b = " + b ); 
            System.out.println("~b = " + result ); 
      } 

[실행결과]
b = 10 
~b = -11 

연산자'~'는 피연산자의 타입이 int형 보다 작으면, int형으로 변환한 다음 연산을 하기 때문에 위의 예제에서는 byte형 변수 b가 int형으로 변환된 다음에 연산이 수행되어 연산결과가 int형이 된다. 
그래서 연산자'~'의 연산결과를 저장하기 위해서는 int형 변수에 담거나, 캐스트 연산자를 사용해야한다. 



2.4 논리부정 연산자 - !

이 연산자는 boolean형에만 사용할 수 있으며, true는 false로 false는 true로 변경한다. 조건문과 반복문의 조건식에 사용되어 조건식을 보다 효율적으로 만들어 준다. 
연산자 '!'를 이용해서 한번 누르면 켜지고, 다시 한번 누르면 꺼지는 TV의 전원버튼과 같은 토글버튼(Toggle button)을 논리적으로 구현할 수 있다. 

[예제3-7] OperatorEx7.java

class OperatorEx7 { 
      public static void main(String[] args) { 
            boolean power = false; 
            System.out.println(power); 
            power = !power;             // power의 값이 false에서 true로 바뀐다. 
            System.out.println(power); 
            power = !power;             // power의 값이 true에서 false로 바뀐다. 
            System.out.println(power); 
      } 

[실행결과]
false 
true 
false 

출처 - http://cafe.naver.com/javachobostudy



'Development > JavaEssential' 카테고리의 다른 글

String과 StringBuffer의 성능에 대해서...  (0) 2012.05.02
조건문  (0) 2012.04.19
변수와 메서드  (0) 2012.04.18
클래스와 객체  (0) 2012.03.18
패키지(package)  (0) 2012.02.07
Posted by linuxism
,

 

일단 이렇게 코드를 만들었고, 이것을 javadoc.exe를 사용해 문서로 뽑아낸다. 그런데, 터미널 열어서 뽑아내기는 귀찮으니까 이클립스의 기능을 이용한다.

팝업메뉴의 내보내기(Export)를 하면,

Javadoc으로 내보내기를 선택해주면,

Javadoc command 항목이라던지 나머진 방치. 내보내기 마법사를 시작할 때 부터 프로젝트를 선택하고 시작해서 프로젝트가 선택되어있으니 이것도 냅두고.

출력할 내용 선택. 떠먹여주는데 그냥 얌전히 받아먹자.

이건 뭔가 세부 설정을 더 한다는 것 같은데, 다른 건 모르겠고 JDK1.6으로 개발하면서 JRE도 그거니까 JRE source compatibility만 1.6으로 수정해주는 정도로 끝내자. 차분히 Finish 누지르기.

자, 결과를 보자.

꽝. 이건 꽝이다. 한글이 깨진다. 한글 깨진다고 영어로 문서를 만들 수야 없는 노릇. 후... 한숨 한 번 내쉬어주고, 검색부터 시작해보자.검색어는 가볍게 [이클립스 javadoc 한글] 정도면 나와준다.

VM options

-locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8

야~ 나 참 친절하다. 무슨 일이 일어나는지 알아보기 좋으라고 캡쳐까지 하는데 복사해서 붙여넣기 좋으라고 텍스트로 써준다.

검색 결과 이렇게 하면 된다고 한다. 믿어보자.

뭔가 에러메시지가 쏟아진다. 대체 왜!!! 생각해도 답이 안나온다. 음... 혹시?!

휴... 인코딩 설정을 바꿔두는 걸 잊었다. 깨끗이 새로 시작한다고 기존 프로젝트를 날리고 새로 시작했는데 설정을 바꾸질 않은 것. 설정은 잘 챙기자. 이런 인코딩 같은 걸 안챙기면 바로 야근을 유발하는 맹독성 산업폐기물로 이어진다. 이런 삽질을 보며 위안을 얻는 당신! 그렇다면 인코딩은 닥치고 UTF-8이다. 그럼 다시 Javadoc으로 출력 시도.

한글 출력 잘된다.

처음 자바 배울 땐 Javadoc 만들어놓으면 좋다고 해서 몇 번 시도했었지만 번번이 무슨 설정 파일을 입력하라는데 그게 뭔지 몰라 좌절했었다. 세상 참 좋아졌구나. =_=)

저 rt.jar를 선택해주면 파라미터 등에서 java.lang.String으로 나오던 것이 String으로 나온다.

이렇게.

 

출처 - http://blog.lul.kr/5

'Development > Java' 카테고리의 다른 글

정보시스템 SW 개발보안(시큐어 코딩 secure coding) 가이드  (0) 2012.04.25
Dead code  (0) 2012.04.19
SHA1 해쉬 구하는 클래스  (0) 2012.04.12
SpringMVC에서 log4j 사용  (0) 2012.04.01
java - slf4j  (0) 2012.03.24
Posted by linuxism
,

/favicon.ico 에 대해

Web/Common 2012. 4. 19. 10:40


/favicon.ico HTTP/1.1" 404 에러 없애는 방법

apache 를 설치한뒤에 access.log 와 error.log 에 귀찮게도 자주 나오는 favicon.ico 에러를 안나오게 하는 방법에 대해 정리하겠습니다. 별로 안어려우니 따라해보시면 됩니다.


(1)  error.log 상에 favicon.ico 로그 안찍히게 하는 방법.

* error.log 에러로그

=> [Wed Aug 24 11:10:52 2011] [error] [client 10.225.23.118] File does not exist: /jboss/jboss-as-web-7.0.0.Final/standalone/deployments/test.war/favicon.ico


* 설정파일 : httpd.conf

* 설정방법은 아래와 같다. (error.log 아래에 붙이면 된다.)

Redirect 404 /favicon.ico

<Location /favicon.ico>

   ErrorDocument 404 "No favicon"

</Location>


(2) access.log 상에 favicon.ico 로그 안찍히게 하는 방법

* access.log 에러로그  => /favicon.ico HTTP/1.1" 404


* 설정파일 : httpd.conf

* 설정부분은 아래와 같으며, access.log 설정부분에 충돌안나게 변경하면 된다.

SetEnvIf Request_URI "favicon.ico" do_not_log

CustomLog logs/access.log common env=!do_not_log


간단한거니 불필요한 에러는 안나게 해버리세요.. 열공하세용.


출처 - http://kletgdgo.blog.me/90121425629


===================================================================================


favicon.ico 만들기

[출처] favicon.ico 만들기|작성자 엔젤반


웹 사이트 루트 디렉터리에 favicon.ico라는 이름의 아이콘 파일을 올려두면, 사용자가 즐겨찾기(Favorites)에 추가할 때 아이콘이 자동으로 그 사이트의 로고로 바뀌도록 할 수 있다.

 

다시 이야기하여 사용자가 어떤 페이지를 즐겨찾기에 추가하면 아이콘을 자동으로 다운로드하여 바꾸어 주는 기능이다.

 

웹 사이트의 루트 디렉터리에 favicon.ico라는 이름의 아이콘 파일을 올려두기만 하면 됨.

단, 이 기능은 Internet Explorer 5 이상에서 지원한다.

 

favicon.ico 파일을 직접 지정하기

개인 홈페이지처럼 루트 디렉터리에 직접 favicon.ico 파일을 올려두기 곤란하거나 다른 이름 또는 다른 위치의 아이콘 파일을 지정하고 싶다면 다음과 같이 할 수 있다.

<LINK REL="SHORTCUT ICON" href="/path/logo.ico">

위와 같은 형식으로 LINK element를 사용할 수 있으며, 웹 페이지 Header(<head>...</head>)에 가볍게 적어줄 수 있다.

<LINK REL="SHORTCUT ICON" href="./galaxy.ico">
<LINK REL="SHORTCUT ICON" href="http://www.i-biznet.com/favicon.ico">

아이콘 파일은 비트맵 이미지이면서 고유의 파일 포맷을 가지고 있다. 16x16, 32x32 픽셀 등으로 크기를 선택할 수 있으며, 256 색상 이상을 사용할 수 있지만, 16 색상만 사용하는 것이 기본이다. favicon.ico 파일은 가능한 16x16 픽셀, 16 색상의 아이콘 파일로 만드는 것이 좋다.

문제는 아이콘 파일을 직접 만드는 것인데, 아이콘 만들기 도구의 선택부터 생각만큼 쉽지 않다. Favicon.com에서는 Java로 구현한 아이콘 만들기 프로그램을 온라인에서 직접 실행할 수 있도록 하여 이러한 고민을 어느 정도 해결해주고 있다.

Favicon Icon Generator는 16x16 픽셀의 아이콘을 16 색상으로 제작할 수 있는 간단한 도구이다. 색상 선택, 칠하기/지우기, Zoom In/Out 등 꼭 필요한 기능 정도만 제공하고 있지만, 아이콘 파일을 만드는데 크게 부족함이 없다.


http://favicon.com/ 페이지에 들어가면 맨 윗줄에 Favicon Maker가 있다.

링크를 누르면

http://favigen.com/ 페이지로 이동하는데

이곳에서

1) Upload Source Image: 원본소스 이미지 파일을 올리고
2) Choose Favicon Size: 파비콘 사이즈를 선택하고
3) Create Favicon 버튼을 누르면 파비콘이 생성된다.
파일이 생성된 후에 Download your favicon 버튼을 누르면 파일을 다운받을 수 있다.
이것을 홈페이지 index.html이 있는 위치에 넣으면 된다.

출처 - http://banks.blog.me/10100479322, http://blog.naver.com/whitefre/140062563690



Posted by linuxism
,