INSTANCE 란?


①일반적으로 어떤 집합에 대해서, 그 집합의 개별적인 요소. 객체 지향 프로그래밍(OOP)에서, 어떤 등급에 속하는 각 객체를 인스턴스라고 한다. 예를 들면 ‘목록(list)’이라는 등급을 정의하고 그 다음에 ‘본인 목록(my list)’이라는 객체를 생성(기억 장치 할당)하면 그 등급의 인스턴스가 생성된다. 또한 변수가 포함되어 있는 어떤 논리식의 변수에 구체적인 값을 대입하여 식을 만들면 원래 식의 인스턴스가 만들어진다. 이런 의미에서 인스턴스를 실현치라고 한다. 
프로그램 작성 언어 에이다(Ada)에서 매개 변수를 사용해서 절차를 일반적으로 정의한 범용체(generic package)에 대해, 그것으로부터 도출한 구체적인 실체.


출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=69718936&qb=aW5zdGFuY2U=&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RU3RdU5Y7tosstowSPZsssssssC-287841&sid=UX3To3JvLCkAABa1kn8



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

instance란 자바뿐만 아니라... 객체지향형의 모든 툴에서 동일하지 않나요?
class로만 설명을 해보면...class는 단지 동작에 대한 서술만이 있을 뿐입니다. 실제 사용을 할 수가 없다는 거죠.실제 사용을 위해 인스턴스를 생성하는 겁니다.

즉, 클래스를 메모리에 로딩해서 사용가능하게 만든 상태라고 설명하면 될까요?

그러니깐... 클래스 자체는 기계의 도면일 뿐이고 이 도면을 갖고 실제 기계가 완성된 상태가 인스턴스라고 설명하면 되겠내요. ^^;

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

class는 단지 변수와(상태값) 변수(상태값)에 값을 넣기위한 동작에 대한 서술만이 있을 뿐입니다. 실제 사용을 위해 인스턴스를 생성하는 겁니다.

즉, 클래스( 기술해 놓은 구조) 를 메모리에 로딩해서 사용가능하게 만든 상태 따라서... 클래스를 사용하기 위해서는 반드시 생성하는 작업을 해야 합니다.
그리고 코드로 설명하면
Class c1 = new NewClass() ; ---> 이런코드가 있다면

c1은 instance variables 이 됩니다.
즉 인스턴스를 가리키고 있는 variable이 되는 거죠.

그리고 instance of a class 라는 거는 위에 설명되어있는 것처럼
클래스의 실체를 메모리에 생성한겁니다.

즉,

Class c1 = new NewClass() ; 
Class c2 = new NewClass() ; 
Class c3 = new NewClass() ; 
Class c4 = new NewClass() ; 
Class c5 = new NewClass() ; 

이렇게 다섯개의 instance variables 가 있다면
c1 ~ c5의 variable은 NewClass 라는 클래스의 instance가 되죠.
---> instance of a class



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

이해하기 쉽게 예를 들어보겠습니다.

 

클래스를 붕어빵을 만드는 기계라고 생각해보세요.

인스턴스는 붕어빵 기계로 만든 "붕어빵"입니다.

 

클래스가 개념적인 형태라면 인스턴스는 실체입니다.

 

예) SampleClass sc = new SampleClass();

 

위에서 SampleClass 는 클래스이고, sc는 인스턴스이고 여기서는 new는 클래스에서

인스턴스를 만드는 생성자 함수입니다.


먼저, 클래스에 대한 이해를 하기전에 왜 클래스가 필요한지 생각해보아야 합니다.

앞서 우리는 왜 변수를 선언하고 사용하는지에 대해서 이해를 했습니다.

변수의 형이라는것은

 - 변수가 사용하는 메모리의 크기

 - 변수가 가질 수 있는 정보

 - 변수를 어떻게 조작하는가?

에 대한 정보가 포함된 정보입니다. 따라서 새로운 형을 만든다는 것은 프로그래머가 디자인하는 시스템에 맞는 최적의 형을 그 문제를 쉽게 해결할수 있는 변수를 만드는 것입니다.

 

1. 클래스란?

관련된 함수들과 연관된 변수들의 집합. (즉 여러 변수들과 함수들을 내가 필요한것만 골라서 뭉쳐놓은것! =묶는다=객체=캡슐화) 

  - 캡슐화라는건 프로그래머에게 상당한 이점을 준다. 객체안에 무엇있는지 어떻게 동작하는지 알필요가 없다. 우린 그냥 잘 사용한

    다. 예를 들어 커피자판기에 우린 돈만 넣고 버튼만 누르면 커피가 나온다! 자판기가 어떻게 동작하는지는 몰라도 커피를 뽑는데

    에는 전혀 지장이 없다!

 

그리고 클래스의 변수들은 멤버변수 또는 자료멤버라고 부르며

          클래스의 함수들은 멤버함수 또는 클래스의 메쏘드라 부른다.

 

 

예를들어 자판기 클래스의 멤버함수는 동전투입부(), 음료출력부() 라 할수가 있고, 변수로는 콜라버튼, 사이다버튼 이라 할수가 있다. ( 예시가 너무 조잡하네요 ^^;..)

 

1-1. 클래스의 선언

클래스를 선언하기 위해서는 class라는 예약어를 사용해야 합니다.

 

class Who

{

int itsAge;

int itsSex;

Talk();

};

 

Who라는 클래스를 선언하였으며  중괄호안에 자료멤버(멤버변수)를 썼습니다. 그리고 메쏘드로는 Talk()를 선언하였습니다.

이 클래스를 선언하였다고 Who 클래스에게 메모리를 할당하지는 않습니다. 단지 클래스의 정보만을 컴파일러에게 알려줍니다.

(그리고 보통 프로그래머들은 멤버변수의 앞에 its를 붙여서 멤버변수임을 구별합니다)

 

이제 클래스를 선언하였다면 객체를 정의해보겠습니다.

 

Who ChulSu;  //Who 클래스명으로 객체 철수를 정의함. : 이것을 Who를 실체화하는것이라 생각하면 된다.

 

클래스 멤버에게 접근하는법은 아래와 같습니다.

ChulSu.itsAge = 18; //철수의 멤버변수에 18살을 대입.

ChulSu.Talk();        //함수를 쓰려면 이와같이 정의한 객체 철수를 통하여 사용.

 

1-2. 객체에 값을 할당

 

기존의 C나 C++에서 int = 1; 이라고 값을 대입하지 않았습니다.

클래스는 일종의 데이터 형이라고 생각해야 합니다.

따라서 Who = 1; 이라는것을 문법상 오류입니다.

 

int a;

a= 1; 과 같이 우리는 사용할 것입니다.

 

Who.Chulsu;

Chulsu.itsAge = 18;

 

과 같이 사용하여야 합니다.

 

2. private(전용) 와 public(범용) 의 이해

 

클래스를 선언할때 주로 같이 사용되는 예약어로 private 와 public이 있습니다.

