1. 객체 지향
1) 캡슐화
a. 캡슐화란?
객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것
b. 객체의 본질적인 특징
외부의 근접으로부터 객체 보호
c. 자바의 캡슐화
2) 상속
a. 상속이란?
상위 개체의 속성이 하위 개체에 물려짐
하위 객체가 상위 개체의 속성을 모두 가지는 관계
b. 자바의 상속
3) 다향성
a. 다향성이란?
같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현
b.다형성 사례
메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드
메소드 오버라이딩 : 슈퍼클래스의 메소드를 서브 클래스마다 다르게 구현
2.클래스
1) 클래스란?
객체를 만들어내기 위한 설계도 혹은 틀
객체의 속성(state)과 행동(behavior) 포함
2)클래스 구성
a.클래스 선언, class Circle
class 키워드로 선언
클래스는 {로 시작하여 }로 닫으며 이곳에 모든 필드와 메소드 구현
class Circle은 Circle 이름의 클래스 선언
클래스 접근 권한, public
다른 클래스들에서 Circle 클래스를 사용하거나 접근할 수 있음을 선언
b.필드와 메소드
필드 (field) : 객체 내에 값을 저장하는 멤버 변수
메소드 (method) : 함수이며 객체의 행동(행위)를 구현
c.필드의 접근 지정자, public
필드나 메소드 앞에 붙어 다른 클래스의 접근 허용을 표시
public 접근 지정자 : 다른 모든 클래스의 접근 허용
d.생성자
클래스의 이름과 동일한 특별한 메소드
객체가 생성될 때 자동으로 한 번 호출되는 메소드
개발자는 객체를 초기화하는데 필요한 코드 작성
3. 객체
1)객체란?
클래스의 모양 그대로 찍어낸 실체
프로그램 실행 중에 생성되는 실체
메모리 공간을 갖는 구체적인 실체
인스턴스(instance)라고도 부름
2)객체 생성 및 접근
a.객체 생성
반드시 new 키워드를 이용하여 생성
new는 객체의 생성자 호출
b.객체 생성 과정
객체에 대한 레퍼런스 변수 선언
객체 생성
클래스 타입 크기의 메모리 할당
객체 내 생성자 코드 실행
c.객체의 멤버 접근
객체 레퍼런스.멤버
d. 예제 Circle 클래스의 객체 생성 및 접근
public class Circle {
int radius;
String name;
public Circle() { }
public double getArea() {
return 3.14*radius*radius;
}
public static void main(String[] args) {
Circle pizza;
pizza = new Circle();
pizza.radius = 10;
pizza.name = "자바피자";
double area = pizza.getArea();
System.out.println(pizza.name + "의 면적은 " + area);
Circle donut = new Circle();
donut.radius = 2;
donut.name = "자바도넛";
area = donut.getArea();
System.out.println(donut.name +"의 면적은 " + area);
}
}
4. 생성자
1)생성자란?
객체가 생성될 때 초기화를 위해 실행되는 메소드
2)두 개의 생성자를 가진 Circle2 클래스
public class Circle2 {
int radius;
String name;
public Circle2() {
radius = 1; name ="";
}
public Circle2(int r,String n) {
radius = r; name = n;
}
public double getArea() {
return 3.14*radius*radius;
}
public static void main(String[] args) {
Circle2 pizza = new Circle2(10,"자바피자");
double area = pizza.getArea();
System.out.println(pizza.name + "의 면적은 " + area);
Circle donut = new Circle();
donut.name ="도넛피자";
area = donut.getArea();
System.out.println(donut.name + "의 면적은" + area);
}
}
3) 생성자의 특징
생성자는 메소드
생성자 이름은 클래스 이름과 반드시 동일
생성자 여러 개작성 가능 (오버로딩)
생성자는 new를 통해 객체를 생성할 때, 객체당 한 번 호출
생성자는 리턴 타입을 지정할 수 없음
생성자의 목적은 객체 초기화
생성자는 객체가 생성될 때 반드시 호출됨.
4) 예제 생성자 선언 및 활용
public class Book {
String title;
String author;
public Book(String t) {
title = t;
author ="작자미상";
}
public Book(String t, String a) {
title =t;
author = a;
}
public static void main(String[] args) {
Book littlePrince = new Book("어린왕자","생택쥐페리");
Book loveStory = new Book("춘향전");
System.out.println(littlePrince.title + "" +littlePrince.author);;
System.out.println(loveStory.title + "" +loveStory.author);
}
}
5) 기본 생성자
a. 기본 생성자
매개 변수 없고 아무 작업 없이 단순 리턴하는 생성자
디폴트 생성자라고도 부름
클래스에 생성자가 하나도 선언되지 않은 경우, 컴파일러에 의해 자동으로 삽입
b. 기본 생성자가 자동으로 생성되지 않는 경우
개발자가 클래스에 생성자가 하나라도 작성한 경우
5.this
1) this 레퍼런스
a.객체 자신에 대한 레퍼런스
컴파일러에 의해 자동 관리, 개발자는 사용하기만 하면 됨
this.멤버 형태로 멤버 사용
2) this가 필요한 경우
객체의 멤버 변수와 메소드 변수의 이름이 같은 경우
다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
메소드가 객체 자신의 레퍼런스를 반환할 때
3)객체 속에서의 this
4) this()로 다른 생성자 호출
클래스 내의 다른 생성자 호출
생성자 내에서만 사용 가능
반드시 생성자 코드의 제일 처음에 수행
5) this 사용 실패 예시
6) 예제 this()로 다른 생성자 호출
public class Book2 {
String title;
String author;
void show() {System.out.println(title + "" +author);}
public Book2() {
this("","");
System.out.println("생성자 호출됨");
}
public Book2(String title) {
this(title,"작자미상");
}
public Book2(String title,String author) {
this.title = title; this.author = author;
}
public static void main(String[] args) {
Book2 littlePrince = new Book2("어린왕자","생택쥐페리");
Book2 loveStory = new Book2("춘향전");
Book2 emptyBook = new Book2();
loveStory.show();
}
}
6. 객체 배열
1) 객체 배열 생성 및 사용
2) 객체 배열 선언과 생성 과정
3) 예제 객체 배열 생성
public class Circle3 {
int radius;
public Circle3(int radius) {
this.radius = radius;
}
public double getArea() {
return 3.14*radius*radius;
}
public static void main(String[] args) {
Circle3 [] c; // Circle 배열에 대한 레퍼런스 C 선언
c = new Circle3[5]; // 5개의 레퍼런스 배열 생성
for(int i =0; i<c.length; i++) // 배열의 개수 만큼
c[i] = new Circle3(i); // i 번째 원소 객체 생성
for(int i=0; i<c.length; i++) // 배열의 모든 원소 객체의 면적출력
System.out.print((int)(c[i].getArea()) + "" );
}
}
'JAVA' 카테고리의 다른 글
java #문제풀기2 객체문제 (0) | 2021.05.02 |
---|---|
java #문제 풀기1 객체문제 (0) | 2021.05.01 |
java #4 메소드, 가비지 컬렉션, 맴버의 접근, static, non-static (0) | 2021.04.30 |
java #2 반복문과 배열 (0) | 2021.04.28 |
java #1 식별자, 리터럴, 연산자, Scanner, if문, switch문 (0) | 2021.04.28 |