목차

  1. 추상 클래스 (abstract class)
  2. 인터페이스 (interface)
  3. 추상클래스와 인터페이스의 비교

1. 추상 클래스(abstract class)

  • 클래스의 프레임만 구성
  • 하나 이상의 추상 메소드 포함
    (추상 메소드: 선언 부분만 있고 구현 부분이 없는 메소드)
  • 직접 객체 생성 불가능
  • 추상 클래스에서 정의된 추상적인 기능은 하위 클래스에서 상세 구현

 

추상 클래스 용도

1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적

2. 실체 클래스를 작성할 때 시간 절약

 

2. Interface

특징

  • 실제 구현된 것이 전혀 없는 기본 설계도.(알맹이 없는 껍데기) - 설계와 구현 분리 가능
  • 멤버는 추상메서드와 상수만을 가능 => public static final, public abstract 키워드 생략 가능
  • 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용됨.
  • 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용됨.
  • 인터페이스끼리는 다중 상속 가능

장점

  • 개발시간을 단축시킬 수 있다.
    - 일단 인터페이스가 작성되면, 이를 사용하여 프로그램을 작성하는 것이 가능. 
    - 인터페이스가 공통이므로 동시 개발 가능
  • 표준화가 가능하다.
    - 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 후 개발되도록 함. 일관되고 정형화된 프로그램 개발 가능.
  • 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
    - 하나의 인터페이스를 공통적으로 구현함으로써 관계 매핑

  • 독립적인 프로그래밍이 가능하다.
    - 클래스의 선언과 구현을 분리시킬 수 있음.
    - 클래스와 클래스 간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능

 

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

구분 추상 클래스 인터페이스
선언 abstract class 클래스명 {
    변수;
    메서드() {...}
    abstract 메서드();
}
interface 인터페이스명 {
     상수;       // public final static
     메서드(); // public abstract
}
상속 class Sub extends super {
   메서드 재정의 // overriding
}
class Sub implements Interface1, Interface2 {
    메서드 재정의 // overriding
}
장점 프레임 제공 프레임 제공, 다중 상속

 

 

목차

  1. 자바 특징
  2. JDK (Java Development Kit)
  3. JVM (Java Virtual Machine)
  4. 자바 프로그램 실행 단계
  5. 메모리 사용 영역

1. 자바 특징

1) 이식성이 높은 언어

2) 객체지향 언어

3) 함수적 스타일 코딩 지원

4) 메모리를 자동으로 관리 : 개발자가 직접 메모리에 접근할 수 없도록 설계. 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 Garbage collector를 실행시켜 자동적으로 사용하지 않는 객체를 제거

5) 멀티스레드를 쉽게 구현

6) 동적 로딩을 지원

 

 

2. JDK (Java Development Kit)

1) JDK 란?

- 자바 프로그램 개발 도구 
- 개발을 위한 클래스, 컴파일러, 실행 및 배포도구를 포함 등 개발을 위한 전반적인 환경 제공

 

2) 플랫폼

- 프로그래밍이나 컴퓨터 실행을 위한 기본적인 기능을 제공하는 것.
- Java의 JVM은 이런 다양한 플랫폼 위에서 동일한 Java 소스코드를 이용할 수 있는 환경 제공
- 플랫폼 종류: J2SE(Java 2 Standard Edition), J2EE(Java 2 Enterprise Edition), J2ME(Java 2 Micro Edition)

 

3) JDK 디렉터리 구조

JDK 디렉터리 구조

 

4) JVM, API, JRE, JDK 관계

- JDK(Java Development Kit) = JRE + 개발에 필요한 도구
- JRE(Java Runtime Environment) = JVM + 표준 클래스 라이브러리

JVM, API, JRE, JDK 관계

 

 

3. JVM (Java Virtual Machine)

자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제(JVM)가 필요

 

- 장점: Write once, run anywhere.

- 단점: 한번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행되기 때문에, C와 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느림.

 

 

 

4. Java 프로그램 실행 단계

javac Hello.java	// 1) 컴파일러(javac.exe)로 자바 소스 파일 컴파일, *.class 파일 생성
java Hello		// 2) JVM을 구동시키는 명령어(java.exe)

1) Java 소스 파일을 컴파일러로(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성됨. 
2) java.exe 명령어가 실행되면서 JVM은 바이트 코드 파일(Hello.class)을 메모리로 로드하고, 해당 운영체제에 맞게 기계어로 번역. 그리고 main() 메소드를 찾아 실행

 

main() method

- Program entry point (실행 진입점)
- java.exe로 JVM을 구동시키면 제일 먼저 main() 메소드를 찾아서 실행시킴.

 

자바 실행 단계
자바 실행 단계(자세히)

 

프로그램 동작 순서

 

5. 메모리 사용 영역

java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리영역(Runtime Data Area)을 다음과 같이 세부 영역으로 구분하여 사용

=> 메소드 영역, 힙 영역, JVM 스택 영역

 

메소드 영역

  • 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method) 데이터, 메소드 코드, 생성자(constant) 코드 등을 분류하여 저장.
  • JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역

 

힙 영역

  • 객체와 배열이 생성되는 영역
  • JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
  • 참조하는 변수나 field가 없으면 Garbage Collector를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거

 

JVM 스택 영역 (-> Frame -> 로컬 변수 스택)

  • 각 스레드마다 하나씩 존재. 스레드가 시작될 때 할당
  • 기본적으로 main thread가 존재(JVM 스택도 하나)
  • Frame: JVM stack의 element
    - method를 호출할 때 마다 Frame을 추가(push)하고 method 종료되면 해당 Frame 을 제거(pop)하는 동작 수행
    - 예외 발생시 printStackTrack() method
  • 로컬 변수 스택: Frame 내부에 존재
    - 기본 타입 변수와 참조 타입 변수가 추가(push)되거나 제거(pop)됨.
    - 변수가 이 영역에 생성되는 시점은 초기화될 때, 즉 최초로 변수에 값이 저장될 때.

메모리 사용 영역

 

Ref. 이것이 자바다 - 신용권의 Java 프로그래밍 정복

+ Recent posts