기본적으로 클래스를 선언하게 되면 private속성으로 자동선언이 되어집니다.

 

private : 전용멤버(privat클래스의 변수)는 그 클래스 안의 해당 메쏘드(함수)에 의해서만 접근이 가능함 

public : 범용벰버(public클래스의 변수)는 다른 클래스의 객체에 의해서도 접근이 가능함

 

예제)

 

#include <iostream.h>

 

class Who

{

public :

      int itsAge;

   char itsSex;

};

 

int main()

{

Who.Chulsu;

Chulsu.itsAge = 18;

Chulse.itsSex =  m;

 

      cout<<"Chulsu Age =";

      cout<<Chul.itsAge;

return 0;

}

 

 

 

만약 예제에서  public : 을 주석 처리해버리거나 빼버리면??  -> 컴파일 오류가 난다.

이는 내가 만든 Who라는 클래스라도.. 그리고 Who의 객체인 Chulsu라 하더라도 public이 아닌 private로 선언된 클래스의 멤버들에 관해서는 접근이 되지 않는 것이다.   private 로 선언된 클래스내 멤버변수들은 클래스내의 함수들에 의한 내부적인 동작으로만 실행이되고 접근이 될뿐이다! 

 

그럼 public에서는 private로 접근할수 없는가?..아니다. 범용 접근자 메쏘드(함수)를 만들어서 클래스의 전용(private) 멤버 변수들을 읽고 쓸수가 있다! (이런 알고리즘은 전용성과 보안성이 생긴다)

 

(예시)

 

class Who

{

 

public :

  unsigned int GetAge();

  void SetAge(unsigned int Age);

  unsigned char GetSex();

  void SetSex(unsigned char Sex);

 

Talk();

private :

  unsigned int itsAge;

  unsigned char itsSex;

 

};

 

 

 

즉 위와 같이  전용변수로써 나이와 성별을 지정해놓으면 객체는 보호된다.

 

3. 클래스 메쏘드의 구현

 

멤버함수의 정의는 클래스의 이름으로 시작하여 두개의 콜론을 넣고 함수명을 쓰고 매개변수를 쓰면 된다.

 

(예시)

 

#include <iostream.h>

 

class Who

{

public :

  int GetAge();

  void SetAge(int age);

  void Talk();

private:

  int itsAge;

};

 

 

int Who::GetAge()   //클래스 메쏘드 함수

{

return itsAge;

}

void Who::SetAge(int age)

{

itsAge = age;

}

 

void Who::Talk()

{

cout<<"HAHAHa..\n";

}

 

int main()

{

Who.ChulSu;

ChulSu.setAge(18);

Chulsu.Talk();

cout<<"ChulSu Age is";

cout<<ChulSu.GetAge();

cout<<"\n";

ChulSu.Talk();

return 0;

}

 

위의 예시에서 중점적으로 봐야하는 부분은 int Who::GetAge()  void Who::SetAge(int age)의 구현부입니다.

접근자 메쏘드의 쓰임이 왜 이렇게 이루어졌는지 클래스선언부를 꼭 확인하시고 개념을 이해하도록 합니다.

 

4. 생성자와 소멸자

 

작성중..

 

 

* 자바는 C++을 기반이기 때문에 우선 C++에서의 함수에 대한 개념을 잡고 가겠습니다.

참고문헌 : teach yourself c++ (정보문화사)

 

1. 함수란 무엇인가?

 흔히 프로그래밍을 접해본 분이라시면 main() 이라는 함수는 알겁니다. c++에서 모든 프로그램은 꼭 하나의 함수를 갖는데 그 함수가  main()함수 입니다. 따라서 프로그램을 시작할때 항상  main()함수를 실행하며 이 main()함수는 다른 함수들을 호출할수도 있습니다.

 

main()

{

  a++;

  func1(); //func1을 호출 - 실행하며 func1을 모두 마친뒤엔 다시 main()문으로 돌아와 func1() 다음줄 부터 작업을 이어갑니다.

  b++;

  func2();

  c++;

  return 0;

}

 

위와 같이 함수는 분기와 반환을 기본으로 수행하는 프로그램의 흐름을 정의합니다.

 

 

1.2 함수의 선언

 

함수의 형태는 아래와 같이 정의됩니다.

 

         반환값형   함수명   ( 매개변수 )

   예시 :   int        Sum         (int a)

            {                           //중괄호로 묶여 있음

               수행 내용;

             } 

 

함수는 프로그램에서 어딘가에 분명 위치하게 되어있을 겁입니다. 하지만 프로그램은 전처리문을 제외하곤 main() 함수를 먼저 실행합니다. 프로그램은 분기,호출점을 만나지 않는 이상 위에서 아래로 순차 실행을 하기때문에 만약 main에서 사용할 함수의 정의가 main() 함수의 다음에 있다면 프로그램은 그 함수를 main()문이 끝나고 다음줄로 넘어갈때 까지 알지 못합니다. 따라서 함수 원형의 선언이 필요합니다.

함수원형이란 말그대로 어떠한 함수를 정의해놓았다면 (이때 정의란, 위와같이 중괄호로 내용까지 포함된 형태의 함수) 중괄호낸 제외한 함수이름만을 main()문 윗 부분 어딘가에 정의해놓은것입니다. 원래함수는 마칠때 ; '세미콜론'을 붙이지 않지만 함수원형정의는 함수가 어딘가에 있다고 알려주는 알림문이기때문에  함수원형 정의후 ; 세미콜론을 붙여줘야 합니다.

 

위의 예시로 다시 예를 들어 보겠습니다

#include <iostream.h>

 

int Sum(int a);

 

 int main()

{

int c=0;

c =Sum(2);

return 0;  //return은 예약어 입니다. 함수가 종료된후 처음 호출된 분기점으로 돌아가서 리턴값을 반환해주라는 명령입니다.

}

 

int Sum(int a)

{

  int b=0;

  b += a;

  return b;
}

 

위의 예시를 보시면 직관적으로 왜 Sum함수의 원형이 main문 위에 위치하는지 함수란 어떻게 동작하는지가 이해가 될거라 생각이 됩니다. ^^;

 

 

1.3 함수의 인자

 

-함수의 인자는 모두 같은 형 필요는 없습니다.

void Sum (int a, char b, float c)

 

-함수의 매개변수로 함수를 사용할수 있습니다.

void Sum ( flot ( int a, int b) )

 

-함수의 매개변수로 전달된 값은 그 함수 안에서만 살아있는 지역변수로 사용됩니다. 이것은 call by value 라는 의미로 알려져 있습니다.

 

-반환값

함수는 어떠한 결과값을 반환하기 위해서 예약어 return을 사용하며 그 뒤에 반환하고자 하는 값을 씁니다.

return 1;             //그냥 값1을 반환합니다.

return (x>2);      // x값에 따라서 참,거짓을 반환합니다.

return (Fun1()); // Fun1을 실행하여 나오는 반환값을 이것을 리턴하는 함수의 반환값으로 사용합니다.

 

 

 

