1. 클래스에서 어떤 것을 해야 하는지를 파악한다.

2. 인스턴스 변수와 메소드 목록을 작성

3. 메소드를 만들기위한 준비 코드를 작성

4. 메소드에 대한 테스트 코드 작성

5. 메소드를 테스트

6. 필요하면 디버그를 하거나 다시 구현

원시값을 비교할때 사용하는 연산자 '=='


하지만!!! String의 값을 비교할때 저 연산자 사용 불가?? ㅋ


왜??? String 은 객체이다.. 고로 '.equals()' 라는 메소드를 사용해야한다....


처음에 그냥 무심코 사용을 했는데;; 객체라는 사실을 잊고 있었다 ㅠㅠ

1. 인스턴스 변수는 클래스 내에서 선언된ㄷㅏ.(기본적으로 인스턴스변수는 기본값을 가지고 있다.)

(메소드 내에서 선언 X)

ex)

Class Horse{

private double height = 15.2;

private String bread;

-----

}


2. 지역변수(Local Variable)는 메소드내에서 선언

ex)

Class AddThing{

int a;

int b = 12;


public int add(){

int total = a + b

return total;

}

}


3. 지역변수는 사용전에 반드시 초기화를 해야한다.(안했을 경우 컴파일 과정 중 에러 발생!!!! -> 초기 값이 없기때문)



인스턴스???

객체(Object)를 부르는 다른 이름?? 
- 클래스의 인스턴스영역에서 선언되는 변수
- 클래스가 인스턴스 될때 메모리를 할당 받는다.
- 자동 초기화 된다.
- JVM 메모리 구조에서 Heap영역에서 생성된다.
- static영역에서 인스턴스변수를 사용하려면 반드시 객체화를 해서 사용한다.
- 사용 : 인스턴스명.변수명


° 클래스 != 객체



자바 : 인터프린터 언어.... 

돌아가는 순서 


소스 -> 컴파일러 -> 결과물 -> 가상머신 



자바 코드의 구조



소스파일

 클래스 각각 한 ㄱ쌔기을 정의 클래스는 보토ㅇ 프로그램으ㅣ 한 부분이라고 ㅎ라 수 있다.


클래스

 메소득ㅏ 한개 이상 들어가며, 클래스 안에서 선언되어야 한다.


메소드

 이ㄹ련의 선어ㄴ무ㄴ을 모아놓은 것... 일종의 함수나 프롯지어ㅘ 비슷한 것으로 봐도 무관



1. import java.lang.*;
    이 패키지를 따로 코딩하지 않아도 JVM은 import된것으로 인식

2. default 생성자
   클래스 내부에 아무런 생성자도 만들지 않으면 JVM은 자동적으로 default 생성자가 있다고 인식

3. this 예약어
   클래스의 멤버는 static을 제외하고 모두 this  객체를 통해 접근하지만 생략할 수 있으므로 일반적으로 사용하지 않아도 알아서 인식

4. 0번째 매개 변수
   서로 다른 객체를 구분하기 위해 0 번째 매개 변수인 [자기_클래스명 this]가 생략되어 있음을 인식

5. toString() 메소드
   모든 클래스의 객체는 그 이름을 출력에 사용하게 되면 자동적으로 위의 메소드를 사용한다.

6. Object 클래스의 상속
   상속관계가 적혀 있지 않은 자바의 ㅁ코든 클래스는 자동적으로 java.lang.Object 클래스가 상속되었다고 JVM에서 자동적으로 인식

7. super메소드
   상속 관계에서는 하위 클래스의 생성자는 첫 라인에 super 메소드나 this 메소드를 기재하지 않았을 때 자동적으로 super가 있다고 JVM이 인식 

'-컴퓨터 지식 창고- > JAVA' 카테고리의 다른 글

인스턴스??  (0) 2012.06.30
자바??  (0) 2012.06.30
자바 중첩 클래스  (0) 2012.02.25
keytool를 이용한 키 생성!!  (0) 2011.12.06
SSL 서버와 클라이언트 실행시 옵션 귀춘.... 해결 방법  (0) 2011.11.19
중첩 클래스

효율적인 관리를 위한 하나의 형식.  다른 클래스 내부에 정의 되는 클래스이다.

중첩클래스의 종류
   - static class : 독립적으로 오브젝트로 만들어질 수 있는 클래스
   - inner class : 자신이 정의된 클래스의 오브젝트 안에서만 만들어질 수 있는 클래스

inner class는 또 3가지로 구분
  1. member inner class : 맴버필드처럼 오브젝트 레벨에 정의되는 클래스
  2. local class : 메소드 레벨에서 로컬 변수를 선언하여 사용하듯 선언된 메소드 내에서만 사용하능한 클래스
  3. anonymous inner class : 이름을 갖지 않는 익명 내부 클래스 
 

출처 : http://kimddochi.tistory.com/70    김또치님의 블로그 
Java로 SSL 프로토콜을 위한 키를 생성하기 위해 keytool를 이용함. ㅋ

 여기서 Keytool 이란!!
#Keytool
키와 인증서를 관리하는 유틸로서, 개인키 공개키 및 자신이 권한을 부여한 인증서를 관리 할 수 있게 하며, 자료의 보장과 전자서명에 의한 인증을 관리할수 있게 한다. 여기서 생성된 키와 인증서는 keystore라는 곳에 저장을 하게 되며 파일로 구현이 되며, 비밀번호를 이용하여 키나 인증서를 보호한다. 
 
그럼 생성 방법은?? ㅋ

-개인키 생성
 
keytool -genkey -keyalg RSA -keystore private
 
 
 
