일반 첫째날 - 자바의 특징과 DATA TYPE

황제낙엽 2003.04.14 11:36 조회 수 : 2458 추천:184

프롤로그 : 학원에서 자바강의를 듣고... SCJP를 공부하면서 정리해봄. 참고교재는 "(대림출판사) 클릭하세요! 자바2 JDK1.3증보판"


1. 자바프로그램 개발환경

1) J2SE : client side, (jvm), jdk설치, 문법+표준package

2) J2EE : server side, (jvm), jdk+확장패키지 설치, 표준package+화장package, (JDBC,SERVLET/JSP, JNDI, RMI, CORBA, EJB)

3) J2ME : mobile, (kvm), j2me+통신회사전용패키지 설치, (H.P-CLDC+MDlet, PDA-CDC, awt+applet,servlet/jsp+xml/wml)

4) 기타 : JMF(java media framework), JINI


2. 자바의 특징 :

1) PLATFORM에 독립성
2) 객체지향이다. (객체=속성+기능)
3) 멀티 THREAD를 지원한다.
4) 메모리 관리를 자동으로 한다. (VM이 garbage collection을 한다)
    - Garbage Collection에 대하여 : 특정 클래스 객체를 가리키는 어떠한 레퍼런스 변수도 없다면 그 클래스객체는 가비지컬렉팅 된다.
     그 외에 가비지컬렉팅은 사용자가 직접적(direct)으로 실행할수는 없고 system.gc();명령으로 시스템에 요구할 수는 있다.


3. 자바 시작

   ※ 시작하기에 앞서 클래스와 객체와의 관계 살펴보기 (Class, Object, Instance)
     => http://www.javanuri.net/lecture/jp01/index.html (출처 : 자바누리)
       필요한 부분 : "3장. Object이해하기"

1) 자바에서의 변수의 종류

  - 인스턴스변수(member or instance variable)는 생성된 객체내에서 각 메서드들이 공통으로 접근가능한 변수를 일컫는다.
  - 지역변수(local variable)는 메소드레벨에서 초기화되어 해당 메소드에서만 사용가능하다.
  - 클래스변수(global or static or class variable)는 클래스밖에서 또다른 static이라는 공간에 생성되는 변수이다.
  - 클래스내에 선언되는 모든 변수는 의미적으로 메소드블럭{}밖에서 선언되면 전역변수로,
  - 메소드블럭{}내에서 선언되면 지역변수로 구분한다. (밖에서 선언되면 맴버변수... 맴버변수는 클래스변수와 인스턴스변수 모두를 포함한다)
  - 클래스나 메소드 블럭{}안에서 선언된 변수(지역, 맴버)는 {}가 끝날때 자동으로 소멸되게 된다. (변수의 생성과 소멸은 블럭단위)

다음의 예제는 각 변수들을 선언하고 사용하는데 있어서의 특성과 주의사항에 대한 예제이다.

예제)
--------------------------------------------------------------------------------------------------------------------------------------------------------
class A
{
        //맴버(인스턴스)변수들
        int a= 10;          // 선언가능하다. (클래스 멤버필드 변수로 초기화 해도 그만 안해도 그만)
        int b;                // 시스템이 알아서 0으로 초기화 해준다
        string str;         // 시스템이 알아서 null로 초기화 해준다
        string str3="abc";        // 선언과 함께 대입가능 (초기화)
        
        //맴버static(클래스)변수
        static int c;       // static변수선언
        
        public void main()
        {
                //지역변수들               
                int d;        // 이 구문에서는 그냥 통과를 하지만 변수d를 사용하려는 구문에서 compile error
                                   (메소드안에서 선언한 변수는 반드시 초기화해서 사용해야한다)
                string str4; //반드시 초기화 되어야 한다.
                b=5;        // 사용불가능 (compile error)
                c=5;        // class레벨에서 정의된 static변수는 메소드레벨에서 instance생성없이 사용가능하다.
                                  만일 c가 static이 아니라면... compile error(변수를 위한 메모리 할당은 instance생성시 일어나기때문)
                                  또한 A.c=5;와도 같은 문법이다. static변수는 클래스명으로도 접근가능하다.
        }
}

멤버변수는 시스템이 알아서 초기화 해준다(숫자는 0으로 문자는 NULL로)
지역변수는 시스템이 알아서 초기화 해주지 않는다.
--------------------------------------------------------------------------------------------------------------------------------------------------------


4. DATA TYPE (언어의 기초)

1) 종류

  - 기본 DATA TYPE(INT, FLOAT기타등등)
        ex) int a=10;
  - REFERENCE형(CLASS,STRING,배열)
        ex) button b=new button();

