· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
이신/자바노트


1. 자바 프로그래밍 언어

1.1. Hello World

  • Hello.java
    public class Example {
      public static void main(String[] args) {
        System.out.println("Hello World!");
      }
    }
  • C++와 달리 클래스 정의 뒤에 세미콜론이 붙지 않는다.
  • main() 함수가 클래스 내부에 메쏘드로 들어가 있다.
  • 소스 파일 이름의 확장자는 .java 이다.
    command_prompt> javac Hello.java <Enter>
    
  • .java를 컴파일하면 .class 가 생성된다.
  • JVM(Java Virtual Machine)은 .class 를 읽어서 실행한다.
  • 실행할 .class 파일을 JVM에 넘겨줄 때에는 확장자를 생략한다.
    command_prompt> java Hello <Enter>
    

1.2. 주석(comment)

  • C++ 언어와 동일

1.3. 식별자(identifier)

1.4. 자료형

  • 기본형(primitive type)과 참조형(reference type)으로 구분한다.
    • 기본형은 정수형(byte, short, int, long), 실수형(float, double), 논리형(boolean), 문자형(char)으로 나뉘고, 참조형은 C 언어의 포인터에 해당한다.
    • 기본형이 아닌 모든 자료형은 참조형이다. 즉 클래스로 선언하는 모든 자료형은 참조형이다.
    • 참조형은 C 언어의 포인터나 C++ 언어의 reference 와 비슷한 개념을 갖고 있다.
    • 인자전달 방식에 있어 기본형은 call-by-value 방식을, 참조형은 call-by-reference 방식을 사용한다.
  • 플랫폼 사이의 호환성을 설계 기준으로 하는 특성 때문에 C 언어에 비해 자료형 사이의 변환을 엄격히 제한하고 있다.

1.4.1. byte

  • 8 bits
  • signed

1.4.2. short

  • 16 bits
  • signed

1.4.3. int

  • 32 bits
  • signed

1.4.4. long

  • 64 bits
  • signed

1.4.5. float

  • 32 bits

1.4.6. double

  • 64 bits

1.4.7. boolean

  • false 와 true 값을 갖는다.
  • 크기는?

1.4.8. char

  • 16 bits
  • unsigned

1.4.9. void

  • C 언어와 동일

1.4.10. 리터럴(lieral)

  • C 언어와 유사
  • long 형 - 숫자 뒤에 접미사로 L 또는 l 이 온다.
  • float 형 - 숫자 뒤에 접미사로 F 또는 f 가 온다.
  • double 형 - 숫자 뒤에 접미사로 D 또는 d 가 온다.
  • boolean 형 - false, true
  • reference 형 - null

1.4.11. 기본형에 연결된 포장 클래스(wrapper class)

  • Byte
  • Short
  • Integer
  • Long
  • Character
  • Float
  • Double
  • Boolean

1.4.12. 기타 수식 관련 클래스

  • Math
  • Random
    • import java.util.*
  • BigIngeger
    • 큰 수의 정수형
    • import java.math.*
  • BigDecimal
    • 큰 수의 실수형
    • import java.math.*

1.5. 연산자(operators)

  • C 언어와 유사
  • sizeof 연산자가 없다.

1.5.1. 쉬프트 연산자

1.5.1.1. <<
  • 왼쪽으로 쉬프트하면서 오른쪽 끝을 0 으로 채운다.
1.5.1.2. >>>
  • zero extension
  • 오른쪽으로 쉬프트하면서 왼쪽 끝을 0 으로 채운다.
1.5.1.3. >>
  • sign extension
  • 오른쪽으로 쉬프트하면서 왼쪽 끝을 부호에 따라 0 또는 1 로 채운다.

1.5.2. insanceof

  • 어떤 객체가 어떤 클래스의 인스턴스인가를 알아보는 연산자이다.
  • 연산자의 왼쪽에는 어떤 객체를 가리키는 참조형 변수가 오고, 오른쪽에는 클래스 이름이 온다.
  • 연산값은 true 또는 false 이다.
    if( obj instanceof AClass ) {
      doSomething();
    }

1.6. 제어문(control statements)

  • C 언어와 유사
    • if-else
    • switch-case-default
    • while
    • do-while
    • for
    • break, contiue, goto
    • return
  • if, while, do-while, for 문에서 사용하는 조건식에는 반드시 boolean 식이 나와야 한다.
  • break 와 continue 뒤에 이름표를 붙이면, 이름표가 명시한 곳으로 마치 C 언어의 goto 처럼 사용할 수 있다.
    Label_01:
      {
        initSomething();
        forint i = 0; i < 10; i++ ) {
          if( doSomething(i) == false ) {
            break Label_01;
          }
        }
      }
  • 이름표 달린 break 문은 goto 처럼 어디서나 사용 가능하지만, 이름표 달린 continue 문은 for, while, do-while 문에서만 사용가능하다.