위와 같은 화면이 나옵니다. ^^ 명령어에서-keyalg 는 RSA라는 알고리즘을 사용한다는 것!!

공개키 추출

keytool -export -file file -keystore privateServer

privateServer 라는 것에서 file 이라는 이름으로 추출한다는 의미 

privateServer(위에서 생성한 키)의 비밀번호를 입력을 하면 공개키가 추출이 된다. 이 키를 이용하면된다. ^

공개키를 publicServer라는 파일 에 저장

keytool -import -keystore publicServer -file key
 
이렇게 하면 keytool 를 이용하여 privatekey와 publickey 를 관리 할 수 있을 것이다! 
java -Djavax.net.ssl.trustStore=생성한 키 -Djavax.net.ssl.trustStorePassword=비밀번호 EchoCleint

이렇게 써야 실행을 할 것을!!!! 간단하게 하는 방법이 있다.!! ㅎ

서버와 클라이언트에 각각 메인 첫 부분에다가

System.setProperty("javax.net.ssl.trustStore", "키가 있는 경로");

System.setProperty("javax.net.ssl.trustStorePassword","생성한 키 비밀번호");

 
이런식으로 해주면 된다!! ㅎ 

서버도 마찬가지로 해주면 될듯싶다ㅏ..

이 코드가 생성자에서 먹힐 줄 알았는데 안 먹힌다..... -ㅁ- 

'-컴퓨터 지식 창고- > JAVA' 카테고리의 다른 글

자바에서 생략되어 있는 형태 - 출처 : 열혈강의 JAVA  (0) 2012.02.25
자바 중첩 클래스  (0) 2012.02.25
keytool를 이용한 키 생성!!  (0) 2011.12.06
Java + SSL 구현  (0) 2011.11.19
Token.....  (0) 2011.07.29
SSL를 자바로 구현한 소스!!!(서버와 클라이언트)

여기서 SSL이란??
SSL(Secure Socket Layer)은 넷스케이프사세ㅓ 전자상거래 등의 보안을 위해 개발... 이후 TLS(Transport Layer Security)라는 이름으로 표준화 되었다. SSL은 특히 네트워크 레이어의 암호화 방식이기때문에 HTTP뿐만 아니라 NNTP, FTP등에도 사용할 수 있는 장점이 있다. 기본적으로 Authentication, Encryption Integrity를  보장한다. 라고 위키 백과에서 말을 하고 있네요 ^^

SSL프로토콜의 일밙거인 규칙!!

1. SSL  통신은 항상 두 개의 컴퓨터 간에서만 이루어지며, 3개 혹은 그 이상의 통신은 있을 수 없다.... ㅋ

2. 한 쪽은 항상 서버 역할을 하며, 다른 한쪽은 항상 클라이언트 역할을 해야한다.

SSL 통신 순서

1. 클라이언트가 서버에 접속하면 ㅎ서버 인증서(서버의 공개키를 인증기관이 전자서명으로 인증한것)을 전송 받는다.

2. 클라이언트는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서 인지를 검토한, 서버의 공개키를 추출한다.

3., 세션키로 사용할 임의의 메시지를 서버의 공개키로 암호화하여 서버로 전송

4. 서버에서는 비밀키로 세션키를 복호화하여 그 키르 ㄹ사용하여 대칭키 암호방식으로 메시지를 암호화, 클라이언트와 통신하게 된다. 


구현 소스!!
일단 키 값을 생성을 하여야 한다,
생성한 키는 클라이언트와 서버에 둘다 있어야 한다!!! ㅠ
keytool -genkey -keystore mySrvKeystore -keyalg RSA
 

서버 소스

import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class EchoServer{
public static void main(String[] args){
try{
SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket = (SSLServerSocket)sslserversocketfactory.createServerSocket(443);
System.out.println("Wating Connection");
while(true){
SSLSocket socket = (SSLSocket)sslserversocket.accept();
ThreadServer thread = new ThreadServer(socket);
thread.start();
}
}catch(Exception ex){ System.out.println(ex);}
}
}

class ThreadServer extends Thread{
private SSLServerSocket sslsocket;
private SSLSocket socket;
private InputStream input;
private InputStreamReader reader;
private BufferedReader br;

public ThreadServer(SSLSocket socket){
this.socket = socket;
}

public void run(){
try{
String fromClient = null;
input = socket.getInputStream();
reader = new InputStreamReader(input);
br = new BufferedReader(reader);

while((fromClient = br.readLine())!=null){
System.out.println(fromClient);
System.out.flush();
}
}catch(Exception e){
}
}
}


이 서버 소스를 컴파일 한후 실행을 하여한다.
만약 그냥 실행을 했을 경우?? ㅎ

 
이렇게 나와서 실행이 안된다....

java -Djavax.net.ssl.keyStore=생성한 키 -Djavax.net.ssl.keyStorePassword=비밀번호 EchoServer
 
이렇게 해야 실행이 된다....


클라이언트
 
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

public
class EchoClient {
    public
            static
    void
            main(String[] arstring) {
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);

            InputStream inputstream = System.in;
            InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
            BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

            OutputStream outputstream = sslsocket.getOutputStream();
            OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
            BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

            String string = null;
            while ((string = bufferedreader.readLine()) != null) {
                bufferedwriter.write(string + '\n');
                bufferedwriter.flush();
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}
      

실행

서버와 마찬가지로 해줘야한다...

java -Djavax.net.ssl.trustStore=생성한 키 -Djavax.net.ssl.trustStorePassword=비밀번호 EchoCleint

c출처  : http://stilius.net/java/java_ssl.php

+ Recent posts