자바의 객체 지향 특성
- 캡슐화
자바에서 클래스는 객체의 모양을 선언한 틀이며, 클래스 모양 그대로 생성된 실체가 객체이다.
자바는 필드와 메소드를 클래스 내에 모두 구현한다.캡슐화를 통해 객체 내 필드에 대한 외부로부터의 접근을 제한
- 상속
: 상위 개체 속성이 하위 개체에 물려져 하위 개체가 상위 개체의 속성을 모두 가지는 것
자바의 상속은 자식 클래스가 부모 클래스의 속성을 물려받아 부모 클래스에 기능을 확장(extends)하는 개념이다
자바에서 슈퍼 클래스(super class)라고 부르며 자식 클래스를 서브 클래스(sub class)라고 부른다
- 다형성
: 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현되는 것
>메소드 오버라이딩 : 슈퍼 클래스에 구현된 메소드를, 서브 클래스에서 자신의 특징에 맞게 동일한 이름으로 다시 구현
>메소드 오버로딩 : 클래스 내에서 같은 이름의 메소드를 여러 개 만드는 것
객체 지향 언어의 목적
- 소프트웨어의 생산성 향상
- 실세계에 대한 쉬운 모델링
절차 지향 프로그래밍과 객체 지향 프로그래밍
절차 지향 프로그래밍 : 실행하고자 하는 절차를 정하고,순차적으로 프로그래밍 하는 방법
객체 지향 프로그래밍 : 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것
클래스와 객체
클래스 : 객체를 만들어 내기 위한 설계/틀
객체 : 클래스의 인스턴스
가끔 객체와 인스턴스는 구별 없이 사용한다
자바 클래스 구성
- 자바에서 class 키워드로 클래스를 선언한다
클래스의 구성 요소를 멤버,멤버는 필드(멤버 변수)와 메소드(멤버 함수)의 두가지이다.
클래스 구성
: 클래스는 class 키워드와 클래스 이름으로 선언, 중괄호 안에 클래스의 필드와 메소드를 모두 작성
클래스 멤버
: 필드와 메소드로서,필드는 객체의 상태 값을 저장할 멤버 변수이며,메소드는 실행 가능한 함수이고 객체의 행위를 구현
접근 지정자
객체 생성과 활용
: 레퍼런스 변서 순언과 객체 생성
1. 레퍼런스 변수 선언
- 객체를 생성하기 전 객체를 가리킬 레퍼런스 변수의 선언이 필요
2. new 연산자로 객체 생성
- 자바에서는 반드시 new 연산자를 통해 객체를 생성한다
pizza = new Circle(); // Circle 객체생성
- 객체가 생성될 때 객체의 필드나 초기화를 위해 생성자를 둘 수 있다.
다음과 같이 레퍼런스 변수를 선언하면서 동시에 객체를 생성하기도 한다
Circle pizza = new Circle(); // 레퍼런스 변수 pizza의 선언과 동시에 객체 생성
3. 객체 멤버 접근
- 객체의 멤버에 접근할 때는 다음과 같이 점(.)연산자 이용
객체레퍼런스.멤버
생성자
: 객체가 생성될 때 초기화를 위해 실행되는 메소드
- 생성자의 이름은 클래스 이름과 동일하다
- 생성자를 여러 개 작성할 수 있다.
- 생성자는 객체를 생성할 때 한 번만 호출된다
- 생성자에 리턴 타입을 지정할 수 없다 ex) public Circle() { ...}
- 생성자의 목적은 객체가 생성될 때,필요한 초기 작업을 위함이다
기본 생성자(=디폴트 생성자)
: 매개 변수가 없고 또한 실행 코드가 없어 아무일도 하지않고 단순 리턴하는 생성자
- 기본 생성자가 자동으로 생성되는 경우
: 클래스에 생성자가 하나도 선언되어 있지 않은 경우,컴파일러는 기본 생성자를 자동으로 생성한다
- 기본 생성자가 자동으로 생성되지 않은 경우
: 생성자가 하나라도 있는 경우
this 레퍼런스
- this는 객체 자신에 대한 레퍼런스로서 메소드 안에서 사용된다
- this( ) 로 다른 생성자 호출
- this()의 호출은 생성자 코드의 첫 번째 문장이 되어야한다. 아니면 컴파일 오류 발생
'Language & Framework & GIT > JAVA' 카테고리의 다른 글
Java_Optional<T> isPresent(), ifPresent() 사용하기 (0) | 2022.08.21 |
---|---|
[JAVA] 접근 지정자 (0) | 2022.08.11 |
오늘은 짧은 언어_06 (0) | 2022.08.09 |
오늘의 짧은 언어_03 (0) | 2022.08.03 |
[JAVA] 배열과 예외 처리 (0) | 2022.08.03 |
댓글