컬렉션 프레임워크란?

· 많은 자료들을 처리할 때 여러가지 문제가 생길 수 있으며 처리하기 어려울 수 있다.

그래서 자바에서는 다수의 데이터를 쉽고 효율적으로 처리하기 위해서 표준화된 방법을 제공하는 인터페이스나 클래스들을 java.util 패키지에 모아놓았으며 이것을 컬렉션 프레임워크라고 한다.

· Java API 문서에서는 컬렉션 프레임워크를 한마디로 '데이터 군을 다루고 표현하기 위한 단일화된 구조'라고 정의하고 있다.

 

 

컬렉션 프레임워크에서 가장 많이 쓰이는 것이 List, Set, Map이다. 위에 계층도를 보면 List와 Set은 Collection을 상속하고 있지만 Map은 Collection을 상속하고 있지 않다.

 

 

'프로그래밍 > Java' 카테고리의 다른 글

쓰레드(Thread) 2  (0) 2017.11.04
쓰레드(Thread) 1  (0) 2017.11.03
throw와 throws 비교  (0) 2017.08.28
에러(error)와 예외(exception)  (0) 2017.08.27
인터페이스(interface)란?  (0) 2017.08.25

WRITTEN BY
김치치즈스마일
세계정복!

,

throw

강제로 사용자가 예외를 발생시킬 때 사용.

try{
  Exception e = new Exception();
  throw e;
} catch (Exception e) {
  e.printStackTrace();
}

 

 

throws

호출하는 메서드에게 예외를 던질 때 사용. (호출하는 메서드에서 예외를 처리해주어야 함)

void method() throws Exception1, Exception2, Exception3 {
}

 


WRITTEN BY
김치치즈스마일
세계정복!

,

인터페이스란?

· 구현된 것은 아무 것도 없는 밑그림만 있는 기본 설계도.

· 일반 메서드 또는 멤버 변수를 가질 수 없고, 오직 추상 메서드상수만을 멤버로 가질 수 있다. → 추상 클래스보다 추상화가 더 높다.

· 인터페이스는 표준, 약속, 규칙 이다.

 

인터페이스 작성 방법

· class 대신 interface라는 키워드를 사용한다.

· class와 같이 접근 제어자로 public이나 default를 사용할 수 있다.

interface 인터페이스 이름 {
   public static final 타입 상수이름 = 값;
   public abstract 메서드이름(매개변수목록);
}

 

인터페이스 제약사항

· 모든 멤버 변수public static final 이어야 하며, 이를 생략 가능.

· 모든 메서드public abstract 이어야 하며, 이를 생략 가능.

 

인터페이스의 상속

· 인터페이스는 인터페이스로부터만 상속 받을 수 있다. (Object와 같은 최고 조상이 없다)

· 여러개의 인터페이스로부터 상속 가능. (다중 상속 가능)

interface Movable{
  void move(int x, int y);
}

interface Attackable {
  void attack(Unit u)l
}

interface Fightable extends Movable, Attackable {
}

 

인터페이스의 구현

· 그 자체로는 인스턴스를 생성할 수 없다.

· 구현한다는 의미의 implements를 사용해서 구현한다. (클래스는 확장한다는 의미에 extends를 사용)

· 만약 인터페이스의 메서드 중 일부만 구현한다면, 추상 클래스로 선언되어야 한다.

· 상속과 구현을 동시에 할 수 있다.

class 클래스이름 implements 인터페이스이름 {
  // 인터페이스에 정의된 추상 메서드를 구현
}

abstract class 클래스이름 implements 인터페이스이름 {
  // 인터페이스에 정의된 추상 메서드의 일부만 구현
}

class 클래스이름 extends 조상클래스이름 implements 인터페이스이름 {
}

 

 

인터페이스의 장점

· 개발 시간을 단축시킬 수 있음.

· 표준화가 가능.

· 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다. → 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다.

· 독립적인 프로그래밍이 가능.  → 클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않도록 독립적인 프로그래밍이 가능.

 

▶ 직접적인 관계의 두 클래스 (A-B)

class A {
  public void methodA(B b) {
    b.methodB();
  }
}
class B {
  public void methodB() {
    System.out,println("methodB()");
  }
}
class InterfaceTest {
  public static void main(String[] args) {
    A a = new A();
    a.methodA(new B());
  }
}

 

▶ 간접적인 관계의 두 클래스 (A-I-B)

