전체보기 73

[Java] 부모 클래스 생성자 호출(Inheriting Constructor)

부모 클래스 생성자의 호출 모든 클래스는 컨스트럭터를 통해서 인스턴스를 생성해야만 활용할 수 있습니다. 상속을 통해 자식 클래스에서 부모 클래스의 특성이나 기능을 사용할 수 있는 것은 자식 클래스의 인스턴스를 생성할 때 부모 클래스의 컨스트럭터도 같이 호출되기 때문입니다. 하지만 컨스트럭터 자동 생성 규칙에 맞지 않는다면 프로그래머가 직접 이를 설정해주어야 합니다. 이 때 super 예약어가 사용됩니다. super 예약어 super는 부모(상위) 클래스를 지칭하는 예약어로 this와 유사한 용도로 사용됩니다. super는 아래와 같이 두 가지 방법으로 활용할 수 있습니다. suepr: 자식 클래스에서 부모 클래스의 필드나 메서드를 지칭하고자 경우 원래 부모 클래스의 필드나 메서드는 모두 super.을 붙..

[Java] 외부 클래스(External Class)

외부 클래스 외부 클래스는 한 자바 파일 내에서 클래스의 외부에 정의한 또 다른 클래스를 뜻합니다. 하나의 자바 소스 파일에는 하나의 public 클래스만 선언될 수 있고, public 클래스는 소스 파일의 이름과 동일해야 합니다. 한 소스 파일 내에서 public으로 선언된 클래스 외에는 모두 외부 클래스입니다. 외부 클래스의 선언 package 클래스 전체 이름 // public class는 package에 선언된 클래스 이름과 동일해야 함 public class 클래스이름 { 클래스 내용 } // 외부 클래스 class 클래스이름 { 클래스 내용 } 외부 클래스의 활용 외부 클래스는 public 상태가 아니기 때문에 다른 패키지에서 import할 수 없습니다. 따라서 외부 클래스는 클래스 내에서만 ..

[Java] 접근자와 설정자(Getter & Setter)

