객체지향 관련 용어 목록
- 클래스
- 상태(state)와 행위(behavior)
- 어떤 사물을 나타낼 떄에는 상태와 행위로 구분하여 표시하는 것이 가능하다.
"상태"는 클래스나 인스턴스 변수로, "행위"는 메소드로 표현할 수 있다
- 캡슐화 (Encapsulation)
- 연관된 "상태"와 "행위"를 결정하는 기능을 묶어 주는 것
- 클래스 밖에서 접근 가능한 대상을 제한하는 정보 은닉이 가능하다
- 하나의 객체를 위한 코드가, 다른 객체를 위한 코드와 무관하게 수행할 수 있는 모듈화가 가능해진다.
- 메시지
- 메소드에서 다른 메소드를 호출할 때 전달하는 값 = 매개 변수
- 객체 (Object)
- 클래스는 사물의 단위를 의미하고, 객체는 각 사물을 의미한다
- 상속 (Inheritance)
- 부모에 선언된 변수와 메소드에 대한 사용권을 갖는 것
- 클래스 선언시 extends를 사용하여 확장하거나, implements를 사용하여 구현한 경우
- 다형성 (Polymorphism)
- 부모 클래스에서 파생된 자식 클래스들의 기능이 각기 다를 수 있다는 것
- Overriding
- 부모 클래스에 선언되어 있는 메소드와 동일한 선언을 갖지만 구현이 다른 것
- 다형성을 제공하는 하나의 방법
- Overloading
- 메소드의 이름은 동일해도, 매개 변수들을 다르게 하는 것
자바의 주석문
// 주석 처리 내용
/* 주석 시작
주석 끝 */
/** 주석 시작
해당 클래스나 메소드의 설명이 있어야 함
주석 끝 */
package와 import
- package
- 클래스들을 그룹화하기 위한 단위
- 유의 사항
- 패키지는 package로 시작하며 하위 패키지로 내려갈 때마다 . 을 찍어준다
- 반드시 소스의 가장 첫 줄에 존재한다
- 패키지 이름에 자바 예약어가 포함되면 안 된다
- 모두 소문자로 구성하는 것이 일반적이다
- 일반적인 패키지는 java나 javax로 시작하면 안 된다
- import
- 다른 패키지에 있는 클래스를 사용하기 위한 문장
- 다른 클래스에 static으로 선언되어 있는 접근 가능한 변수를 참조하려면
import static을 사용한다.
- 하나의 패키지 내에 있는 모든 클래스를 참조하려면 *을 사용한다
자바에서 사용되는 타입의 종류
- 기본 자료형
- 정수형 : byte, short, int, long, char
- 소수형 : float, double
- 기타 : boolean
- 참조 자료형
- 기본 자료형을 제외한 모든 타입
- 모든 클래스는 참조 자료형이라고 생각하면 된다
- 기본 자료형과 참조 자료형 차이
- 초기화 할 때 : 기본 자료형은 바로 지정하면 되지만, 참조 자료형은 일반적으로 new와 생성자를 지정하여 객체를 생성
- 메소드를 호출할 떄의 매개 변수 : 기본 자료형 및 참조 자료형 모두 값을 전달하지만, 참조 자료형 안에 있는 변수들은 참조 주소를 전달
- 특수한 참조 자료형 String
- String 클래스는 new를 이용하여 객체를 생성할 필요가 없는 특수한 클래스다.그리고 +연산까지 가능한 유일한 클래스다
변수의 종류
- 지역 변수
- 지역 변수를 선언한 곳에서부터 생명이 시작되고, 지역 변수를 선언한 중괄호가 끝나면 소멸
- 매개 변수
- 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸 (호출한 메소드에서 넘겨준 참조 자료형은 그대로 살아 있음)
- 인스턴스 변수
- 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸
- 클래스 변수
- 클래스가 생성될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸
접근 제어자
- public
- protected
- 같은 패키지 내에 있거나 상속받은 경우에만 접근 가능
- (package-private)
- 아무런 접근 제어자를 적어주지 않을 때
- 같은 패키지 내에 있을 떄만 접근 가능
- private
클래스, 인터페이스, abstract 클래스, enum 클래스
- 클래스 파일(.class)이 되는 타입의 종류
- 클래스
- 인터페이스
- abstract 클래스
- enum 클래스
- 어노테이션 선언 클래스
- 인터페이스
- 어떤 메소드가 존재해야 하는지에 대한 선언만 되어 있다
- 절대로 구현되어 있는 메소드가 있으면 안 된다
- 인터페이스를 구현하는 클래스에서는 implements를 사용하여 선언
- abstract 클래스
- 구현되어 있는 메소드가 있어도 상관 없다.
- abstract로 선언된 메소드가 1개 이상일 경우에는 반드시 abstract 클래스로 선언해야 한다
- abstract로 선언된 메소드는 절대로 구현되어 있어서는 안 된다
- abstract 클래스를 확장하는 클래스에서는 extends를 사용하여 선언한다
- 클래스
- 인터페이스나 abstract 클래스와 다르게 모든 메소드가 구현되어 있어야 한다
- enum 클래스
- 상수를 열거하기 위한 용도로 사용
- enum 클래스의 상수는 이름만 정의해도 된다.
- 별도의 생성자를 만들어 각 상수의 값을 지정할 수 있다.
- enum에 메소드를 만들어 기능 추가 가능
- 어노테이션 선언 클래스
- 대상(@Targert)과 적용 범위(@Retention)을 명시하는 것이 좋다
- @interface를 사용하여 어노테이션이라는 것을 명시한다.
메소드
- 클래스의 행위를 처리하는 데 사용됨
- public void method(String param, int ... params){}
params라는 여러 개의 int 타입을 콤마로 구분하여 매개 변수로 지정 가능
상속
- 상속 관계가 발생했을 때 생성자, 메소드, 변수 정리
- 생성자
- 자식 클래스의 생성자가 호출되면 자동으로 부모 클래스의 매개 변수가 없는 기본 생성자가 호출됨. 명시적으로 super()라고 지정 가능
- 부모 클래스의 생성자를 명시적으로 호출하려면 super()를 사용하면 된다
- 메소드
- 부모 클래스에 선언된 메소드들이 자신의 클래스에 선언된 것처럼 사용 가능
(private 제외)
- 부모 클래스에 선언된 메소드와 동일한 시그니처를 사용함으로써
메소드 overriding이 가능하다
- 부모 클래스에 선언되어 있지 않은 이름의 새로운 메소드 선언이 가능
- 변수
- 부모 클래스에 private로 선언된 변수를 제외한 모든 변수 사용 가능
- 부모 클래스에 선언된 변수와 동일한 이름을 가지는 변수 선언 가능 (권장X)
- 부모 클래스에 선언되어 있지 않는 이름의 변수 선언 가능
예외 처리
- try-catch-finnally
- 자바에서 사용하는 예외의 종류
- checked exception
- try-catch로 묶어 줘야하는 예외
- 컴파일시 예외 처리 여부를 체크
- error
- 자바 프로세스에 영향을 주는 예외
- 실행시 발생
- runtime exception 혹은 unchecked exception
- try-catch로 묶지 않아도 컴파일시 체크 하지 않는 예외
- 실행시 발생하는 예외
- throw
- 예외 객체를 던지기 위해 사용
- try 블록 내에서 예외를 발생시킬 경우에는 throw라는 예약어를 적어 준 뒤 예외 객체를 생성하거나, 생성되어있는 객체를 명시
- throws
- 예외가 발생하면 던질 것이라고 메소드 선언시 사용
- 해당 메소드에서 선언한 예외가 발생하면 호출한 메소드로 예외가 전달된다
- 두 가지 이상의 예외는 콤마로 구분한다
- catch 블록에서 예외를 throw할 경우에는 메소드 선언의 throws 구문에 해당 예외가 정의되어 있어야 한다.
- throw한 예외 클래스가 catch 블록에 선언되어 있지 않거나, throws 선언에 포함되어 있지 않으면 컴파일 에러가 발생
Object 클래스
- 모든 클래스의 가장 최상위 부모 클래스
- 이 클래스에 선언되어 있는 모든 메소드들은 자바에서 사용하는 모든 클래스에서 사용할 수 있다
- 주요 메소드
- clone()
- equals()
- finalize() : 현재 객체가 더 이상 쓸모 없어졌을 때 가비지 컬렉터에 의해 이 메소드가 호출된다.
- getClass() : 현재 객체의 Class 클래스의 객체를 리턴
- hashCode() : 객체에 대한 해시 코드 값을 리턴
- String toString() : 객체를 문자열로 표현하는 값 리턴
- wait(), notify(), notifyAll() : 쓰레드 처리시 사용하는 메소드
String 클래스
- new를 사용하여 객체를 생성할 수 있는 유일한 클래스
- 더하기 연산 가능
더하기 연산을 할 경우 String클래스는 기존 문자열은 버리고 새로운 객체 생성
- StringBuffer와 StringBuilder 클래스
- String의 단점을 보완하기 위해 제공되는 클래스들
- StringBuffer는 쓰레드에 안전하고, StringBuilder는 그렇지 못하다
- append() 메소드를 사용하여 문자열을 더할 수 있다
- 만약 문자열을 더하면 컴파일러에서 StringBuilder 클래스로 변환