class A {
  public void methodA(I i) {
    i.methodB();
  }
}
Interface I {
  void methodB();
}
class B implements I {
  public void methodB() {
    System.out.println("methodB()");
  }
}
class C implements I {
  public void methodB() {
    System.out.println("methodB() in C");
  }
}

 

 

추상 클래스와 인터페이스 비교

· 공통점

  - 스스로 객체를 생성할 수 없다.

  - 상속 관계에서만 존재한다. (구현을 목적으로 한다)

· 차이점

  - 다중 상속을 지원한다. (인터페이스)

  - 모든 자원이 미완성이다. (인터페이스)

 

 

 


WRITTEN BY
김치치즈스마일
세계정복!

,

추상이란?

여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용.

추상화와 구체화

· 추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업.

· 구체화 : 상속을 통해 클래스를 구현, 확장하는 작업.

추상 클래스란?

· 추상 메서드를 포함하고 있는 클래스.

· 클래스를 설계도에 비교하자면 추상 클래스는 미완성의 설계도라고 볼 수 있다.

· 미완성의 설계도로 제품을 만들 수 없듯이, 추상 클래스로 인스턴스를 생성할 수 없다. 오직 상속을 통해서 자손 클래스에 의해서만 구체화 된다.

 

추상 클래스 표현 방법

class 앞에 abstract라는 키워드를 붙이면 된다.

 

abstract class 클래스이름 {
}

 

참고

· 추상 클래스는 추상 메서드를 포함하고 있다는 것을 제외하고 일반 클래스와 다르지 않다.

· 추상 클래스에도 생성자가 있으며, 멤버 변수와 메서드도 가질 수 있다.

· 추상 메서드가 없더라도 일반 클래스에 abstract를 붙여서 추상 클래스로 만들 수 있는데, 이렇게 하면 추상 클래스로 지정되어 인스턴스를 생성할 수 없다.

 

 

추상 메서드

· 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것.

· 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만 작성하고 내용을 비워두는 것.

 

추상 메서드 표현 방법

선언부 맨 앞에 abstract라는 키워드를 붙이면 된다.

 

abstract 리턴타입 메서드이름();

 

 

'프로그래밍 > Java' 카테고리의 다른 글

에러(error)와 예외(exception)  (0) 2017.08.27
인터페이스(interface)란?  (0) 2017.08.25
다형성(polymorphsim)  (0) 2017.08.21
접근 제어자 (Access Modifier)  (0) 2017.08.19
오버로딩과 오버라이딩  (0) 2017.08.14

WRITTEN BY
김치치즈스마일
세계정복!

,

다형성이란?

다형성은 이름 그대로 여러가지 형태를 가질 수 있는 능력을 의미 한다.

자바에서는 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 한 것이다.

 

참조변수의 형변환

· 자손타입 → 조상타입 (Up-Castring) : 형변환 생략 가능

· 자손타입 ← 조상타입 (Down-Casting) : 형변환 생략 불가

· 형변환은 참조변수의 타입을 변환하는 것이지 인스턴스를 변환하는 것은 아니기 때문에 인스턴스에 아무런 영향을 미치지 않음.

단지, 참조변수의 형변환을 통해, 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 개수를 조절하는 것 뿐.

 


WRITTEN BY
김치치즈스마일
세계정복!

,

접근 제어자(Access Modifier)란?

제어자란 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여하는 것을 말한다.

그 중에서 접근 제어자는 멤버 또는 클래스에 사용되어, 해당 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할은 한다.

 

접근 제어자의 종류

· default - 같은 패키지 내에서만 접근이 가능. (실제로 default를 붙여서 사용하지는 않음)

· private - 같은 클래스 내에서만 접근이 가능. (객체 입장에서는 접근이 불가능)

· protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능. (상속 관계에서는 public, 객체 입장에서는 private)

· public - 접근 제한이 없음.

 

제어자 

같은 클래스 

같은 패키지 

자손 클래스 

전체 

public 

O

O

O

O

protected

O

O

O

 

default 

O

O

 

 

private 

O

 

 

 

 

접근 제어자를 사용하는 이유

· 외부로부터 데이터를 보호하기 위해서.

· 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서.

 

 

[참고] 자바의 정석


WRITTEN BY
김치치즈스마일
세계정복!

,

JVM은 용도에 따라 여러 영역으로 나누어 메모리를 관리한다.

과연 어떤식으로 관리하는지 알아보자.

 

 