1.7. 클래스

1.7.1. class

class SuperClass { }
  • 클래스 정의 방식은 C++ 언어와 비슷하다.
  • C++ 에서 클래스 정의는 일종의 사용자 자료형을 새로 만드는 정의문이기 때문에 클래스 정의 뒤에는 세미콜론이 반드시 와야 하지만, Java 언어에서 클래스 정의는 일종의 블럭 개념으로 클래스 정의 뒤에 세미콜론이 와서는 안 된다.
  • Objcet 클래스는 모든 클래스의 조상이며 어떤 클래스에도 속하지 않는다.

1.7.2. new

  • new 가 지정하는 클래스의 인스턴스를 만든다.
    AClass a = new AClass();
    MyClass aMyClass = new MyClass(10, 20, 30);

1.7.3. extends

  • 클래스를 정의할 때 상속 받을 클래스를 지정한다.
    class SuperClass { }
    class SubClass extends SuperClass { }
  • extends 에 의한 다중 상속은 지원하지 않는다.

1.7.4. 메쏘드의 오버로딩(overloading)과 오버라이딩(overiding)

  • C++ 언어와 유사
  • 오버로딩
    • 한 클래스 내에 같은 이름의 메쏘드를 여러 개 두는 것을 말한다.
    • 단 전달인자들의 자료형로 오버로딩한 메쏘드들을 모두 구별할 수 있어야 한다.
  • 오버라이딩
    • 수퍼-클래스에 있는 메쏘드와 이름과 전달인자들의 자료형이 같은 메쏘드를 서브-클래스에서 선언할 수 있도록 하는 것을 말한다.
    • 호출 우선순위는 서브-클래스의 인스턴스에서 선언한 메쏘드가 높다.

1.7.5. super

  • 서브-클래스에서 수퍼-클래스의 생성자를 호출한다.
    class SuperClass {
      protected int x, y;

      public SuperClass(int x, int y) {
        this.x = x;
        this.y = y;
      }

      public SubClass extends SuperClass {
        public SubClass(int x, int y) {
          super(x, y);
        }
      }
    }
  • 서브-클래스의 생성자에서 super 를 명시하지 않으면 자동으로 super() 를 호출한다.
  • this 와 마찬가지로 서브-클래스 생성자의 맨 앞에 와야 하므로, super 와 this 를 같이 사용할 수 없다.

1.7.6. final

  • C 언어의 const 와 비슷한 개념으로 final 로 지정한 변수의 값은 바꿀 수 없다.
  • final 로 지정한 참조형 변수가 다른 객체를 참조하도록 바꿀 수는 없지만 객체 자체는 바꾸는 것이 가능하다. 이것은 C 언어의 상수형 포인터와 비슷한 개념이다.
  • final 로 선언된 클래스는 상속이 안 된다.
  • final 메쏘드는 오버라이딩할 수 없다.

1.7.7. this

  • C++ 언어의 this 와 같은 개념이다.
  • 객체 자신을 return 문을 통해서 반환할 때 사용한다.
  • 객체 자신을 전달인자로 보낼 때 사용한다.
  • 지역 변수의 이름이 class 의 멤버와 같은 이름을 갖고 있을 때, 서로를 구별해주기 위해 사용한다.

1.7.8. 접근 제한

  • C++ 와 유사
  • public
  • private
  • protected

1.8. 추상 클래스와 인터페이스 클래스

1.8.1. abstract

  • 추상 클래스를 만들 때 사용한다.
    abstract class AbstractClass {
      public abstract setValue(int nValue);
    }
  • 추상 클래스는 완성되지 않은 클래스이기 때문에 추상 클래스로는 인스턴스를 만들 수 없다.
  • 추상 메쏘드가 한 개라도 있는 클래스는 반드시 추상 클래스가 되어야 한다.
  • 추상 메쏘드는 private, static, final, native, strictfp 가 올 수 없다.
  • 정적 메쏘드는 추상 클래스 내에 정의할 수 없다.
  • 추상 클래스로는 다중 상속을 할 수 없다.

