본문 바로가기
학습 log (이론)/java

'클래스' Java #5

by abbear25 2017. 3. 24.

Class (클래스)

객체를 생성하기 위한 필드와 메소드가 정의된 설계도

실제 모형에 해당하는 인스턴스를 생성

인스턴스화를 통해서 객체를 생성


Object (객체)

물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서

자신의 속성을 가지고 있는 다른 것과 식별가능한 것


Object Oriented Programming (OOP, 객체 지향 프로그래밍)

완성품인 객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법


OOP 3가지 특징

Encapsulation (캡슐화)

객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것

잘못된 사용으로 인해 객체가 손상되는 것을 방지

외부 객체는 내부를 알지 못하며 객체가 노출하는 제공된 필드와 메소드만 이용 가능 

이를 위해서 접근 제한자 사용


Inheritance (상속)

부모가 가지고 있는 재산을 자식에게 물려주는 것

즉, 상위 객체의 필드와 메소드를 하위 객체에 물려주어 하위 객체가 사용할 수 있도록 함

상위 객체 재사용을 통해 하위 객체를 쉽고 빨리 설계할 수 있도록 돕고

재사용해서 새로운 객체를 만듬으로 반복된 코드의 중복을 줄임


Polymorphism (다형성)

같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질

부모 타입에는 모든 자식 객체, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있음


Field (필드)

객체의 데이터가 저장되는 곳

변수는 생성자와 메소드 내에서만 사용되고 함께 종료되면 자동 소멸

필드는 생성자와 메소드 전체에서 사용되며 객체 소멸 전까지 한 객체와 함께 존재


Constructor (생성자)

생성 시 초기화를 담당

변수를 입력받은 새로운 생성자를 작성할 경우 기본 생성자를 작성하지 않으면 사용불가



Method (메소드)

객체의 동작에 해당하는 중괄호 {} 블록

숫자로 시작하면 안 되고, '$', '_'를 제외한 특수 문자 사용 금지


Super()

extends로 부모를 상속한 경우에만 사용가능하며 생성자의 최상단에 위치

자신이 상속하고 있는 부모를 생성하기 위한 메소드

*부모가 생성되지 않으면 자식이 나올 수 없다.

*상속한 경우 부모와 동일한 생성자가 존재하면 안됨

부모의 생성자가 public A(int x){ } 인 경우엔 자식 클래스에서 'super(int값);'을 호출 해줘야 함

*보통은 기본 생성자임으로 호출 안 해도 자동설정되어있지만 아닌 경우엔 

자신의 생성자에서 super()호출 해야함


super.

메소드 내에서 부모의 메소드를 호출할 때만 사용가능 ( main 함수 내 사용 불가)

부모의 필드나 메소드에 접근하기 위한 접근자

super.setAge(20);


this()

반드시 생성자의 최상단에 위치하며 

클래스 내에서 다른 생성자를 부르기 위해서 사용

인스턴스 멤버

객체를 생성한 후 사용할 수 있는 필드와 메소드


this.

객체 내부의 인스턴스 멤버에 접근하기 위한 방법

강조 또는 자신이 속한 클래스의 필드 값을 지정해주는 경우 사용


super와 this 예제: http://illua.tistory.com/112


정적 멤버와 static

정적 멤버는 클래스에서 고정된 멤버로서 객체를 생성하지 않고사용할 수 있는 필드와 메소드

고정된 멤버이므로 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에서 클래스별로 관리

따라서 클래스 로딩이 끝나면 바로 사용 가능

공용적인 데이터라면 정적 필드로 선언하는 것이 편함

생성자로 초기화 할 수 없음으로 static { ... } 과 같이 정적 블록의 형태로 초기화 가능


final 필드

초기값이 지정되면 최종적인 값이 되어 프로그램 실행 도중에 수정 불가

필드 선언 또는 생성자에서 초기화하여 사용 (선언하고 초기화하지 않으면 컴파일 에러 발생)


접근 제한자

public 다른 패키지 포함 모든 곳에 접근 가능

default 같은 패키지 내에 모든 곳에 접근 가능 

protected 같은 패키지 내에 모든 곳에 접근 가능 

*단, 다른 패키지의 경우엔 자신을 상속한 하위 클래스인 경우에 가능

private 무조건 같은 클래스 내에서만 접근 가능


추상 클래스와 메소드

추상 메소드를 통해서 반드시 구현해야할 메소드를 지정해줄 수 있음

추상 메소드를 오버라이딩 하지 않으면 컴파일 에러 발생

public abstract class 설계{

public abstract void 필수 구현 메소드();

}








반응형