언어/Java

    java [8] java.lang패키지와 유용한 클래스

    java [8] java.lang패키지와 유용한 클래스

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 java.lang java.lang패키지는 자바 프로그래밍에 기본이 되는 클래스들을 포함하고 있다. 따라서 따로 import하지 않아도 사용할 수 있게 되어 있다. Object 클래스 Object클래스는 모든 클래스의 최고 조상이다. 그렇기 때문에 이 클래스에 속한 멤버들은 모든 클래스에서 바로 사용가능하다. equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려 주는 역할을 한다. 이 메서드는 두 객체의 같고 다름을 참조변수의 값으로 판단한다. 따라서 서로 다른 두 객체를 비교하면 항상 false를 결과로 얻게 된다. 따라서, 만약 인스턴스가 가지고 있는 value값들을 비교하고 싶을..

    java [7] Collections-2

    java [7] Collections-2

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 Arrays Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. 배열의 복사 - copyOf(), copyOfRange() 배열 채우기 - fill(), setAll() 배열의 정렬과 탐색 - sort(), binarySearch() 배열의 비교와 출력 - equals(), toString() 배열을 List로 변환 - asList(Object... a) Comparator와 Comparable Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. 예를 들어, Arrays.sort()에서는 Character클래스의 Comparable의 구현에 의해 정렬된다. Comp..

    java [7] Collections-1

    java [7] Collections-1

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 Collections Framework 컬렉션 프레임워크는 데이터들을 저장하는 클래스들을 표준화한 설계를 뜻한다. 컬렉션 프레임워크는 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공하고 있다. JDK1.2 이전까지는 Vector, Hashtable, Properties와 같은 클래스들을 이용해 서로 다른 각자의 방식으로 처리해야 했으나 JDK1.2부터 컬레션 프레임워크가 등장하고 다양한 종류의 컬렉션 클래스가 추가되었고, 모든 클련 클래스를 표준화된 방식으로 다룰 수 있게 체계화되었다. 컬렉션 프레임워크의 핵심 인터페이스 컬렉션 프레임워크는 크게 3가지 타입이 존재한다고 인식하고 List, Set, Map 인터페이스들로 정의..

    java [6] 예외처리

    java [6] 예외처리

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 프로그램 오류 프로그램이 실행 중에 어떤 원인에 의해서 오작동 하거나 비정상적으로 종료되는 경우가 있다. 이것을 프로그램의 오류 또는 에러라고 하는데, 그것들의 종류에는 세 가지가 있다. 1. 컴파일 에러 : 컴파일 시에 발생하는 에러 2. 런타임 에러 : 실행 시에 발생하는 에러 3. 논리적 에러 : 실행은 하지만 의도와 다르게 동작하는 것 또 여기서, 자바에서 런타임 에러는 두 가지 종류가 있다. 에러 - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 - 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 에러가 발생하면 프로그램의 종료를 막을 수 없지만 예외가 발생하면 프로그래머가 적절한 코드를 작성해놓았다면 프로그램의 ..

    java [5] 객체지향 프로그래밍-3

    java [5] 객체지향 프로그래밍-3

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 추상 클래스 클래스가 설계도라면 추상 클래스는 미완성 설계도이다. 추상 클래스는 미완성 메서드를 포함하고 있다. 추상 클래스는 인스턴스를 생성하지 못하며, 상속을 통해 자손 클래스를 통해서만 완성될 수 있다. 추상클래스는 클래스 선언 앞에 abstract 키워드를 붙이면 된다. 참고로, 추상 메서드를 포함하고 있지 않은 클래스에도 abstract를 붙여 추상 클래스로 만들 수 있다. 추상 클래스로 지정되면 추상 메서드가 없어도 인스턴스 생성이 불가능해진다. 추상 메서드 설계만 해놓고 실제 수행될 내용을 작성하지 않은 것을 추상 메서드라고 한다. 메서드를 미완성으로 남겨 놓는 이유는, 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문..

    java [5] 객체지향 프로그래밍-2

    java [5] 객체지향 프로그래밍-2

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 상속 클래스는 다른 클래스를 상속 받을 수 있다. 이를 부모-자식 관계라고 표현하는데 자식 클래스는 부모 클래스의 멤버를 가진다. 주의해야할 것은 멤버만 상속받고, 생성자와 초기화 블럭은 상속되지 않는다는 것이다. class Parent { int age; } class Child extends Parent { void play() { System.out.println("놀자~"); } } Parent 클래스는 age 멤버를 가지고 있고 Child 클래스는 age 멤버와 play() 메서드를 갖게 된다. 또한, 클래스들은 오직 하나의 클래스만 상속받을 수 있으며 2개 이상의 클래스를 상속받을 수 없다. (단일상속) Object 클래스 Obje..

    java [5] 객체지향 프로그래밍-1

    java [5] 객체지향 프로그래밍-1

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 인스턴스 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며 그 과정에서 만들어진 객체를 인스턴스라고 한다. 인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수와 인스턴스의 타입은 일치해야 한다. Person p = new Person(); 객체 배열 많은 수의 객체를 다뤄야할 때, 객체 배열을 생성하여 편리하게 다룰 수 있다. Person[] pArr = new Person[3]; # 초기화 방법1 Person[] pArr = { new Person(), new Person(), new Person()}; # 초기화 방법2 Person[0] = new Person(); Person[1] = new Person(); Person..

    java [4] 배열

    java [4] 배열

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 배열의 길이 자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다. 또한 아래 코드처럼 길이가 0인 배열도 생성이 가능하다. int[] arr = new int[0]; int[] arr2 = {}; 배열의 출력 int[] arr = {100, 200, 300}; // [100, 200, 300] System.out.println(Arrays.toString(arr)); Arrays.toString()을 이용하면 주석처럼 출력할 수 있다. char[] arr = {'a', 'b', 'c'}; // abc System.out.println(arr); char 배열은 출..

    java [3] 조건문과 반복문

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 향상된 for문(enhanced for statement) JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 편리하게 할 수 있도록 새로운 문법이 추가되었다. for ( 타입 변수명 : 배열 또는 컬렉션 ) { // 반복할 문장 } 위와 같은 형태를 지닌다. int [] arr = { 10, 20, 30, 40, 50 }; for(int i=0; i < arr.length; i++) { System.out.println(arr[i]); } for (int tmp : arr) { System.out.println(tmp); } 향상된 for문은 매 반복마다 arr에서 하나씩 순서대로 읽어서 선언한 변수(tmp)에 저장한다. 기존 for문..

    java [2] 연산자

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 연산자의 우선순위와 결합규칙 1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다. 2. 단항(1) > 이항(2) >삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다. 3. 단항 연산자와 대입 연산자를 제외한 모든 연상의 진행방향은 왼쪽에서 오른쪽이다. 리터럴 계산 다음 코드는 컴파일해도 오류가 나지 않는다. char c2 = 'a' + 1; System.out.println(c2); 왜냐하면, 'a' + 1은 리터럴끼리의 연산이기 때문에 런타임에 값이 변하지 않는다. 그래서 컴파일러가 컴파일할 때 계산해서 그 결과로 c2를 대체한다. char c2 = 'b' System.out.println(c2); 따라서 두 코드..