2. 함수에서의 변수는?

 

지금 다룰것은 자료형을 의미하는 것이 아닙니다 ^^; 함수의 몸체안에 있는 변수인지 혹은 밖에 있는 변수인지에 따라서 지역변수, 전역변수로 나눠지는 형태를 설명하겠습니다.

 

지역변수는 말 그대로 어느 지역안에서만 사용할수 있고 남아있는 변수를 의미합니다. 그 지역은 함수의 중괄호를 의미하구요.

아래의 예를 보겠습니다.

 

 

#include <iostream.h>

 

void Test()

{

  a =2;

 cout<<a<<endl; 

}

 

 int main()

{

int a=1;

Test();

cout<<a<<endl; 

return 0; 

}

 

출력결과 : 2

               1

 

예상하시는 대로 a라는 변수는 서로 다른 지역에 존재하기때문에 영향을 미치지 못합니다. 지역변수란 바로 이런의미를 가집니다.

그럼 전역변수는 어떤 의미인가요? 아래의 예를 보겠습니다.

 

#include <iostream.h>

 

 int a=3;

 

void Test()

{

  a=2;

 cout<<a<<endl;

}

 

 int main()

{

Test();

cout<<a<<endl;

return 0; 

}

 

출력결과 :  2

                2

 

모두 예상하신 답과 일치하나요? 역시 전역변수는 전역으로 사용이 가능합니다. 하지만 프로그램의 어디서든 이 변수는 값을 변경할수있기때문에 되도록 사용하지 않는것이 좋습니다. 의도하든 의도하지않던 어쨌거나 프로그램 오류의 가능성이 높아질수가 있기 때문이죠. 만약 5000줄짜리 프로그램을 코딩한다고 할때 프로그램의 첫줄에 내가 자주사용하는 이름의 변수를 전역으로 선언하여 사용한다고 생각해보세요. 후에 4000줄까지 코딩을 내려오다가 동일한 변수명을 어느 함수에서 사용해서 값을 바꿔버렸습니다. 그렇다면 아래의 함수에서 전역변수의 값이 변경되어 분명 찾기힘든 오류가 생길것입니다..ㅠㅠ 그러므로 주의를 하시던지 사용을 줄이시던지 그건 앞으로의 습관이 중요할 것 같습니다.

 

그리고 동일한 예시를 아래와 같이 약간 변경해보겠습니다.

 

#include <iostream.h>

 

 int a=3;

 

void Test()

{

  int a=2;    // 동일한 변수명으로 a를 선언하였습니다.

 cout<<a<<endl;

}

 

 int main()

{

Test();

cout<<a<<endl;

return 0; 

}

 

출력결과 :  2

                3

 

이번에는 지역변수와 전역변수가 함께 나왔습니다. 물론 변수명은 동일하지만 이 둘은 엄연히 다른 변수입니다. 앞의 예시들을 다 이해하셨다면 어떠한 프로그램이 나와도 전역과 지역변수때문에 혼동되시는 일은 없으실거라 생각이 듭니다.

 

 

 

 

3.함수의 중첩 (다형성)

 

 

c++에서는 같은 이름을 가진 함수들을 중첩시켜 만들수 있습니다. 이는 매개변수의 갯수가 다르거나 그것들이 혼합된것을 각각 다른 함수로 보기 때문에 그렇게 봅니다. 즉, 동일한 함수명을 가지더라도 매개변수가 다르면 다른 함수로 각각 본다는 것입니다.

 

int Sum( int );

int Sum( int , int);

int Sum( char);

 

( 제가 개인적으로 Sum함수를 좋아하는건 아닙니다..-_-;;..)

위의 함수는 모두 다른 함수입니다.

 

 함수의 중첩은 함수의 다형성이라고도 불립니다. 이는 많은 형태의 함수라는 말이며 동일한 함수명이지만 인자나 매개변수, 매개변수갯수가 달라서 동일한 함수명을 가진 각기 조금씩 다른 기능을 가진 함수를 여러개 만들지만 필요한 알고리즘에 따라서 각각 호출할때 사용하시면 매우 훌륭한 프로그램이 될수가 있습니다. (뛰어난 가독성을 지니게 됩니다)

 

또다시 Sum으로...예를 들어보겠습니다...(썸....-_-..음..)

 

#include <iostream.h>

 

 

int Sum(int a)

{

 int a+=2;   

 return a;

}

 

int Sum(int a, int b)

{

 int a+=b;   

 return a;

}

 

 int main()

{

 int c=0;

 

 c= Sum(1);

 cout<<c<<endl;

 c = Sum(1,2);

 cout<<c<<endl;

 

 return 0;

}

 

출력결과 :  3

                3

 

위의 Sum()함수는 모두다 함수명은 갖지만 분명 다른 기능을 하는 함수들입니다. 서로 매개변수가 다르기 때문에 첫번째 Sum은 입력값에 +2를 하여 출력해주면 두번째 Sum()은 두개의 입력값을 더하여 출력해줍니다.

이와같이 함수명은 동일하지만 프로그래머의 의도에 따라서 다양하게 함수를 중첩하여 사용할수가 있습니다!

 

 

** 인라인 함수와 재귀함수는 다음에 다루도록 하겠습니다..ㅠㅠ**

 

 

4. 함수의 동작?..어떻게?

이 부분은 메모리에 대한 개념을 잡고 넘어가야 할 산입니다..^^;...아무래도 마이크로컨트롤러를 다뤄보신 분이라시면 이미 알고 계실지도 모르겠습니다. ㅎ

 

함수를 호출하면 호출한 함수로 분기되며, 처음 호출한 함수의 매개변수는 전달되며 함수의 내용이 실행됩니다.

또한 그 함수가 끝나면 그 함수가 선언된 형에 따라서 값을 리턴하며 다시 처음 함수를 분기한 부분으로 돌아가게 됩니다.

 

이런일은 어떻게 순차적으로 가능한걸까요? 그리고 어떻게 분기되는지, 각 변수들은 어느곳에 저장되는 알수있을까요?

 

4.1 RAM나누기

 

