캡슐화
객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것.
외부의 접근으로부터 안전하게 보호하기 위해 필요
외부와의 접속을 위한 일부분은 공개 노출 가능 => 인터페이스
클래스
객체 모양을 선언 한 틀(캡슐)
필드(멤버 변수)와 메소드(멤버 함수)로 구성
객체
클래스 모양대로 생성된 실체(인스턴스)
치환 시 객체 자체가 아닌, 객체의 레퍼런스(포인터)가 복사됨
ex. 붕어빵 만드는 틀 - 클래스
팥붕 / 슈붕 / 치즈붕 - 객체 1,2,3....
상속
서브 클래스(자식)가 슈퍼 클래스(부모)의 속성을 물려받고, 기능 확장 가능
다중상속 불가 (대신, 인터페이스 다중 상속 허용)
코드의 재사용
다형성
같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현
- 메소드 오버로딩 : 클래스 내에서 같은 이름이지만 다르게 작동하는 여러 메소드
- 메소드 오버라이딩 : 슈퍼 클래스 메소드를 서브 클래스마다 다르게 구현
자바의 클래스와 객체
class 키워드로 선언, {} 안에 모든 필드와 메소드 구현
class Circle { // 클래스 선언
int radius; // 반지름 필드
String name; // 이름 필드
public Circle() {} // 생성자
public double getArea() {
return 3.14*radius*radius;
}
}
public class CircleEx {
public static void main(String[] args) {
Circle pizza = new Circle(); // 객체 생성
pizza.radius = 10; // 클래스 필드에 접근하기
pizza.name = "알볼로 고구마 피자";
double area = pizza.getArea(); // 클래스 메소드에 접근하기
System.out.println(pizza.name + "의 면적은 " + area);
Circle donut = new Circle();
donut.radius = 5;
donut.name = "노티드 얼그레이";
area = donut.getArea();
System.out.print(donut.name + "의 면적은 " + area);
}
}
생성자
객체가 생성될 때 호출되는 객체 초기화 메소드
클래스 이름과 반드시 동일해야함
같은 이름으로 여러개 작성 가능 (오버로딩) => 자동으로 맞는 생성자로 호출
하나 이상 선언되어야 하고, 객체 당 한 번 호출
클래스에 생성자가 하나도 없다면, 컴파일러가 자동으로 생성해줌
반대로 클래스에 생성자가 하나라도 있다면, 기본 생성자가 자동으로 생기지 않음!
this
객체 자신을 가리키는 레퍼런스
this()
클래스 내의 다른 생성자 호출
생성자 내에서만 사용 가능
반드시 생성자 코드의 첫번째에 작성해야 함
public class BookEx {
String title;
String author;
void show() {
System.out.println(title + " " + author);
}
public BookEx() {
this("", ""); // 생성자 호출 this()
System.out.println("생성자 호출됨"); // 생성하자마자 호출!
}
public BookEx(String title) {
this(title, "작자미상");
}
public BookEx(String title, String author) {
this.title = title;
this.author = author;
}
public static void main(String[] args) {
BookEx damian = new BookEx("데미안", "헤르만 헤세");
BookEx hyyh = new BookEx("화양연화"); // 적절한 생성자로 찾아감
BookEx EmptyBook = new BookEx();
hyyh.show();
}
}
// 출력 : 생성자 호출됨. 화양연화 작자미상
'Language > JAVA' 카테고리의 다른 글
자바기반응용프로그래밍 - main() 메소드로 인자 전달 (0) | 2022.04.11 |
---|---|
자바기반응용프로그래밍 - 패키지, 접근 지정자, static, final (0) | 2022.04.10 |
자바기반응용프로그래밍 - 메소드, 레퍼런스, 오버로딩, 가비지 컬렉션 (0) | 2022.04.10 |
자바기반응용프로그래밍 - 연산자, 조건문 (0) | 2022.04.08 |
자바기반응용프로그래밍 - 기본구조, 식별자, 데이터타입, 스캐너 (0) | 2022.04.07 |