객체(object) 는 그 객체의 속성(attribute)과 그 객체의 행동(behavior)으로 이루어짐
- 속성: 객체의 데이터 혹은 상태를 나타내는 속성
- 행동 : 객체가 취할 수 있는 연산 혹은 동작
클래스로부터 객체들을 생성해 내는 것을 실체화(instantiation) 이라고 하며 객체는 클래스의 하나의 실체 혹은 인스턴스(instance)라고 함.
하나의 클래스 정의는 클래스 헤더(class header) 와 클래스 본체(class body) 로 구성
클래스 헤더에는 정의하고자 하는 클래스 이름을 표기
클래스 본체 내에서는 객체의 속성을 나타내기 위한 필드 변수들(field vatiables)을 선언하고, 행동을 정의하는 메소드들(methods)을 정의
클래스 내에 선언된 변수들을 실체 변수(instance variable) 라고 함
클래스 내에 선언된 실체 변수는 각 객체마다 변수를 위한 메모리가 할당됨
생성자(constructor) : 클래스와 같은 이름을 갖는 특수한 메소드로 new 연산자에 의해 객체가 생성될 때 자동으로 실행됨. 주로 객체를 초기화 하는데 사용. 생성자는 리턴 값이 없으므로 리턴 타입이 없으며 생성자에 리턴 타입을 사용하면 컴파일 오류. 클래스를 정의할 때 생성자를 꼭 선언해야 되는 것은 아니며 필요에 따라 중복 정의를 이용해 여러개 선언할 수 있음. 생성자를 선언하지 않으면 매개변수가 없는 디폴트 생성자를 갖게 됨
추상 자료형(abstract data type) : 자료형의 자료 표현과 자료형의 연산을 한데 묶어 캡슐화 한것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있음
데이터와 관련된 메소드들을 함께 선언하고 이 메소드들만 데이터를 사용하게 하는 것을 캡슐화(encapsulation) 라 함
객체의 상태를 나타내는 데이터나 필드 변수는 그 객체의 메소드에 의해서만 접근되고 변경 되어야 함. 객체는 외부에서 보면 서비스를 제공하는 캡슐화된 개체(encapsulated entity)라고 할 수 잇으며 서비스를 제공하는 메소드들은 그 객체의 창구(interface) 역할을 함.
java는 캡슐화를 위해 3가지 접근 제어자(access modifier)를 제공
- public : 공용 접근 제어자
- protected : 보호 접근 제어자
- private : 전용 접근 제어자
static 변수는 객체가 아니라 클래스 내에 변수를 위한 기억 공간이 생성되므로 정적 변수(static variable) 또는 클래스 변수(class variable) 이라고 하며 모든 객체가 공유해서 사용하는 멤버 변수가 필요하면 이러한 변수들은 static 으로 선언하여야 함
메소드 또한 static 으로 선언할 수 있으며 이를 정적 메소드(static method) 또는 클래스 메소드(class method) 라고 함
제네릭 프로그래밍(generic programming) : 타입 매개변수를 이용하여 여러 타입에 적용 될 수 있는 포괄적인 코드를 작성하고, 실제로 사용할 때 필요에 따라 이 코드를 구체적인 타입을 적용하여 사용하는 프로그래밍 기법
제네릭 클래스로 작성할 수있는 기능은 타입 매개변수에 따라 여러 타입에 적용되어 사용할 수 있기 때문에 매개변수 다형성(parametric polymorphism) 이라 함
자바에서는 <T> 를 이용해서 표현함
'프로그래밍 언어론' 카테고리의 다른 글
[프로그래밍 언어론] 상속(inheritance) (0) | 2022.08.23 |
---|---|
[프로그래밍 언어론] 예외 처리 (0) | 2022.08.22 |
[프로그래밍 언어론] 함수 (0) | 2022.08.22 |
[프로그래밍 언어론] 타입 시스템 (0) | 2022.08.22 |
[프로그래밍 언어론] 자료형(data type) (0) | 2022.08.22 |