간단하게 우리 사용하는 프로그램의 램 공간을 몇가지로 나눠 생각해 볼수가 있습니다.

  - 전역공간

  - 자유 메모리

  - 레지스터

  - 코드영역

  - 스택 

 

 

 1) 전역공간은 : 말그대로 전역변수들이 저장되는 공간입니다.

 2) 레지스터 : CPU안에 존재하는 특별한 메모리 영역을 말합니다. MCU를 배우셨다면 ALU안에 어떠한 범용레지스터, 상태레지스

    터등이 존재한다는 것을 아실겁니다.  이 레지스터들은 여러 종류가 존재하며 우리가 사용하는 부분들은 다음 수행할 코드를 가리

    키는 레지스터입니다. 이들은 명령 포인터라고 호칭합니다.

 3) 코드영역 : 어떤 메모리 일부분에 프로그램에서 만든 명령들을 2진수의 컴퓨터 언어로 저장되는 공간입니다. 이들의 각 코드들은

     어떠한 명령어로 변환이 되는데 이 명령은 메모리의 특정주소에 존재하게 됩니다.

   

     2000  int a = 1;

     2001  int b = 2; 

      .....

     2010  return 0;

 

  3) 스택 : 스택은 프로그래머가 코딩한 프로그램에서 각 함수에 의해 필요한 데이터들을 보관하기 위해 할당된 특별한 메모리영역

               입니다. 스택이라고 명명한 이유는 그 뜻이 접시꾸러미와 동일하게 동작하기 때문입니다. Last-In-First-Out. 즉, 쉽게

              풀자면 어릴때 사용한 동전지갑을 떠올린다면 쉽습니다. 마지막에 넣은 동전이 제일먼저 나오는 구조를 의미합니다.

              즉, 극단적으로 표현하자면 함수의 중괄호가 동전지갑이며 그 안에 동전을 하나씩 넣는 것이 어떠한 명령이자 데이터입니

              다. 이것을 수행하고 마지막의 명령 혹은 데이터가 하나씩 종료가 되며 리턴되는데 이를 스택으로 생각하시면 됩니다..

              말이 참 어려워 졌는데..ㅠㅠ 아래에 예를 하나 들고서 5장을 마칩니다.

 

{  
  (1)번째 동전을 지갑에 넣어라;
    {    
      (2)번째 동전을 지갑에 넣어라;
      두번째동전을 빼라;   
    }
  첫번째동전을 빼라;  
 }

 

 

 

 

 

 

지금부터 다룰 부분은 C언어, C++언어와 중복된 부분이 많습니다.

중간중간 적절히 생략하겠습니다.

 

1.자바 프로그램 코드의 구조

자바프로그램 *.Java 는 반드시 1개 이상의 클래스를 가지고 있습니다. class

클래스를 작성할때는 아래의 순서에 맞게 선언합니다.

 

접근제어자, class키워드, 클래스명, { 클래스 내용 , }  순으로 선언합니다.

 

예시)  public class Test

         {

            내용

   }

 

public : 접근제어자, 클래스 선언 키워드.   - public 클래스는 파일명과 클래스명이 동일하다.

class

Test : 클래스명

 

 

이클립스에서는 설정을 변경하지 않으면 기본적으로 public 클래스로 작성되며 파일명도 클래스명과 동일하게 저장된다.

 

하나의 자바 파일은 여러개의 클래스를 가질수가 있다. public클래스는 한 파일에 하나만 올수가 있다. 일반적으로 여러개의 클래스가 자바파일에 포함된다면 보통 main() 메소드를 갖는 클래스를 public으로 지정한다.

 

클래스는 경우에 따라 클래스를 패키지(클래스의 집합체)에 참가시키거나, 다른 클래스를 inport 받을 수 있다.

클래스를 패키지에 참가시킬 때는 package문을 자바 파일의 가장 첫번째 줄에 기술해야 한다.

다른 클래스를 import 받을때는 import문을 사용해야 한다. - 패키지문 다음, 클래스 선언위에 기술해야함.

 

 

예시)

 

package dodo.test;    // dodo.test 라는 패키지 선언.  dodo\test  폴더안에 생성

 

import javax.swing.JPanel; 아래에 쓸 Tests 클래스에 필요한 JPanel 클래스를 import 함

 

public class Tests extends Jpanel   Tests 클래스영역이다. extends는 상속을 허용하는 키워드이다.

{

 

}

 

 

키워드는 C언어로 따지면 내장된 시스템명령어(예약어)이다. 예를 들면 printf는 변수이름으로 쓸수 없는것 처럼 말이다.

위의 import 개념과 extends 개념이 위의 빨갛게 써놓은 2줄의 의미이다. 잘알아놓자.

 

1.2 멤버필드와 메소드

 

클래스는 멤버필드와 메소드를 가지는데 이들은 전역변수이다. (반드시 쓸 필요는 없다. 필요에 따라서)

 

멤버필드 : 멤버변수, 인스턴스변수, 프로퍼티라고 불리며 전역변수이다.

메소드 :  프로그램의 실행코드를 기술하는 공간. 클래스가 어떤 처리를 하려면 메소드를 선언한 후에 메소드 내에 그 처리를 기술한다.  (메소드라는건 지역이라는 의미이다. C언어에서의 지역변수변수 중괄호안을 의미한다!) 

 

예시)

public class Tests  //클래스 영역

{

int a;   //멤버필드

 

public String process(String ID)  //메소드 영역, process라는 메소드를 선언.

{

return ID;

}

 

}

 

즉, 자바에서 쓰이는 변주중에서 클래스의 멤버로 사용하는 전역변수가 멤버필드이다.

또한 메소드 내에서 선언되어서 사용하는 변수가 지역변수 또는 자동변수라고 한다.

만일, 지역변수와 멤버필드의 변수명이 같을경우에는 해당지역내에서는 지역변수가 우선권을 가진다. (C언어와 동일)

 

** 주석을 다는 방법**

C언어와 동일하다.

한줄주석 : //

한줄이상 주석 : /* 해당내용 기술 */

 

 

2. 자바 식별자와 키워드

 

자바 식별자 : 클래스명, 메소드명(C언에선 지역함수명), 멤버필드명(전역변수명), 지역변수(=자동변수) 등을 말한다.

자바 식별자는 길이의 제한이 X, 첫글자는 영문자나  _ 밑줄또는 $ 로 시작해야한다. 꼭 C언의 이름을 짓는규칙과 비슷하다.

(대소문자가 구별이 되기때문에 주의하자)

 

※ 클래스명 작성 규칙

클래스명의 첫글자는 대문자로 작성하며 나머지는 소문자로 한다. 만약 단어가 구별이 되면 다음단어의 첫글자는 대문자로 한다.

예시) AppleKim, IphoneApp

 

※ 메소드명, 멤버필드명, 지역변수명 작성 규칙

클래스명과는 반대로 첫글자는 소문자로 작성하고, 다음 단어가 구별되면 첫글자는 대문자로 한다.

 

머..위와 같이 꼭 할필요는 없지만..세상은 보이지 않는 규칙이 지켜질 때 사회가 더 아름답지 않은가?..생각이 든다.ㅋㅋ

(참고로 자바는 유니코드로 이루어져 있기때문에 한글도 사용이 가능하지만..되도록 쓰지 않는 것을 추천한다.)

 

 

2.1 키워드 (예약어)

 

 자바또한 C언어처럼 프로그램에서 사용하는 예약어인 키워드가 존재한다. 따라서 이들은 자바 식별자의 이름으론 사용해선 안된다. 키워드의 예는 아래와 같다.

 

abstract, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, extends, final,finally

float, for, goto, if, implements, import, instanceof, int, interface, long native, new, package, private, protected, public, return

short, static, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while

 

 

 

3. 변수 및 자바의 데이터 타입

 

변수 파트는 C언어와 동일한 개념이라서 생략하고 다른개념들만 정리하겠다.

 