1.8.2. interface

  • 다중 상속이 가능하다.
    interface A { }
    interface B { }
    class C implements A, B { }
  • interface 클래스의 필드는 public static final 이어야 한다.
  • interface 클래스의 메쏘드는 public abstract 이어야 한다.

1.8.3. implements

  • interface 로 정의한 클래스를 구현할 때 사용한다.
    interface A { }
    class B implements A { }

1.9. 중첩된 클래스

1.10. 패키지

  • 패키지는 자바 클래스를 배포할 때, 클래스 이름 경로를 제시하여, 타 클래스와의 이름 충돌을 피할 수 있도록 해 준다.

1.10.1. package

  • 하나의 자바 소스 파일에는 하나의 package 를 사용해야 한다.
  • package 이름은 보통 소문자로 쓴다.
  • package 이름은 계층 구조를 가질 수 있고, 이 계층 구조는 폴더의 구조와 같아야 한다.
  • public 클래스의 이름은 소스 파일 이름과 같아야 한다.
  • kr/pe/tactlee/Button.java
    package kr.pe.tactlee;

    public class Button {
    }
  • kr/pe/tactlee/special/Button.java
    package kr.pe.tactlee.special;

    public class Button {
    }
  • package 문이 없는 소스 파일에 선언된 클래스는 디폴트 패키지에 속한다.

1.10.2. import

  • 위의 Button.java를 다른 자바 소스 파일에서 사용하기 위해서는 import 를 사용한다.
    import kr.pe.tactlee.Button;
    또는
    import kr.pe.tactlee.*;
  • import 는 실제로 해당 클래스를 로딩하는 것이 아니라, 단지 클래스 이름 경로를 생략해 주는 역할을 한다. 따라서 클래스 이름 경로를 모두 사용한다면, import 없이도 클래스 사용은 가능하다.
    public class MyButton {
        kr.pe.tactlee.Button b = new kr.pe.tactlee.Button();
    }
  • import 문의 생략
    • java.lang 패키지의 클래스들은 import 문 없이도 사용이 가능하다.
    • 예를 들어 자주 사용하는 println() 이 속해 있는 System 클래스의 원래 이름은 java.lang.System 이다.

1.11. 배열

  • 기본형의 배열 객체 선언과 생성
    int[] intArray = new int[5];
  • 기본형의 배열 객체 선언과 초기화
    int[] intArray = { 10, 20, 30, 40, 50 };
  • 배열이 인덱싱은 C 언어와 동일
  • 다차원 배열의 선언과 생성
    int[][] intArray = new int[3][5];
  • 수퍼 클래스로 선언한 배열에 서브 클래스의 객체를 넣을 수 있다.
    class SuperClass { }
    class SubClassA extends SuperClass { }
    class SubClassB extends SuperClass { }
    SuperClass[] arraySuperClass = new SuperClass[3];
    arraySuperClass[0] = new SuperClass();
    arraySuperClass[1] = new SubClassA();
    arraySuperClass[2] = new SubClassB();
  • 클래스 배열 객체는 참조형 배열 객체로서 초기값은 null 이다.
  • interface 로 객체를 생성할 수는 없지만 배열을 만들 수는 있다. 이 배열에는 interface 를 구현한 클래스의 객체를 넣을 수 있다.
    interface SuperInterface { }
    class SubClassA implements SuperInterface { }
    class SubClassB implements SuperInterface { }
    SuperInterface[] arraySuperInterface = new SuperInterface[2];
    arraySuperInterface[1] = new SubClassA();
    arraySuperInterface[1] = new SubClassB();
  • 배열의 복제
    int[] intArray = { 1, 2, 3 };
    int[] intArrayClone = (int[])intArray.clone();
  • 배열과 관련된 클래스
    • System.array()
    • Arrays 클래스

1.12. 예외상황

1.12.1. try-catch

1.12.2. throw

1.12.3. throws

1.13. 리플렉션

1.14. 쓰레드

1.15. 스트림

1.16. 직렬화

1.16.1. synchronized

1.17. 메모리 관리

1.18. assert

1.19. 기타

1.19.1. static

1.19.2. strictfp

1.19.3. volatile


2. 자바 튜토리얼

5. Upload

File nameSizeDate
 .. 2018-02-19
attachment:%C0%CC%BD%C5/%C0%DA%B9%D9%B3%EB%C6%AE:BavaLang.zipBavaLang.zip593.09 KB2005-11-16
Total 1 files


Replace original file
Rename if it already exist


ID
Password
Join
You can do very well in speculation where land or anything to do with earth is concerned.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-06-10 09:20:59
Processing time 0.0175 sec