메서드 영역 (Method Area = Class Area = Static Area)

· 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스 파일(*.class)을 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장함. 이 때, 그 클래스의 클래스 변수도 이 영역에 함께 저장.

 

호출 스택 (Call Stack 또는 Execution Stack)

· 메서드의 작업에 필요한 메모리 공간을 제공.

· 메서드가 호출되면, 메서드 수행에 필요한 메모리 공간을 할당, 메서드가 종료되면 사용하던 메모리를 반환하고 스택에서 제거.

· 메서드가 작업을 수행하는 동안 지역 변수(매개 변수 포함)들과 중간 결과 등을 저장함.

· 호출 스택 맨 위에 있는 메서드가 현재 실행 중인 메서드.

 

힙 (Heap)

· 인스턴스가 생성되는 공간.

· new 연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성.

 

 

[참고] 자바의 정석

 

 

 

'프로그래밍 > Java' 카테고리의 다른 글

접근 제어자 (Access Modifier)  (0) 2017.08.19
오버로딩과 오버라이딩  (0) 2017.08.14
선언 위치에 따른 변수의 종류  (0) 2017.08.12
클래스와 객체와 인스턴스  (0) 2017.08.11
변수 타입에 따른 기본값  (0) 2017.08.05

WRITTEN BY
김치치즈스마일
세계정복!

,

변수는 멤버 변수(클래스 변수, 인스턴스 변수), 지역 변수로 나뉜다.

이렇게 변수의 종류를 결정하는 중요한 요소는 변수의 선언된 위치이다.

변수의 선언된 위치에 따라 종류를 알아보자.

 

 

 

변수의 종류 

선언 위치 

생성 시기 

 클래스 변수

(class variable)

클래스 영역 

클래스가 메모리에 올라갈 때 

 인스턴스 변수

(instance variable)

 인스턴스가 생성되었을 때

 지역 변수

(local variable)

 클래스 영역 이외의 영역

(메서드, 생성자, 초기화 블럭 내부)

 변수 선언문이 수행되었을 때

 

인스턴스 변수

· 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어짐.

· 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음.

· 인스턴스마다 고유한 상태를 유지해야하는 경우 인스턴스 변수로 선언.

 

클래스 변수

· 선언 방법은 인스턴스 변수 앞에 static을 붙여주면 됨.

· 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있음.

  ex) 클래스이름.클래스변수

· 클래스가 로딩될 때 생서오디어 프로그램이 종료될 때까지 유지.

· 모든 인스턴스가 공통된 저장공간(변수)을 공유함. 그래서 공유 변수(Shared variable)라고도 함.

· 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야할 경우 클래스 변수로 선언해야 함. 

 

지역 변수

· 메서드 내에 선언되어 메서드 내에서만 사용가능.

· 메서드가 종료되면 소멸 됨.

· for문, while문의 블럭({ }) 내에 선언된 지역 변수는 블럭 내에서만 사용 가능하며, 블럭을 벗어나면 소멸됨.

· 반드시 초기화 하고 사용.

 

 

[참고] 자바의 정석

'프로그래밍 > Java' 카테고리의 다른 글

오버로딩과 오버라이딩  (0) 2017.08.14
JVM의 메모리 구조  (0) 2017.08.13
클래스와 객체와 인스턴스  (0) 2017.08.11
변수 타입에 따른 기본값  (0) 2017.08.05
객체 지향 프로그래밍이란?  (0) 2017.06.04

WRITTEN BY
김치치즈스마일
세계정복!

,

자바에서 변수를 선언할 경우 초기화를 해줘야 한다.

하지만 초기화를 하지 않더라도 변수의 타입별기본값이 있다.

과연 기본값은 어떤 것들이 있는지 알아보자.

 

자료형 

기본값 

boolean 

 false

 char

 '\u0000'

 byte

 0

 short

 0

 int

 0

 long

 0L

 float

 0.0f

 double

 0.0d or 0.0

 참조형 변수

 null

 

[참고] 자바의 정석

 

 

'프로그래밍 > Java' 카테고리의 다른 글

오버로딩과 오버라이딩  (0) 2017.08.14
JVM의 메모리 구조  (0) 2017.08.13
선언 위치에 따른 변수의 종류  (0) 2017.08.12
클래스와 객체와 인스턴스  (0) 2017.08.11
객체 지향 프로그래밍이란?  (0) 2017.06.04

WRITTEN BY
김치치즈스마일
세계정복!

,