접근자와 설정자(getter & setter) 생성된 인스턴스의 데이터(필드값)을 외부에서 자유롭게 읽고, 변경할 수 있다면, 데이터의 무결성이 깨질 수 있습니다. 클래스 외부에서도 값이 변경될 수 있다면 초기 설계 시 의도했던 데이터의 목적이나 범위를 벗어날 수 있기 때문입니다. (예를 들어 학생 객체의 성적은 음수가 입력될 수 없도록 설계했는데 이를 외부에서 음수로 수정할 수 있다면 무결성이 깨지게 됨) 이러한 문제점 때문에 객체지향 방식의 프로그램에서는 외부에서 인스턴스 필드를 private로 설정해 데이터에 대한 직접 접근을 막고 있습니다. 대신 클래스에서 필드 데이터에 접근하고 수정할 수 있는 메서드를 제공하여 이를 제어하는 방법을 활용하고 있습니다. (메서드에서는 변경되는 데이터의 범위나 조건..

[Java] 자바 수학 관련 클래스(Java Math Class)

자바 수학 관련 클래스(Math & Random Class) Math 클래스는 수학적인 계산을 위해 제공하는 자바의 기본 라이브러리입니다. Math 클래스가 제공하는 메서드는 모두 정적(static)으로 선언되었기 때문에 별도의 클래스 선언 없이 바로 사용 가능합니다. 또한 난수를 생성해주는 Random 클래스도 제공하고 있습니다. Random 클래스는 java.util.Random에 포함된 라이브러리로 별도로 improt를 해주어야 사용할 수 있습니다. Math 클래스 Math 클래스의 주요 필드 E: Math 클래스에 상수로 선언된 필드로 자연로그의 밑 값으로 쓰이는 오일러의 수를 뜻하며 약 2.178의 값을 갖습니다. PI: 원의 원주를 지름으로 나눈 비율(원주율)의 값으로 약 3.145를 의미합니..

[Java] 자바 기본 자료형 관련 클래스(Java Wrapper Class)

자바 기본 자료형 관련 클래스 자바의 라이브러리에서는 기본 타입(byte, char, short, int, long, float, double, boolean)에 해당하는 값을 갖는 '객체'를 생성하기 위해 클래스를 제공하고 있습니다. 기본 타입을 클래스로 감싼다고 하여 포장 클래스(Wrapper)라고 불립니다. 포장 클래스는 기본 라이브러리에 포함되며, 기본 타입과 같은 이름을 가지고 있습니다. (클래스 이름 코딩 컨벤션에 따라 앞글자를 대문자로 지정) byte -> Byte char -> Character short -> Short int -> Integer long -> Long float -> Float double -> Double boolean -> Boolean 포장 클래스는 포장하고 있는 ..

[Java] 자바 문자열 관련 클래스(Java String Related Classes)

자바 문자열 관련 클래스 자바에서 문자열을 표현하기 위해 기본 라이브러리에 String 클래스를 제공하고 있습니다. String 클래스는 문자열과 관련된 작업을 수행하기 위해 많은 메서드를 포함하고 있습니다. 또한 문자열을 분리하거나 생성된 문자열의 조정이 필요할 경우 사용하기 위해 StringBuilder 클래스와 StringBuffer 클래스, StringTokenizer 클래스 등을 별도로 제공하고 있습니다. 각 클래스의 역할은 아래와 같습니다. String: 문자열을 저장하고 조작하는데 사용됩니다. StringBuilder: 문자열이 추후에 변경이나 추가가 필요할 경우 사용됩니다. StringBuffer: 문자열 추후에 변경이나 추가가 필요할 경우 사용되며 멀티스레드 환경에 사용하기 위해 사용합니..

[Java] 자바 시스템 관련 클래스(Java System Class)

자바 시스템 관련 클래스 System 클래스는 자바 프로그램이 운영체제의 일부 기능을 이용할 수 있도록 만들어줍니다. (자바 프로그램은 자바 가상 머신(JVM) 위에서 실행되기 때문에, 직접 접근하기 어려움) System 클래스의 정적 필드와 정적 메서드를 이용하여 키보드 입력, 콘솔 출력, 프로그램 종료 시스템 속성 읽기 등의 기능을 사용할 수 있습니다. 시스템 클래스의 주요 필드와 메서드 정적 필드 out: 모니터(콘솔)에 출력할 문자를 담기 위한 필드로 PrintStream 타입으로 선언되어 있습니다. err: 모니터(콘솔)에 에러를 출력할 문자를 담기 위한 필드로 out과 마찬가지로 PrintStream 타입으로 선언되어 있습니다. in: 키보드에서 입력한 값을 담기 위한 필드로 InputStre..

[Java] 자바 오브젝트 클래스(Java Object Class)

자바 오브젝트 클래스 자바 오브젝트 클래스는 java.lang에 포함된 라이브러리입니다. 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 자동으로 Object 클래스를 상속하게 됩니다. 따라서 자바의 모든 클래스는 Object의 자식이나 자손 클래스입니다. 때문에 Object 클래스의 메서드는 모든 클래스에서 활용 가능합니다. 오브젝트 클래스의 주요 메서드 boolean equals(Object obj): 클래스 인스턴스의 주소를 비교하여 참, 거짓의 결과를 반환합니다. int hashCode(): 인스턴스의 해시코드를 반환합니다. String toString(): 인스턴스를 문자열 정보로 반환합니다. equals(Object obj) 메서드 equals() 메서드는 두 클래스 ..

[Java] 자바 표준 라이브러리(Java Standard Library)

자바 표준 라이브러리(Java Standard Library) 자바 프로그램에서는 기본적으로 제공해주는 라이브러리인 JDK(Java Development Kit)를 제공합니다. 표준 라이브러리는 자바9부터 모듈화가 되어 제공되고 있습니다. 제공되는 모듈은 아래 그림과 같습니다. java.base 모듈은 다른 모든 모듈이 의존하는 기본 모듈입니다. java.base 모듈에는 자바 프로그램 개발에 필요한 핵심 패키지가 포함되어 있으며, JDK를 이용하면 자유롭게 사용할 수 있습니다. (java.lang, java.util, java.io 등) java.se는 JDK가 제공하는 모든 모듈이 포함된 집합 모듈입니다. 표준 라이브러리의 모든 기능을 사용하고 싶을 때는 모듈 기술자에 java.se를 requires..

[Java] 자바 프로그램 모듈 관계 조정(Coordinating Module Relationships)

패키지 은닉 모듈 기술자(module-info)에서 exports 키워드를 사용하여 내부 패키지 중 외부 패키지에서 사용할 패키지를 지정할 수 있습니다. exports된 패키지는 외부로 노출되며, exports되지 않은 패키지는 자동적으로 은닉이 됩니다. 모듈이 패키지를 은닉하는 이유는 아래와 같습니다. 모듈 사용 방법 통일: 외부와 접촉하는 패키지만 노출하여 모듈의 사용 방법을 통일합니다. 쉬운 수정: 접촉 모듈에 영향을 주는 다른 모듈을 수정해도 외부에 영향을 주지 않습니다. 모듈 기술자에서 패키지 은닉을 하는 방법 module 모듈이름 { // 외부 노출을 허용하는 패키지 exports 패키지이름; ... } 전이 의존 모듈 기술자에서 requires 키워드를 사용하여 모듈간의 의존 관계를 지정할 ..

[Java] 자바의 라이브러리와 모듈(Java Library & Module)

자바의 라이브러리(Library) 라이브러리는 프로그램 개발 시 활용할 수 있는 클래스와 인터페이스들을 모아놓은 것을 뜻합니다. 일반적으로 JAR 압축 파일로 존재하며, 클래스, 인터페이스, 바이트코드 파일 들이 압축되어 있습니다. 특정 클래스와 인터페이스가 여러 응용프로그램을 개발할 때 공통으로 자주 사용된다면 JAR 파일로 압축하여 라이브러리로 관리하는 것이 좋습니다. (해당 기능은 IDE에서 지원하기도 함) 프로그램 개발 시 라이브러리를 이용하려면 JAR 파일을 ClassPath에 추가해야 합니다. ClassPath란 클래스를 찾기 위한 경로를 뜻하며, ClassPath에 라이브러리를 추가할 수 있는 방법은 3가지가 있습니다. 콘솔에서 java 명령어 실행 중 -classpath 옵션을 통해 추가 ..

[Java] 자바 패키지(Java Package)

패키지(package) 자바에서 특정 목적을 공유하는 클래스와 인터페이스의 묶음을 의미합니다. 물리적인 하나의 디렉토리라고 할 수 있으며, 클래스나 인터페이스는 모두 어느 하나의 패키지에 속하게 됩니다. (패키지로 여러 클래스나 인터페이스를 묶어 효율적으로 관리하기 위함) 패키지는 계층구조를 가지며, 계층간 구분은 .(dot) 방식으로 표현됩니다. 같은 이름의 클래스더라도, 소속된 패키지가 다르면 다른 클래스로 인식됩니다. 가져오기(import) 패키지 내에서 다른 패키지의 클래스를 사용하기 위해 선언합니다. 같은 패키지 내의 클래스는 import를 선언할 필요 없이 바로 사용 가능합니다. import는 컴파일 시에 처리가 되므로 프로그램 성능에는 영향을 주지 않습니다. import의 사용법은 아래와 같..

[Java] 예외 전가(Exception Imputation)

예외 전가(Exception Imputation) 메서드 내부에서 예외가 발생하면 예외 처리문(try~catch)을 이용하는 것이 기본이지만, 메서드를 호출한 곳으로 예외를 넘길 수도 있습니다. 이를 위해 'throws' 예약어를 사용하는데, 'throws'는 메서드 선언부 끝에 선언되어 넘길 예외 클래스를 지정할 수 있습니다. 여러 개의 예외 클래스가 필요하다면 쉼표(,)를 통해 연결하여 표시할 수 있습니다. 메서드 예외 처리를 위한 throws 사용 방법 반환자료형 메서드이름(매개변수 ... ) throws 예외클래스1, 예외클래스2 { 메서드 내용 ... } throws를 통해 전가되는 예외는 처리가 되지 않은 상태이기 때문에 메서드를 호출하는 곳에서 예외를 받아서 처리해줘야 합니다. 처리해야할 예..

[Java] 예외 처리(Exception Handling)

예외 처리(Exception Handling) 에러가 발생했을 때 프로그램의 갑작스러운 종료를 막고 실행 상태가 유지될 수 있도록 처리하는 것을 예외 처리라고 합니다. 예외는 예외 처리문을 사용하여 처리합니다. 예외 처리문은 try~catch~finally 로 구성되며, try 내의 작성한 코드가 예외를 발생하면 catch에 지정한 예외 클래스로 보내는 역할을 합니다. 예외 처리문은 컨스트럭터 내부나 메서드 내부에서 작성됩니다. 예외 처리를 위한 try~catch~finally 구문 사용 방법 try { 예외가 발생할 가능성이 있는 코드 입력 } catch(예외클래스 e) { 발생한 예외에 대한 처리 코드 작성 위치 catch 블럭은 여러 개가 올 수 있음 } finally { 항상 실행되어야 하는 코드..

[Java] 프로그램 에러와 예외(Program Error & Exception)

프로그램 에러(오류) 컴퓨터 하드웨어 고장이나 응용 프로그램에서 실행 오류가 발생하는 것을 에러라고 합니다. 소프트웨어 부분에서는 크게 문법 에러, 실행 에러, 논리 에러로 구분됩니다. 문법 에러(Syntax Error): 프로그래밍 언어에서 문법적으로 에러가 발생하는 현상을 뜻합니다. 실행 에러(Runtime Error): 프로그램 실행 중에 의도치 않게 발생한 연산으로 에러가 발생하는 현상을 뜻합니다. 논리 오류(Logical Error): 프로그래밍 언어의 문법은 정상적이지만 논리적으로 원하는 결과값이 나오지 않는 에러가 발생하는 현상을 뜻합니다. 자바에서는 이러한 에러가 발생하면 프로그램이 바로 종료되는데, 에러가 발생해도 프로그램을 계속해서 작동시키기 위해 에러에 예외를 설정합니다. 예외(Exc..

[Java] 중첩 인터페이스(Nested Interface)

중첩 인터페이스(Nested Interface) 중첩 인터페이스는 클래스의 내부에 멤버 요소로 선언된 인터페이스를 뜻합니다. 인터페이스를 클래스 내부에 선언하여 바깥 클래스와 긴밀한 관계를 가지는 구현 객체를 만들기 위해 사용됩니다. 중첩 클래스와 같이 접근 제어자를 사용하여 접근 범위를 설정할 수 있습니다. public: 다른 패키지에서 중첩 인터페이스 접근 가능 (default): 같은 패키지에서만 중첩 인터페이스 접근 가능 private: 바깥 클래스 내부에서만 중첩 인터페이스 접근 가능 또한 static 제어자를 통해 정적인 특성을 가지도록 설정할 수 있습니다. 중첩 인터페이스는 보통 안드로이드 UI 프로그램에서 이벤트를 처리할 목적으로 활용됩니다. 중첩 인터페이스 선언 방법 class Outer..

[Java] 익명 클래스(Anonymous Class)

익명 클래스(Anonymous Class) 익명 클래스는 내부 클래스의 일종으로 이름이 없는 클래스를 뜻하며 무명 클래스라고도 합니다. 익명 클래스는 클래스의 재사용을 고려하지 않고 일시적으로 사용하기 위해 만들어지는 클래스입니다. 명시적으로 클래스를 선언하지 않기 때문에 클래스의 인스턴스를 쉽게 생성할 수 있는 장점을 가지고 있습니다. 익명 클래스는 필드, 로컬 변수, 매개 변수로 주로 사용됩니다. 익명 클래스는 특정 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있습니다. 익명 자식 클래스: 클래스를 상속하여 익명 클래스를 생성하는 경우입니다. 익명 구현 클래스: 인터페이스를 구현하여 익명 클래스를 생성하는 경우입니다. 익명 자식 클래스 익명 자식 클래스는 부모 클래스를 상속받아 생성됩니다. ..

[Java] 중첩 클래스의 분류(Separation of Nested Class)

중첩 클래스의 분류 중첩 클래스는 선언 위치와 방식에 따라서 쓰임새가 나눠집니다. 중첩 클래스의 종류는 아래와 같습니다. 인스턴스 멤버 클래스(내부 클래스): 특정 클래스의 멤버로 선언된 클래스를 뜻합니다. 스태틱 멤버 클래스(중첩 클래스): 특정 클래스의 정적 멤버로 선언된 클래스를 뜻합니다. 로컬 클래스(지역 클래스): 특정 클래스의 메서드 내에 선언된 클래스를 뜻합니다. 인스턴스 멤버 클래스(Instance Member Class) 인스턴스 멤버 클래스( = 내부 클래스)는 한 클래스 내부에 선언된 또 다른 클래스를 뜻합니다. 클래스 내부에 선언되기 때문에 바깥 클래스의 인스턴스가 생성되어야만 내부 클래스의 인스턴스도 생성될 수 있습니다. 따라서 인스턴스 멤버 클래스는 바깥 클래스의 모든 필드와 메..

[Java] 중첩 클래스(Nested Class)

중첩 클래스(Nested Class) 중첩 클래스는 클래스 내부에 선언되는 클래스를 똣합니다. 객체의 관계가 종속적인 관계이거나 특정 객체와만 상호 작용을 할 때 내부 클래스를 사용하여 표현합니다. 중첩 클래스는 내부 클래스(Inner Class) 라고도 불리는데, 혼용되는 경우도 있지만 엄격하게 분리하여 사용하는 경우도 있습니다. 내부 클래스(= 인스턴스 멤버 클래스): 바깥 클래스에서 멤버 변수처럼 사용되는 클래스 중첩 클래스(= 스태틱 멤버 클래스): 정적(static)으로 선언되어 바깥 클래스와 독립적으로 사용할 수 있는 클래스 지역 클래스: 메서드 내에 선언되는 클래스로 메서드가 실행될 때만 사용할 수 있는 클래스 내부 클래스도 하나의 클래스이기 때문에 컴파일시 바이트코드 파일(.class)이 ..

[Java] 인터페이스의 요소(Member of Interface)

인터페이스의 요소 인터페이스도 다른 클래스와 같이 멤버를 가질 수 있습니다. 단, 인터페이스는 일종의 추상 클래스이기 때문에 스스로 인스턴스를 생성할 수 없습니다. 따라서 인스턴스를 생성하지 않아도 사용할 수 있는 요소들만 멤버로 가질 수 있습니다. 인터페이스의 멤버가 될 수 있는 요소는 아래와 같습니다. 상수 필드 추상 메서드 기본(디폴트) 메서드 정적 메서드 (private) 메서드 (private) 정적 메서드 상수 필드(Constant Field) 인터페이스는 public static final 특성을 갖는 불변의 상수 필드를 멤버로 가질 수 있습니다. 인터페이스에서 선언된 필드는 public static final 키워드를 생략해도 컴파일러가 자동으로 붙여줍니다. 상수는 구현하지 않아도 사용가..