Encapsulation(캡슐화) : 객체를 캡슐(Class)로 싸서 내부를 볼 수 없게 하는 것
= 외부의 접근으로부터 객체 보호
Class 배치를 잘해야 함
Inheritance(상속) : 하위 객체가 상위 객체의 속성을 모두 가진다 = 물려받는다 , 기능 확장
Polymorphism(다형성) : 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록
(메소드 오버로딩, 메소드 오버라이딩)
절차 지향 프로그래밍 | 객체 지향 프로그래밍 |
---|---|
작업 순서로 표현, 함수들의 집합 | 객체들간의 상호 작용으로 표현, 클래스/객체들의 집합 |
객체 생성 : new 키워드 -> 객체의 생성자 호출
객체 생성 과정
Circle pizza; // (1) 레퍼런스 변수 선언
pizza = new Circle(); // (2) 객체 생성 - new 연산자 이용
// 객체 멤버 접근
pizza.radius.10;
pizza.name = "supreme pizza"
double area = pizza.getArea();
실행시에 코드는 다른곳에 존재, class를 만들때 그 코드로 돌아가서 이 class를 메모리에 로드함
객체가 생성될 때 초기화를 위해 실행되는 메소드
클라이언트 입장에서 여러개 골라서 사용할 수 있음
객체 자신에 대한 레퍼런스
-> 클래스의 멤버에 대해 사용
public class Circle {
int radius;
public Circle() {
this.radius = 1;
}
public Circle(int radius) {
this.radius = radius; //this!
}
double getArea() {
return 3.14*this.radius*this.radius;
}
...
}
public class Book {
String title;
String author;
void show() {
System.out.println(title + " " + author);
}
public Book() {
this("", ""); // this.title =""; this.author=""; (X:이렇게쓰지않음)
System.out.println("생성자 호출됨");
}
public Book(String title) {
this(title, "작자미상"); // BOOK(title,"작자미상"); (X:불가능)
}
public Book(String title, String author) {
this.title = title; this.author = author;
}
public static void main(String [] args) {
Book littlePrince = new Book("어린왕자", "생텍쥐페리");
Book loveStory = new Book("춘향전");
Book emptyBook = new Book();
loveStory.show();
}
}
JVM이 가비지 컬렉션 시점을 전적으로 판단
System.gc()
바로 작동함을 의미하지는 않음
new에 의해 할당된 객체 메모리 -> JVM의 가용메모리로 되돌려 주는 행위
∴ 자바 응용프로그램에서 임의로 객체를 소멸할 수 없음 -> 장점이자 단점
(Heap이 부족할 때 임의로 해제하고 싶어도 불가능)
∴ 사용하지 않는 객체에 대해 바로바로 레퍼런스를 끊어줘야 함
객체의 어느 변수가 다른 객체를 가리킬 때 필요없어지면 NULL을 넣어줘야 함
접근 지정자 + 리턴 타입 + 메소드 이름 + 메소드 인자들 + 메소드 코드
이름이 같은 메소드 작성
협업시 파악할 코드를 판단하는 기준이 됨
private, protected, public, 디폴트(접근지정자 생략)
Calender cal;
cal.month = 13;
//setter 함수내에서 이런 것들에 대한 유효성 체크가 가능함
관련 있는 클래스 파일(컴파일된 .class)을 저장하는 디렉터리
자바 응용프로그램은 하나 이상의 패키지로 구성
동일한 클래스의 모든 객체에 의해 공유클래스가 로딩된다 = 코드를 코드영역에 올림
-> static 멤버만 생김(static 영역-별도의 영역-에 생김)
non-static 멤버에 접근할 수 없음 (<-> non-static 메소드는 static 멤버 사용 가능)
∵ 객체가 생성되지 않아도 static 메소드는 실행될 수 있음
this 사용 불가능
∵ this 레퍼런스 : 현재 객체를 가리키는 것
final class FinalClass {
.....
}
class SubClass extends FinalClass { // 컴파일 오류. FinalClass 상속 불가
.....
}
public class SuperClass {
protected final int finalMethod() { ... }
}
class SubClass extends SuperClass { // SubClass가 SuperClass 상속
protected int finalMethod() { // 컴파일 오류, 오버라이딩 불가
...
}
}
class SharedClass {
public static final double PI = 3.14;
}
public class FinalFieldClass {
final int ROWS = 10; // 상수 정의, 이때 초기 값(10)을 반드시 설정
void f() {
int [] intArray = new int [ROWS]; // 상수 활용
ROWS = 30; // 컴파일 오류 발생, final 필드 값을 변경할 수 없다.
}
}
명품 Java Programming(황기태, 김효수 저)