자바 시스템을 제어하기 위해서 자바에서 제공하는 명렁어들을 의미한다(System.out.prinln()) Java SE(JDK)를 설치하면 제공된다. java.lang.*의 클래스들도 자바에서 제공하는 API 중의 하나이다.
자바 애플리케이션을 만든다는 것은 결과적으로 자바에서 제공하는 패키지들을 부품으로 조립해서 사용자 정의 로직을 만드는 과정이라고 할 수 있다.
CLASS PATH
자바를 실행할 때 클래스의 위치를 지정하는 역할을 한다. 클래스가 여러 경로에 분산될 경우 유용하게 사용할 수 있다. 실행할 때 마다 클래스 패스를 지정하는 것이 귀찮기 때문에 우리는 시스템의 환경변수로 지정하는 것이 일반적이다.
환경변수
운영체제에서 지정하는 변수로 JVM은 환경변수의 값을 참고해서 동작한다. 자바는 클래스 패스로 환경변수 CLASS PATH를 사용하는데, 이 값을 지정하면 실행할 때 마다 -classpath 옵션을 사용하지 않아도 된다.
abstract(추상 클래스)
실체 클래스의 공통적인 부분을 추출한 클래스, 실체성이 없고 구체적이지 않기 때문에 객체를 생성할 수 없고, 실체 클래스와 상속관계를 가진다.
abstract method와 일반 method, 멤버 필드, 생성자를 정의 할 수 있지만, 내용을 정의 할 수 없다.
abstract 클래스를 상속받은 클래스에서는 반드시 abstract method를 override 하여 정의해야 한다.
abstract class [클래스명] 으로 정의한다.
abstract 메소드는 [접근제한자] abstract [return 자료형] [메소드 이름] () 으로 정의한다.
extends 로 상속한다.
다중상속이 안된다.
Interface
극단적으로 동일한 목적 하에 동일한 기능을 수행하게끔 강제하고, 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 사용한다. JAVA8부터 디폴트메소드, 정적메소드가 추가되었다.(디폴트메소드, 정적메소드를 통해, 구현 강제성 안에 유연함이 조금 늘었다고 생각하자)
abstract 클래스 보다 훨씬 극단적이고 제한적인 성격을 가진다.
멤버필드와 추상메소드만 정의할 수 있다.
interface [이름] 으로 선언한다.
implements 로 상속한다.
Interface에선 4가지를 정의할 수 있다.
상수 : interface에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조할 것(절대적)
API
자바 시스템을 제어하기 위해서 자바에서 제공하는 명렁어들을 의미한다(System.out.prinln()) Java SE(JDK)를 설치하면 제공된다. java.lang.*의 클래스들도 자바에서 제공하는 API 중의 하나이다.
자바 애플리케이션을 만든다는 것은 결과적으로 자바에서 제공하는 패키지들을 부품으로 조립해서 사용자 정의 로직을 만드는 과정이라고 할 수 있다.
CLASS PATH
자바를 실행할 때 클래스의 위치를 지정하는 역할을 한다. 클래스가 여러 경로에 분산될 경우 유용하게 사용할 수 있다. 실행할 때 마다 클래스 패스를 지정하는 것이 귀찮기 때문에 우리는 시스템의 환경변수로 지정하는 것이 일반적이다.
환경변수
운영체제에서 지정하는 변수로 JVM은 환경변수의 값을 참고해서 동작한다. 자바는 클래스 패스로 환경변수 CLASS PATH를 사용하는데, 이 값을 지정하면 실행할 때 마다 -classpath 옵션을 사용하지 않아도 된다.
abstract(추상 클래스)
실체 클래스의 공통적인 부분을 추출한 클래스, 실체성이 없고 구체적이지 않기 때문에 객체를 생성할 수 없고, 실체 클래스와 상속관계를 가진다.
Interface
극단적으로 동일한 목적 하에 동일한 기능을 수행하게끔 강제하고, 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 사용한다. JAVA8부터 디폴트메소드, 정적메소드가 추가되었다.(디폴트메소드, 정적메소드를 통해, 구현 강제성 안에 유연함이 조금 늘었다고 생각하자)
Interface에선 4가지를 정의할 수 있다.
abstract vs interface
abstract 는 interface 보다 조금 더 class 의 성격을 가지고 있다.
abstract 클래스에 선언된 abstract 메소드만 오버라이딩하면 된다. 하지만 interface는 선언된 모든 메소드를 오버라이딩 해야한다.
interface 는 implements 를 통해 여러개의 interface를 하나의 클래스에서 상속하는 것이 가능하다. abstract 는 class 의 성격이 강하기 때문에 extends 로 상속하여 하나만 상속할 수 있다.