2) 각 datatype의 SIZE (1byte=8bit, 2byte=16bit)
        
    Byte    : 1byte (부동소수점)
    Char    : 2byte (0∼216-1)
    Short  : 2byte (-215∼215-1)
    Int      : 4byte (-231∼231-1)
    Float   : 4byte (-231∼231-1)
    Long   : 8byte (-263∼263-1)
    Double : 8byte (-263∼263-1)

   변환크기에 따른 흐름
   byte < short < int < long < float < double
             char  <

3) 각 데이터타입의 default initialized값

    Boolean                    : false
    String과 Object          : null
    Char                         : 'u0000'
    Byte, Short, Int, Long : 0
    Float                         : 0.0f
    Double                      : 0.0

   ※ 기타 data type과 관련된 내용

   - " "은 값이 없음을 의미하고 Null은 Null이라는 값으로 존재함을 의미한다.
   - switch(i)에서 i에 올수있는 data type은 char형과 integer형과 byte형으로 그외에 integer보다 큰 범위의 데이터 타입은 불가하다.
·미리보기 | 소스복사·
  1. switch (int) {   
  2. default:   
  3.  ...   
  4.  break;   
  5. case 1:   
  6.  ...   
  7.  break;   
  8. case 2:   
  9.  ...   
  10.  break;   
  11. }  

   - 3.14는 float일까? double일까?
      소수점이 있는 숫자가 끝에 d나 f가 붙지 않는다면 기본적으로 부동소수계열의 default 데이터형인 double이 된다. 마찬가지로
      정수계열의 default 데이터형은 int이다.
   - String은 call by value로 값을 넘겨주고, StringBuffer는 call by reference로 값을 넘겨준다.
      따라서, String.replace() 와 같이 메서드를 통해서 수정한 return value는 원본이 아니다.
  


5. 배 열(ARRAY) (자바에서 배열의 사용은 C와 조금 다릅니다.)

1) 배열의 사용

  - 선  언) int a[];         //배열의 포인터값만을 생성한다

  - 생  성) a=new int[4];        //실제로 배열[4]를 메모리할당하여 a가 가리키게 된다

  - 초기화) a[0]=10; a[1]=7; a[2]=5; a[3]=13;  //이제 배열을 사용가능하다.

  - 객체배열) String[] member = new String[3];     // 1차원 문자열 배열

2) 위의 선언과 생성을 한문장으로도 가능하다. ex) int [] foo = new int [10];

3) 다음은 모두 같은 문장이다.
  
     int foo[][];
     int [][]foo;
     int []foo[];


  ※ 자바에서의 Key word(reserved word)
    
    implements, extend, default, case, return, import, package, super, this, abstract, final, native, instance of, boolean,
    void, int, null, true, false (대소문자를 확실히 구분할 것)



오늘의 예제 :: [1]"
번호 제목 글쓴이 날짜 조회 수
347 java.util.Optional 에서의 map() 함수의 이해 황제낙엽 2026.06.24 666
346 linux(ubuntu) 의 jdk 21 이 설정된 환경에서 jdk 17 로 다운그레이드 절차 황제낙엽 2025.09.22 1532
345 [ChatGPT] javax.* 패키지와 jakarta.* 패키지의 혼합 사용 방안 황제낙엽 2025.04.15 2459
344 [ChatGPT] *.servlet.http.HttpServlet 클래스를 사용할 수 있는 주요 WAS 목록 황제낙엽 2025.04.14 2038
343 [ChatGPT] JDBC API에서 java.sql과 javax.sql 패키지의 차이점 황제낙엽 2025.01.31 2218
342 jakarta.servlet 패키지를 이용한 File Upload 구현 (2024.03.03, Servlet 5.0) 황제낙엽 2025.01.02 2310
341 [ChatGPT] Java EE가 Jakarta EE로 전환 황제낙엽 2025.01.01 2525
340 [ChatGPT] File.delete() 함수로 파일 삭제가 되지 않는 경우 황제낙엽 2024.12.10 2809
339 [ChatGPT] <jsp:include>에서 flush="true"를 설정시의 몇 가지 문제점 과 대안 황제낙엽 2024.07.19 2493
338 [Copilot] JSP, Servlet, web.xml, mysql 한글 설정 황제낙엽 2024.07.12 2555
337 Base64 클래스의 encode, decode 에서 URL-safe 황제낙엽 2024.07.10 2624
336 [Copilot] JSP 에서 다른 페이지를 현재 페이지에 포함시키는 문법 (include) 황제낙엽 2024.06.26 2570
335 Exception 출력에 대한 고찰 황제낙엽 2024.06.10 2198
334 google-auth-library-oauth2-http 라이브러리 다운로드 황제낙엽 2023.11.19 4025
333 firebase-admin-java 라이브러리 다운로드 (firebase admin sdk library) 황제낙엽 2023.11.19 2805
332 Enum 활용 (개인블로그, Effective Java) file 황제낙엽 2023.11.02 2759
331 Enum 활용 (우아한기술블로그) file 황제낙엽 2023.11.02 2790
330 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 2508
329 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 3336
328 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 2935