Full-Stack 개발자가 되려는 작은 개발자의 블로그
객체 지향 실습1 본문
객체
▶ 상태(State)는 데이터를 저장하는 필드(Field)라고 함.
▶ 필드는 고유값을 저장하는 필드와 기능을 처리하기 위해 필요한 가변값을 저장하는 필드가 있다.
객체의 종류
1. 완성품에 해당하는 객체 ▶ 프로그램
2. 부품에 해당하는 객체
3. 정보를 저장하는 객체
필드(변수)의 종류
▶ 고유값(변경되지 않는 값)
▶ 가변값(변경되는 값)
객체, 클래스, 인스턴스
▶ 싱테와 기능을 가지고 있는 고유 단위 ▶객체(Object)
▶ 자바에서 객체를 만들기 위한 설계도/틀 ▶클래스(Class)
▶ Class로 만든(new) 객체 ▶인스턴스(Instance)
객체 지향의 4대 특성
1. 캡슐화(정보은닉)
▶ 상태 + 기능 =객체
▶ 변수 + 메소드 = 클래스
▶ 메소드 : 가변값을 처리하는 기능을 제공
정보은닉을 위한 장치 접근 제어자
- 접근 제어자
*public : 접근 제한 없음
*default(기본) : 같은 패키지(폴더)에서는 제한 없음
*protected : 상속을 받을 경우 다른 패키지여도 접근 가능
*private : 접근 불가(자신의 클래스에서만 접근 가능)
- 기타 제어자(접근 제어자가 아닌 제어자)
*final(상수)
*abstract(추상화)
※ 클래스의 public은 파일 당 하나(main이 생기는 클래스)만 생긴다.
변수를 접근제어하고 메소드를 사용하면 좋은 점
2. 상속
▶ 부모로부터 어떤 [성질]을 물려 받는 것
▶ 기존의 클래스(부모 클래스)를 재상용해서 새로운 클래스를 작성하는 방법
▶ 기존 클래스 멤버 + 새로운 멤버 = 새로운 class
▶ 기존 클래스를 '부모', '조상' class
▶ 새 클래스를 '자식', '자손' class
※ 상속이 안되는 멤버 ▶ 생성자
상속의 장점
1. 클래스의 간결화 ▶ 중복 코드 작성이 불필요.
2. 클래스 관리 용이 ▶ 클래스를 계층적으로 분류 및 관리
3. 소프트웨어의 생산성이 향상됨. ▶ 클래스의 재사용성과 확장이 용이.
▶ 새로운 클래스의 작성에 속도 빠름
※ 부모 클래스(super class)의 모든 멤버는 자손 클래스에 포함된다.
클래스 간의 관계
1. 상속 관계 : is a
2. 포함 관계 : has a
▶ 자바에서 클래스의 상속은 단일 상속만 지원(다중 상속 불가)
▶ 여러 클래스를 통합 할 경우 주가되는 하나의 클래스를 상속받고 나머지 클래스는 포함관계로 활용.
▶ 다중 상속은 불가하지만, 다단 상속은 가능
▶ 모든 클래스는 하나의 조상을 갖는다. > Object 클래스
오버라이딩(Overriding)
- 부모 클래스의 메소드를 자손 클래스에서 새로 정의하는 것.
- 반환형, 이름, 매개변수는 동일하지만, 정의된 내용이 다름.
- 부모 클래스의 메소드가 자손 클래스에서 사용하기에 맞지 않을 때, 부모 클래스이 메소드를 덮어써서 새로 운 메소드로 다시 만드는 작업.
- 자손 클래스의 인스턴스에서는 부모 클래스의 메소드를 없는 것으로 처리(메소드가 없어지는 것은 아니며, 부모 클래스의 인스턴스에서는사용 가능함.)
- 부모 클래스의 모든 메소드를 재정의하는 것이 아니라 변경이 필요한 메소드만 재정의 함.
package package1;
public class A {
private int pri;
int def;
protected int pro;
public int pub;
}
package package1;
public class B extends A{
void set() {
// pri=1; // private 멤버는 자손 클래스에서 접근 불가!
def=2;
pro=3;
pub=4;
}
}
package package1;
public class D {
public void set() {
A a=new A();
// a.pri=100;
a.def=200;
a.pro=300;
a.pub=400;
}
}
//////////////////////////////////////다른 패키지///////////////////////////////////////////
package package2;
import package1.A;
public class C extends A{
void set() {
// pri=10; // private 멤버는 자손 클래스에서 접근 불가!
// def=20; // default 멤버는 다른 패키지 자손 클래스에서 접근 불가!
pro=30;
pub=40;
}
}
package package2;
import package1.A;
public class E {
public void set() {
A a=new A();
// a.pri=1000;
// a.def=2000;
// a.pro=3000; //상속의 경우에만 다른 패키지에서 접근 가능
a.pub=4000;
}
}
'강의 정리 > Java' 카테고리의 다른 글
가계부 프로그램 (0) | 2020.03.26 |
---|---|
객체 지향 실습3 (0) | 2020.03.19 |
Java 기초를 이용한 로또 프로그램/야구 게임 (0) | 2020.03.15 |
Java를 이용한 학생 관리 프로그램/가계부 프로그램 (0) | 2020.03.11 |
Java 기초 실습5 (0) | 2020.03.09 |