-
클래스(Class)
흔히 객체의 청사진이라고 많이 정의한다.
상태와 행위를 갖는 자바의 기본 단위이다.
한마디로 건물(객체)를 지을 때 필요한 설계도라고 생각하면 된다.
완성된 건물이 자바에서는 객체(Object)이다. -
상태(State)와 행위(Behavior)
어떤 사물을 나타낼 때에는 상태화 행위로 구분하여 표시하는 것이 가능하다.
자바에서상태
는 클래스나 인스턴스 변수로,행위
는 메서드로 표현할 수 있다. -
객체(Object)
객체지향 프로그래밍의 기본단위,
데이터(실체) 변수(상태)와 메서드(행위)를 모두 포함하고 있다.
클래스는 사물의 단위를 의미하지만,
객체는 각 사물을 의미한다.
예를 들면, 책은 클래스고<자바의 신>
은 객체라고 볼 수 있다. -
인스턴스(Instance)
한 클래스의 특정한 객체를 의미
일반적으로 어떤 집합에서 그 집합의 개별적인 요소를 인스턴스라고 한다. -
인스턴스화(Instantiate)
클래스에서 인스턴스를 생성시키는 것을 말한다.
자바에서new
를 사용해 클래스를 복제하여 새로운 객체를 생성하는 것을
흔히 인스턴스화 라고 한다. -
생성자와 소멸자
객체는 생성되고 소멸될 때 호출되는 특별한 메서드를 가지고 있다.
이 메서드를 생성자와 소멸자라고 한다.
생성자는 객체를 초기화하거나 설정하고
소멸자는 객체를 삭제하고 정리한다. -
멤버(Member)
객체 혹은 클래스의 변수나 메서드를 의미
-
변수(Variable)
값이 저장된 기억장소.
객체는 변수에 자신의 상태를 저장하고, 변수는 식별자로 명명된다. -
식별자(Identifier)
프로그래머가 프로그램에서 사용하는
자료의 항목, 즉 변수, 함수, 상수, 배열, 클래스, 메서드 등에 부여하는 이름을 말한다. -
메서드(Method)
메서드는 특정한 일을 수행하는 행위나 동작을 의미한다.
일반적으로 함수와 같은 의미지만 객체지향에서는 차이점이 있다.
static(Class) 메서드와 instance 메서드 2종류가 있으며,
static 메서드는 객체를 생성하지 않아도 사용할 수 있지만,
instance 메서드는 객체를 생성해야만 사용 가능하다. -
멤버 변수(Member Variable)
클래스나 객체의 멤버로 클래스 내에서 선언된 변수를 멤버변수라고 한다.
멤버변수에는 static(Class) 변수와 instance 변수가 있으며 static(Class) 변수는 모든 객체가 공통적으로 사용하는 변수이며,
instance 변수는 각 객체들마다 따로 생성되어 개별적으로 사용하는 변수이다.- 지역변수 는 메서드 내에서 선언되어 메서드 내부에서만 사용 가능한 변수를 말하며, 멤버 변수는 메서드나 생성자 바깥에 선언되어야 하며 클래스 전체 영역에서 사용하는 변수를 말한다.
-
멤버 함수(Member Function)
클래스 내에서 선언된 함수를 말하며, 멤버 변수들을 통제하기 위하여 사용한다.
public, protected, private와 같은 접근 제한자를 사용한다. -
접근 제한자
- public : 모든 접근 허용
- protected : 같은 패키지에 있는 객체와 상속관계의 객체들만 허용
- default : 같은 패키지에 있는 객체들만 허용
- private : 현재 객체 내에서만 허용
-
추상화(Abstraction)
어떤 대상(객체)을 표한하는데 있어서 일부 특성들만 표현하는 것으로 추상화를 하게되면 목적을 위해서 필요한 부분을 찾을 수 있다.
개별적인 대상들의 공통점을 모아 클래스 또는 인터페이스화 하는 것이라 생각하면 된다.
사람을 예로 들면,
철수와 영희는 각자 고유한 특성을 가지고 있지만
이런 점을 제외하고 이름/나이/성별/주소 등 동일한 특성을 모아서 사람이라는 클래스를 만든다면 이 과정을 추상화라고 할 수 있다.
(추상 클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐이므로 이에 대하여 구체화가 필요하다
즉, 온전한 클래스가 아니므로 객체를 생성할 수 없다.) -
정보 은닉(Information hiding)
- 정보 은닉은 객체지향 언어가 만들어진 목적에 해당하는 개념이다.
모든 개념 중 가장 중요한 개념이라고 보면 된다.
정보 은닉을 알면 나머지 개념이 왜 생겨난 것인지 이해하고 알 수 있다. - 정보은닉은 객체지향 언어를 설계한 모든 목적을 달성하기 위한 특성이다.
객체화
한다는 의미로서 캡슐화와 상속은 정보은닉을 가능하게 하기 위한 수단이다.
- 정보 은닉은 객체지향 언어가 만들어진 목적에 해당하는 개념이다.
-
캡슐화(Encapsulation)
- 연관된
상태
와행위
를 결정하는 기능을 묶어주는 것을 말한다. - 정보 은닉의 하위 개념 중 하나로써, 객체의 필드를 비공개(private)로 하고, 꼭 필요한 경우에만 메소드 공개를 설정하는 것.
다시 정리하면 관련이 있는 데이터 그리고 동작들을 하나로 묶어 요약하고 사용자에게 내부적인 접근을 허용하지 않는 대신 사용의 편의성을 제공해주는 것 이다.
- 연관된
-
상속(Inheritance)
상위(부모) 클래스의 변수와 메서드에 대한 사용권을 갖는 것을 말한다. (extends, implements)
하위 클래스는 상위 클래스가 가지고 있는 모든 특성들을 상속하여 사용할 수 있다.
상속의 사용은 재사용성을 높여주며 세부적인 개념으로 단계적인 정의가 가능하게 한다. -
다형성(Polymorphism)
하나의 객체가 서로 다른 타입과 기능으로 동작할 수 있음을 의미.
상위 클래스에서 파생된 하위 클래스들의 기능이 각각 다를 수 있다는 말 -
메서드 재정의(Overriding)
상위 클래스에 선언되어 있는 메서드와 동일한 선언을 갖니만 구현이 다른 것을 의미한다.
재정의된 메서드는 다른 동작을 하므로 이용하는 객체는 재정의되지 않은 메서드와 동일하게 취급을 할 수 있으므로 다형성을 이용하는 수단으로 볼 수 있다. -
메서드 오버로딩(Overloading)
메서드의 이름은 동일하지만, 매개 변수를 다르게 하는 것을 의미한다.
자바에서 메서드 중복정의는 허용하지만 연산자의 중복은 허용하지 않는다.
오버로딩이 추가라면 오버라이딩은 변경으로 볼 수 있다.
(자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.) -
추상클래스(Abstract Class)
완전하지 않은 클래스를 의미하며, 반드시 하나 이상의 추상 메서드를 포함하여야 하며 객체를 생성 할 수 없다.
abstract
라는 키워드를 추가하여 클래스 및 메서드를 선언한다.
일반 메서드도 포함 할 수 있으며, 주로 슈퍼클래스로 사용한다. -
인터페이스(Interface)
추상클래스의 극단적인 경우라고 생각하면 된다.
인터페이스는 추상 메서드로만 이루어지며, 선언만 할 수 있다.
인터페이스를 사용하기 위해서는 implements 키워드를 사용하여야 하고,
인터페이스 내의 메서드는 public abstract로 선언되어야 한다.
인터페이스는 표준화 된 공통기능을 가지며 서로 다른 클래스를 연결시켜주는 징검다리라고 볼 수 있다.