*이클립스에선 변수를 선언하고 사용하지 않으면 경고가 표시된다. (경고마크는 전등불에 느낌표가 있는 아이콘이다)

 

3.1 전역변수

 

"전역변수 = 멤버필드" 는 자동적으로 초기화되기때문에 사용전 초기값을 할당하지 않아도 에러가 생기지 않는다.

 

byte, short, int, long, double, char 타입은 = 0으로 초기화

boolean 타입 = false

String 타입 = null  로 초기화 된다.

 

그리고 전역변수는 접근제어자가 붙는다. 왜나하면 멤버필드는 다른 클래스에서 참조할수 있기 때문에 그 접근영역을 설정해야 한다. 자세한 내용은 후에..다시..

 

예시)

 

package test1;

 

public class Tests   //Tests 라는 클래스를 선언함

{

static boolean x;    //멤버필드로 불리언형의 x를 선언 (초기화 하지 않았지만 false로 초기화됨)

 

public static void main(String [] args) //main() 메소드 선언

{

boolean y = true;   //지역변수 y선언하고 초기화를 참으로

 

System.out.println("x = " + x);

System.out.println("x = " + y);

}

}

 

결과값은 x = false , y = true 로 나오게 된다.

 

이 예시를 통하여 멤버필드는 기본값이 자동 초기화 된다는것을 알수 있다.

도한 static main() 메소드에서 객체의 레퍼런스 없이 멤버 필드값에 접근하려면 해당 멤버가 static 변수이어야 한다는 사실도 알수있다. static 으로 선언된 메소드에서는 static으로 선언된 멤버필드나 메소드에만 접근 할수가 있다. - 후에 다시 설명.

 

 

3.2 기본 데이터 타입

 

1) 데이터의 타입은 기본데이터 타입과 레퍼런스 데이터 타입이 존재한다.

 

기본데이터 타입 : byte, short, int, long  - 정수타입

                         float, double             - 실수타입

                         char                        - 문자타입

                         boolean                   -  불  타입

 

* 캐스트 연산 (강제형변환) 은 C언어와 동일하다.   바꾸고자하는 변수앞에 (자료형) 을 붙이면 된다.

 예시 )    int value1 = 3;

             float value2 =  (float)value / 0.2;

 

만약 캐스트연산을 하지 않았을 경우에는 어떻게 되는가?

데이터 타입 큰쪽으로 자동 형 변환이 된다. 이를 = 프로모션(promotion)이라고 한다.

예를 들어 int타입 + float타입의 연산을 할 경우에는 float타입으로 통홥되어서 연산이 이루어진다.

 

문자 데이터타입 char은 16bit 유니코드로 표현이되며 C언어와는 다르게 문자 1개를 표현하기 위해서 2byte의 공간이 필요하다.

만약 문자 데이터 값에 직접 변수를 대입할때는 char value = 'A' 와 같이 작은따움표로 표현해야한다.

 

불리언 타입은 C언어와 동일하게 bit 타입으로써 1bit의 크기를 가진다.

 

 

2)레퍼런스 데이터 타입

 

객체가 있는 곳의 주소를 저장하는 데이터 타입이다. 이는  C언의 포인터와 동일한 개념이며, 자바에서는 포인터가 없기때문에 객체의 레퍼런스로 생성된 객체를 통해 접근하는 방법을 사용한다. 레퍼런스 타입은 객체타입이라고도 말한다. = 클래스타입

 

예시)

public class TestRef

{

int a= 10; // 기본타입의 변수 a를 선언후 초기화

Val aa; // Val 클래스 타입의 레퍼런스 변수 aa를 선언

 

aa = new Val(); // Val 클래스의 객체를 생성하여 객체의 주소를 aa 변수에 저장함.

}                          // 레퍼런스 타입의 변수는 new 키워드를 사용해서 객체를 생성하기 전까지는 메모리가 할당되지 않는다.

                          // 레퍼런스 변수의 기본값 = null

 

aa안의 값은 10이 아니라 ㅁ라는 객체가 저장된 장소의 메모리값이다.

 

1) String 클래스를 사용하여 문자열 변수 지정하기

 

문법 :  String 변수명; 으로 선언.


예시) int a = 10;

        String test1 = "TestT";

  String test2 = "TestT";


이때 TestT는 문자열은 문자열변수에 해당하는 만큼 2개가 생성되는것이 아니라 단 하나만 생성되며 동일한 주소의 문자열을

가리킨다. 이는 JVM내에 저장된다.


2) 연산자


C언어와 동일하므로 생소한 연산자만 정리하겠다. 


 -시프트 연산자

  <<왼쪽시프트 : 왼쪽으로 숫자를 이동한다. (곱하기2의 효과) 오른쪽의 빈곳은 0으로 채워진다.

  >>오른쪽시프트 : 오른쪽으로 숫자를 이동한다. (나누기2의 효과) 왼쪽의 빈곳은 0  (만약 부호가-이면 1로) 채워진다.

  >>> 오른쪽 시프트 : 위와 동일한 오른쪽 시프트연산자이나 빈곳은 무조건 0 으로 채워진다.


 -조건 연산자

 

 ? : 형태의 조건 연산자의 문법

   변수 = 조건식 ? 참일때값 : 거짓일때값

  

  s = (3 > 1) ? 5 : 6;   // 3이 1보다크면 참이면 5값이 변수a에 대입된다.



 -instanceof 연산자

 

  객체의 상속 관계 여부를 알아볼 때 사용하는 연산자이다. 상속 관계는 불리언 형태는 false(없다), true(있다) 값으로 리턴한다.




- '==' 연산자와 'equals()'  메소드의 비교

 

== 연산자는 두 변수의 값이 같은가를 비교함.

equals() 메소드는 두 객체의 내용이 같은가를 비교하마.








 





::: 자바 프로그램의 처리구조 :::

 

자바 프로그램은 설치된 컴퓨터의 OS (플랫폼)에 대해서 독립적이다.  - 바이트코드로 이루어져 있기 때문에.

이것은 컴퓨터상에서 직접 실행이 아닌 자바가상머신 (JVM)에 의해 실행되기 때문이다.

따라서 어느 OS (플랫폼)이든 자바 프로그램은 동일한 기반에서 똑같이 동작이 된다.

 

작성된 자바 소소코드는 (*.Java) 자바 컴파일러인 JAVAC 명령에 의해서 "바이트코드"로 이루어진 *.class 파일로 변환된다.

바이트코드는 JVM을 통해서 실행되며 자바 인터프리터인 JAVA명령어가 그 바이트 코드를 검사,판독한후에 JVM 자바가상머신에서

그 작업이 수행된다.

 

자바 가상머신(JVM)은 JIT(Just-In-Time) 컴파일러를 지원하기 때문에  C언어와 비교해도 손색이 없을 정도로 빨라졌다.

 

앞장에서 설명한 이클립스를 통해서 우리는 프로그램을 작성하기 때문에 위의 일련의 과정을 몰라도 되지만..그래도 일단은 알아두자. 요약하자면,

 

