API 문서를 보다보면 다양한 용어들이 나온다. 그 중에서 Deep Copy와 Shallow Copy라는 용어가 나오는데 과연 그 둘은 어떤 의미로 쓰일까?

 

Shallow Copy

· 얕은 복사라는 의미인데 단순히 참조만 복사하는 것을 말한다.

· Shallow Copy를 할 경우, 원본이 변경되면 복사본도 같이 변경된다.

Deep Copy

· 깊은 복사라는 의미인데 단순히 참조만 복사하는 것이 아닌 원본과 같은 데이터를 저장하고 있는 새로운 객체나 배열을 생성하는 것을 말한다.

· Deep Copy의 경우, 원본이 변경되더라도 복사본은 완전히 독립적인 객체이므로 변경되지 않는다.

 

 


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

,

컬렉션 프레임워크란?

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

그래서 자바에서는 다수의 데이터를 쉽고 효율적으로 처리하기 위해서 표준화된 방법을 제공하는 인터페이스나 클래스들을 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
김치치즈스마일
세계정복!

,

에러(error)

프로그램 코드에 의해서 수습될 수 없는 심각한 오류.

 

예외(exception)

프로그램 코드에 의해서 수습될 수 있는 다수 미약한 오류. → 예외처리의 의해서 수습 가능.

 

예외처리(exception handling)

프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하여 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것.

 

예외처리 구문

· try - catch문을 사용.

· 하위 예외가 상위 예외보다 먼저 나와야한다.

try {
  // 예외가 발생할 가능성이 있는 문장을 넣음.
} catch (Exception1 e)
  // Exception이 발생했을 경우, 이를 처리하기 위한 문장을 넣음.
} catch (Exception2 e) {
  // Exception이 발생했을 경우, 이를 처리하기 위한 문장을 넣음.
}

 

finally 블럭

· try - catch문과 함께 사용되어, 예외의 발생여부에 상관없이 실행되어야 할 코드를 포함 시킬 목적으로 사용된다.

· try - catch -finally 순서로 사용하면 된다.

try {
  // 예외가 발생할 가능성이 있는 문장을 넣음.
} catch (Exception1 e)
  // Exception이 발생했을 경우, 이를 처리하기 위한 문장을 넣음.
} catch (Exception2 e) {
  // Exception이 발생했을 경우, 이를 처리하기 위한 문장을 넣음.
} finally {
  // 예외의 발생여부에 상관없이 항상 수행되어야 할 문장을 넣음.
}

 


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
김치치즈스마일
세계정복!

,

리스트란?

· 자료를 순서대로 저장하는 자료구조.

· 순서대로라는 의미는 차려대로 한 줄로 연결된 구조라는 의미. 즉, 선형 구조이다.

리스트의 종류

· 배열 리스트

· 연결 리스트

 

배열 리스트란?

· 배열을 사용해서 구현된 리스트.

· '물리적으로 연속해 있는' 배열을 사용하여 '논리적으로 연속해 있는' 리스트를 구현한 것.

 

 

 

 

배열 리스트의 장점

물리적 주소를 바로 계산할 수 있기 때문에 리스트의 특정 위치에 바로 접근할 수 있음.

 

배열 리스트의 단점

· 배열의 길이는 정해져 있음.

· 삽입이나 삭제 시 데이터의 이동 및 복사가 자주 일어나며 저장 범위를 넘어설 수 있음.

 

 

 

 

 

 

 

 

'프로그래밍 > 자료구조' 카테고리의 다른 글

자료구조(data structure)란?  (0) 2017.08.22

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

,

자료구조란?

컴퓨터에 자료를 효율적으로 저장하는 방식.

 

자료구조의 목적

· 프로그램에서 사용하는 메모리를 절약하기 위해서.

· 프로그램 실행 시간을 단축하기 위해서.

· 프로그램의 구현을 쉽게 하기 위해서.

 

자료구조의 분류

· 선형 구조 (linear data structure)

· 비선형 구조 (non-linear data structure)

· 단순 구조 (simple structure)

· 파일 구조 (file structure)

 

선형 구조란?

· 여러개의 자료를 한 줄로 순서대로 저장하는 구조.

· 자료들 사이의 앞뒤 관계가 일대일(1:1).

· 리스트(list), 스택(stack), 큐(queue)가 있다.

비선형 구조란?

· 각각의 자료들 사이의 앞뒤 관계가 일대일(1:1)이 아닐 수 있다.

· 트리(tree), 힙(heap), 그래프(graph)가 있다.

 

 

 

 

단순 구조란?

· 프로그램 언어에서 제공하는 기본적인 자료형(data type).

· 정수(int), 실수(double, float), 문자(char) 등이 있다.

 

파일 구조란?

· 보조기억 장치에 저장되는 파일의 자료 구조.

· 메모리에 한번에 올릴 수 없는 대용량을 다룸.

· 순차적 파일구조(sequential file structre), 색인 파일구조(indexed sequential file structure) 등이 있다.

 

 

 

 

'프로그래밍 > 자료구조' 카테고리의 다른 글

리스트(list)란?  (0) 2017.08.23

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
김치치즈스마일
세계정복!

,