자바파일(*.Java)은 JAVAC 명령에의해 "바이트코드"(*.class)로 변환되고 JAVA명령에 의해 JVM에서 실행된다.

(이 두가지 명령 JAVA, JAVAC는 설치한 java폴더내의 jdk버전 폴더의 bin 폴더내에 존재한다.)

 

 

::: API Document의 사용 :::

 

자바는 라이브러리로 사용할수 있는 수많은 클래스를 가지고 있으며, 이들은 연관 클래스들을 그룹으로 묶어서 패키지 단위로 관리된다. 이런 그룹들을 모아서 자바 API로 제공한다. JAVA API = JAVA Application Programming Interface

 

 자바 API는 자바 프로그램의 모든 영역에 대해서 라이브러리 클래스를 제공하는데 예를 들면, 어떤 라이브러리는 프로그램의 작동에 필수요소이고 어떤것은 프로그램의 작성을 도와주는 등 이들의 내용과 스펙은 해당 라이브러리의 rt.jar 파일로 설명이 제공된다.

rt.jar 파일의 위치는 자바가 설치된 디렉토리의 \java\jdk1.7.0_04\jre\lib 폴더 내에 있다.

또한 Jar파일은 패쓰(환경변수)를 지정하지 않아도 JVM실행시 자동으로 불러와 진다.

 

자바에서 기본적으로 제공하는 패키지와 클래스, 인터페이스에 대한 내용과 설명은

                                                          C:\Program Files\Java\jdk1.7.0_04\docs\api\index.html 파일 열어서 참조하자.

(열어서 참조하게 되는 내용들은 어떤 메소드의 사용법을 알기 위해서 그 메소드가 가진 클래스를 참조해서 어떻게 사용해야 할지에 대한 설명들이다.)

 

* 자바 API에 있는 클래스 또는 인터페이스들은 우리가 작성하는 파일과는 다른폴더에 저장되어있다. 따라서 그것을 사용하기 위해서는 반드시 import문을 사용해야 한다

예시) import java.awt.*;  

        import javax.swing;  <--해당 패키지 모두나

        mport javax.swing.JOptionPane; <-- 해당 패키지의 특정 클래스명을 기술하면 된다.

        참고로 java.lang 패키지는 자동으로 import 되어진다.

 

패키지명은 패키지가 속해 있는 클래스들이 저장되어 있는 폴더구조와 동일하다. 참고하자.

 

* 패키지는 클래스들의 집합이라고 생각해도 무방하다.

 

 

 

 

 

 

1. JDK설치와 환경설정

2. 이클립스 설치

 

 

1.1 JDK란?

자바 언어를 개발한 "SUN Microsystem" 사는 자바 프로그램 개발을 위한 자발 개발환경인 JDK (Java Development Kit)를 무료료 제공한다. JDK는 1995년 최초로 공개한 시점에서 1.0버전이었으나 JDK1.2버전부터 SDK라고 불리우며 이는 JAVA 2 SDK라고 통상 J2SDK라고 지칭된다. 즉, JDK = SDK 이다.

 

그리고 자바 개발 환경은 사용자가 사용하려는 분야에 맞춰서 세가지 에디션중 하나를 선택하면 된다. 1)번글 참조.

세가지 에디션은 JAVA SE, EE, ME 이며 지금부터 다룰것은 데스크탑 PC에서 사용될 SE에디션을 사용할 것이다.

 

1.2-1 JDK 다운로드

http://www.oracle.com/technetwork/java/index.html

-해당 사이트로 들어가 "Java SE" 클릭 - Java SE 7u4 을 Download 클릭.

-Accept License Agreement    동의 후 - 해당 OS환경에 맞는 버전을 다운로드한다.

필자는 아직도 ㅜㅜ 윈도우XP를 쓰기때문에 "jdk-7u4-windows-i586"를 다운로드 하였다.

 

1.2-2 API Documnet 다운로드

http://www.oracle.com/technetwork/java/javase/downloads/index.html

-위의 JDK를 다운받고 아래의 주소로 다시 가서 "Additional Resources"의 Java SE 7 Documentation 를 Download 한다.

 

1.3 JDK 설치

익스플로러가 열려있다면 닫고  "jdk-7u4-windows-i586.exe" 를 실행한다. 이후에는 기다리고 NEXT-NEXT-NEXT-Finish..가 다다... -_-;..

 설치가 끝나면 아래와 같은창이 뜨고 

 

Close 를 누르면 익스플로러창이 하나 뜬다..머 해석해보면 계정을 만들어서 등록할래? 라고 묻는건데..그냥 닫기 누르면 JDK설치가 끝이난다 ^.^  (설치된 폴더는 디폴트에서 변경하지 않았다면 "C:\Program Files\Java"에 설치되었을것이다.)

 

그리고 이번에는 API Document를 설치하자.

먼저 다운받아놓은 "jdk-7u4-apidocs.zip" 파일의 압축을 풀자. 그럼 Docs 폴더만 하나 덩그러니 보인다.

그럼 이 폴더를 JDK가 설치된 폴더인 "C:\Program Files\Java\jdk1.7.0_04" 안에다 이동해 놓자.

 

C:\Program Files\Java 폴더 안에는

jdk1.7.0_04 폴더  <--여기에 Docs 폴더를 이동.

jre7 폴더

이렇게 구성될 것이다. 이것으로 설치가 모두 끝난다.

 

1.4 환경변수 설정

환경변수 설정은 컴퓨터가 자바 컴파일 명령인 Javac.exe 와 실행명령인 java.exe 를 항상 사용할수 있도록 인식시키는 것이다.

또한 자바 기반의 다른 프로그램들도 제대로 실행되기 위해서 이 과정이 꼭 필요하다.

 

환경변수명 

변수 값 

 PATH

;C:\Program Files\Java\jdk1.7.0_04\bin; 

 CLASSPATH

 .;C:\Program Files\Java\jdk1.7.0_04\lib\tools.jar

 JAVA_HOME

 C:\Program Files\Java\jdk1.7.0_04

 

이제 위의 변수값들을 제어판-시스템- 환경변수에 입력시켜보자.

 

[시작]-[제어판]-[시스템]클릭 - 시스템등록정보의 '고급'탭의 환경변수 클릭.

 

 

 

 

                              * 헛..배경화면에..아이유님이 짤려서 나오셨네요..ㅠㅠ  *

 

 

 

 

상위 메뉴에서 사용자변수(U)중 변수명이 PATH를 "편집"누르고 ;C:\Program Files\Java\jdk1.7.0_04\bin; 를 입력합니다. 세미콜론(;)은 이미 패쓰가 걸려있다면 앞에 넣어주고 마지막에도 넣어줍니다.

동일하게  "CLASSPATH" , "JAVA_HOME" 도 편집을 누르고 위의 표의 해당 변수값을 입력해줍니다.

만약  "CLASSPATH" , "JAVA_HOME" 이 목록에 없다면 "새로만들기"를 눌러서 추가해서 넣어주면 됩니다 ^^

 

그럼 이제 JDK가 올바르게 설치되었는지 확인해 보겠습니다.

[시작]-[실행]에 들어가셔서 "cmd"라고 입력하시고 엔터.

아래와 같이 c:\ 에서 javac 와 java 명령을 실행하시면 옵션에 대한 설명이 쭉~ 나와주면 정상적으로 환경변수 설정이 된것입니다.

 

 

 

 

2. 이클립스 설치

 

이제 프로그램을 코딩하기 위한 개발툴인 "이클립스"를 설치할 차례이다!  Eclipse는 범용 개발툴로 자바,JSP,안드로이드프로그래밍,C/C++,PHP등 프로그래밍 코드를 작성할수가 있다. 또한 무료이다 ^.^!!! 그러므로 한번 깔아보자!! 어짜피 무료니깐!

(하지만 돈을 지불해야하는 플러그인도 존재한다.)

현재 이클립스는 CPL (Common Public License)이라는 라이센스로 배포되고 있다. CPL은 아래와 같은 특징을 지닌다

 

[이클립스 플러그인을 만들거나, 어떤 소프트웨어를 개발하기 위해 이클립스를 사용한 개발자는 CPL에 따라 자신이 사용하거나 수정한 모든 이클립스 코드를 공개해야 한다. 그러나 자신이 직접 개발하여 추가한 부분에 대해서는 소스를 공개하지 않을 수도 있고 유료화 할 수도 있다. ]

 

2.1 이클립스 다운로드

 

먼저 이클립스를 다운받겠습니다. (아..갑자기오는 멘붕..존댓말과 반말을 섞어서 포스팅 중이었군요..ㅠㅠ;;..)

http://www.eclipse.org/downloads/

이클립스도 무엇을 개발하는가에 따라서 해당 항목이 나뉘어 지는데 우리는 JAVA SE를 통해서 PC환경에서 자바개발이기 때문에

Eclipse Classic항목을 클릭하여 "Eclipse downloads - mirror selection" 를 다운로드 합니다.

 

 

캡쳐 화면화질이 저질이군요..ㅠㅠ

암튼 이클립스 클래식을 클릭하여 본인의 OS에 맞는 제품을 다운 받으시면 되겠습니다.

 

 

 

 

2.2 이클립스 설치 및 실행하기

 

이클립스는 압축을 해제하는 것으로도 프로그램이 설치되는 구조이다. 따라서 여러개의 버전의 이클립스를 갖고있다면 서로 독립적으로 운영되는 구조이다. 필요하다면 여러개를 설치해서 사용해도 무방하다.

 

압축을 풀게되면 eclipse 폴더만 하나 보일텐데 해당 폴더를 원하는 디렉토리에 가져다 놓고 단축아이콘을 만들놓고 앞으로 쓰면 된다.

이클립스를 실행하면 아래와 같은 이쁜 보라돌이 창이 나타난다 ^^

 

 

 

잠시후 작업공간을 설정하라는 말이 나오는데 do not ask again은 체크하진 말자~ 다음에 작업공간을 바꿔야 할 날이 분명히 올것이기 때문이다~ 원하는 폴더명을 입력했다면 OK~! 실행이 완료 되면 아래의 창이 나타날것이다.

 

 

프로그램을 작성하려면 오른쪽 상단의 Workbench 를 클릭하면 된다.

나머지 메뉴들은 왼쪽부터 개요설명, 사용법, 샘플코드예제, 추가된 기능소개 등이 있는데.. 우린 바쁜 사람들이니 바로 "Workbench"를 클릭하자! ~~

 

 

이제 다음 순서는 뻔하다~ 프로그랭코딩을 해보신 분들이라면 자연스레 File로 손이 갈것이다. Java project 를 생성하자.

 

 

 

Project Name 을 입력하고  아래의 Layout창의 미리 선택된 설정은 

원본소스 파일인 *.Java 와 컴파일하면 생성되는 파일인 *.class파일을 따로 관리하겠다고 설정하는 것이다.

↓↓↓ NEXT 클릭 ↓↓↓

 

빨간색 사각형의 설명은 차례대로..

1  본 소스파일 *.Java 파일은 하위항목 [src]에서 관리함.

2  Allow output 머시기 설정체크 : 생성되는 모든 파일은 소스폴더안에 집어 넣어라.

3  컴파일후 생성되는 실행파일인 *.class파일은 [bin]항목에서 관리하겠다.  를 의미함.

Finish.

 

프로젝트가 생성되었다면 이번에는 만들어놓은 프로젝트 내에 자바 클래스를 생성해보자.

[src] 폴터를 선택한후 MRB 를 클릭.

(MRB는 마우스 우측 버튼 -_-;이라고 필자가 만든 말이다..;;)

 

 

클래스를 클릭하면 ↓ 아래의 창이 생성된다.

 

패키지 명을 입력하고, 클래스명을 입력하자.

주의할점은 클래스명은 반드시 첫글자를 "대문자"로 입력해야한다!

Which method stubs would you like to create? 항목에서는

첫번째 : main() method가 존재하는 클래스의 경우 반드시 이 항목을 체크해야한다.

세번째 : 상속관계가 있을 경우 사용된다.

항목을 선택하고 Finish를 누르자.

 

 그럼 이제 아래와 같은 작업환경창이 나타난다. 이제 우리는 tt1 이라는 생성된 패키지안에

public형 Testclass라는 클래스에 대해서 코딩할수 있게 되었다. 후에 저장할때 파일명은 클래스명과 동일하게 저장해야한다.

물론 이클립스가 알아서 해주겠지만 반드시 대소문자도 동일하게 파일명 = 클래스명 이라는것을 명심하자.

 

이로써 간단하게 프로젝트생성 까지 알아봤다 ^^

 

■ 자바의 특징은?

 

1.자바는 단순하다.

2.자바는 객체지향적이다.

  : 자바의 모든 프로그램의 요스들은 객체로 표현이 된다. 이는 캡슐화, 상속, 다형성의 특징을 가진다.

3.분산환경에 적합하다.

  : 인터넷 또는 네트워크를 통하여 효율적으로 수행되기에 적합하다. (RMI기능의 라이브러리 제공)

4. 인터프리터에 의해 실행된다.

  : 자바는 자바가상 기계에서 실행될수 있는 바이트코드로 번역되며 바이트코드 해석기가 있는 어떠한 컴퓨터에서든 실행이 가능.

    즉, 자바프로그램의 소스코드는 컴파일러를 통해서 "바이트코드"라 불리는 중간형태의 코드로 컴파일되며 이것은 자바런타임환

    경 이라 불리는 인터프리터를 통해서 실행됩니다.

  

  사용자가 작성한 자바 프로그램 -> 자바컴파일러 (자바 바이트코드로 변환) -> 자바 가상머신으로 실행 (기계코드로 불러들임)

 

[인터프리트 언어]

프로그램을 실행할때 한 줄씩 번역하면서 실행하는 언어를 의미합니다.

이 언어는 배우기가 쉽고 쓰기가 쉽다. 하지만 한줄씩 쓸때마다 번역하기때문에 수행시간이 많이 걸린다는 단점을 가진다.

인터프리트 언어의 반대언어는 컴파일 언어이다.

 

5. 자바는 높은 신뢰성을 가진다.

 : 포인터가 없다. 가비지 콜렉션수행. 사전 오류방지.

 

6. 구조 중립적, 높은 이식성

 : 자바 가상기계에서 실행되는 바이트코드를 사용함으로써 특정 컴퓨터에 종속되지 않는다.

   즉, 운영체제를 구분하지 않고 독립적인 플랫폼을 가진다.

 

7. 높은 성능 제공

 : 인터프리터에 의해 효율적으로 수행될 수 있도록 설계되었다.

  JIT (Just-in-Time)컴파일러를 통하여 기계어 코드로 변환하여 실행도 가능함.

  자바 바이트코드 생성시 레지스터할당과 최적화를 수행하기 때문에 효율적인 바이트코드를 생성한다.

 

8. 멀리스레드 지원

 : (스레드 : 독립적으로 수행될 수 있는 작은 프로그램 단위)

 

9. 동적인 수행이 가능

 : 라이브러리의 변화를 곧바로 적용할수 있다.

 

 

■ 자바 플랫폼의 구성요소

 

 *플랫폼 : 프로그램이 실행 될 수있는 환경을 말하며, 일반적인 의미에선 하드웨어와 하드웨어를 제어하는 운영체제를 말한다.

 

 <넓은 의미의 자바플랫폼의 구조>

 - 자바프로그램 

 - 자바 플랫폼(제공되는 소프웨어를 의미) : 자바 API + 자바 가상기계 (JVM)

 - 운영체제 (OS)

 - 하드웨어 플랫폼

 

이제 알아봐야되는 내용은 자바플랫폼 구조에서의 소프웨어적인 부분의 플랫폼 이다.

 

1)자바 가상기계

 

JVM은 물리적인 실제 기계 장치가 아니라 추상적인 장치로 가상의 기계처럼 구현된 소프웨어을 말한다.

(각종 자바 명령어와 레지스터 집합, 스택,힙,메소드 영역등으로 구성됩니다.)

이 JVM은 자바소스 컴파일 후에 생성되는 자바 바이트코드를 기계어로 사용하여 실행하는 역할을 한다.

 

2) 자바 API

 

자바 API는 자바 개발환경과 실행환경에서 거대한 클래스 라이브러리를 뜻함.

서로 관련된 기능을 클래스 단위로 묶어 놓고 유사한 성격을 가진 클래스들을 패키지 단위로 제공한다.

앞으로 패키지 단위로 표현을 하게 될것이고 J2SDK 8 버전의 경우 몇백여개가 된다.

주요 API 패키지를 소개하면 아래와 같다.

 

참조사이트 : http://docs.oracle.com/javase/6/docs/api/

 

java.applet : 애플릿 작성에 필요한 기능을 모아놓은 패키지. 웹브라우저에서 실햄함.

java.awt : GUI작성 관련 패키지. Swing패키지와 함께 자바 GUI애플리케이션 작성시 사용함. 버튼, 텍스트필드, 메뉴, 이벤트제공

java.io : 자바 입출력 기능 관련 패키지. 표준 입출력이나, 파일,버퍼의 입출력기능을 제공.

java.lang : 자바 언어의 기초적인 사항을 정의한 클래스 관련 패키지. 클래스,문자열,시스템관련 등 빈번히 사용하는 기능을 구현한

               클래스

java.net : 자바의 네트워크 관련 패키지. TCP, UDP 관련 소켓 네트워크를 제공.

javax.swing : Awt패키지와 더불어 자바 GUI 애플리케이션 기능을 구현한 패키지. awt보다 융통성있는 컴포넌트를 제공함.

java.util : 유틸리티성 패키지. 날짜표현이나 콜렉션 프레임워크등 여러 자료형을 하나로 취급하는 콜렉션 관련기능을 제공함.

 

자 그럼. 이러한 자바 플랫폼(소프트웨어적인부분)은 사용분야에 따라서 그 기능이 달라져야 한다. 그러면  JVM이나 API도 다를것이다. 아래의 3가지 영역은 알아 놓자.

 

▶JAVA SE

자바의 핵심적이며 표준이 되는 플랫폼.

적용분야 - 일반적인 데스크톱 컴퓨터.

 

▶JAVA ME

다양한 소형기기와 임베디드 기기에서 사용되는 플랫폼.

적용분야 - 핸드폰,PDA, 셋톱박스

 

▶JAVA EE

자바 서버측에서 사용되는 플랫폼.

적용분야 - 웹 서버상에서 실행되는 응용프로그램 구현 등 서버용 컴퓨터 구현에 적용됨

 

 

 

■ 자바의 이용분야와 프로그램

 

 

1.웹분야

 -애플릿(Applet) : 프로그램을 전송하여 접속한 사람의 컴퓨터에서 프로그램이 실행되도록 하는 기술.

  ex) 웹상에서 채팅이나 주식관련 프로그램

-서블릿(Servlet) : 웹 서버 환경에서 실행되는 기술로 서블릿과 JSP (페이지 아래 주석참고)

  ex) 웹상의 게시판이나 자료실, 쇼핑몰

 

2.모바일 분야

 -미들릿(Midlet) : 무선 환경하의 모바일 기기상에서 실행한 자바 프로그램

 

3.일반응용분야

 -자바 애플리케이션 : 자바로 구현한 독립적인 프로그램을 의미한다.

 

 

 

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓더 알아두기〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

 

JSP(Java Server Page) 란 무엇인가?

    자바를 서버환경에서 사용하는 스크립트 방식의 언어로 단일 스레드로 클라이언트의 요청에 서비스한다. 요청이 있을 때마다 프로세스를 생성하는 기존의 CGI와는 달리 하나의 메모리를 공유하면서 서비스되는 원리는 서버 측에 부하를 줄여주며, JSP 내부에는 보여주는 코드만 작성하고, 직접 작업하는 부분은 자바 빈으로 구성하여 분리 할 수 있다. 이것은 서로 영향을 주지 않고 수정할 수 있는 장점을 가지고 있으며, JAVA의 장점인 재사용성을 높일 수 있다.

 

JSP 동작 원리

*  URL

→ DNS서버

→ 웹 서버(JSP 페이지요청)

→ 웹 서버는 *.jsp 로 들어온 요청에 대해서 JSP 컨테이너로 전송

→ JSP 파일 파싱

→ 서블릿 생성

→ 생성된 서블릿 컴파일

→ 컴파일 된 클래스 파일을 메모리에 적재

→ HTML 형태인 응답을 사용자에게 전송

→사용자의 브라우저에서 HTML 실행

 

 

 

 

 

 

 

 

 

+ Recent posts