- 학습 목표 달성 확인 목록
- [] 추상화에 대해 설명할 수 있는가?
컴퓨터로 다뤄야 할 사람,사물,개념을 클래스로 정의하는것(클래스 문법을 이용하여 데이터와 메서드로 정리하는 것)
- [] 캡슐화가 무엇인지 설명할 수 있는가?
잘못된 사용을 방지하는 문법이다
클래스를 만든 사람의 의도와 다르게 사용하는 것을 방지한다는 것이다.
- [] 캡슐화를 보조하는 접근 제어 문법을 이해하는가?
public class Capshul {
private int result;//private 접근제한자를 사용하여 다이렉트로 접근할 수 없다.
int plus(int value) {
return this.result += value;
}
}
public class Cap {
public static void main(String[] args) {
Capshul c = new Capshul();
// c.result = 10;//에러-result 필드를 private로 캡술화하였기 때문에 인스턴스화해도 해당 필드들 다이렉트로 접근한 수 없다.
System.out.println(c.plus(20));//해당 코드처럼 plus 메서드를 이용해서 result값을 구한다
System.out.println(c.plus(100));
}
}
//결과
20
120
getter/setter를 이용한 접근
public class Capshul {
private int result;
public int getResult() {//값을 가져오는 메서드
return result;
}
public int setResult(int value) {//값을 입력하는 메서드
return this.result += value;
}
}
public class Cap {
public static void main(String[] args) {
Capshul c = new Capshul();
System.out.println(c.getResult());
c.setResult(10);
System.out.println(c.getResult());
c.setResult(200);
System.out.println(c.getResult());
}
}
//결과
0
10
210
- [] private/(default)/projected/public 의 접근 범위를 설명할 수 있는가?
private:같은 클래스의 멤버
(default):같은 패키지(폴더)에 있는 객체들만 허용
protected:같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
public:완전 공개
- [] getter와 setter를 정의하고 사용할 수 있는가?
클래스의 특성중 정보 은닉을 가장 잘보여주는 메서드이다.
보통 클래스의 필드변수는 private로 접근제한자를 설정한 후 getter/setter를 통해 필드변수의 값을 변경,호출하게된다.
예제는 위에 보면 된다.
- [] 필드(field)와 프로퍼티(property)의 차이점을 아는가?
위의 예제를 보면된다.
public class Capshul {
private int result;//필드
public int getResult() {//값을 가져오는 메서드->프로퍼티
return result;
}
public int setResult(int value) {//값을 입력하는 메서드->프로퍼티
return this.result += value;
}
}
- [] 상속의 의미와 이점을 이해하는가?
기존 코드를 재사용할수 있다는 큰 장점이 있으며
기존 코드를 손대지않고 거기서 기능을 추가 할 수 있다.
현실에서 보자면 부모에게 상속받은 재산을 그대로 쓸수 있다는 점이다
(자바에서보자면 바로 돈을 받는것이 아니라 통장의 계좌번호를 받아서 돈을 체크카드로 쓸 수 있는 개념으로 보면 된다.)
즉 상속받은 클래스의 멤버들을 그대로 받는것이 아닌 참고한다는 것이라는 점이다! 중요!!!
- [] 다형성의 3대 유형을 설명할 수 있는가?
다형적 변수:상속관계에서만 허용되며 자식 클래스와 오버라이딩된 메서드만 접근할 수 있다.
//사진 첨부예정//
오버라이딩:상속받은 메서드를 서브 클래스 역할에 맞춰 재정의 하는 문법
오버로딩:파라미터 타입이나 개수가 다르더라도 같은 기능을 수행한다면 같은 이름을 부여함으로써
메서드 사용에 일관성을 주는 문법
- [] 다형적 변수를 다룰 수 있는가?
//코드 첨부예정//
- [] 오버로딩의 의미와 그 이점을 설명할 수있는가?
오버로딩:파라미터 타입이나 개수가 다르더라도 같은 기능을 수행한다면 같은 이름을 부여함으로써
메서드 사용에 일관성을 주는 문법
이점으로는 같은 기능을 하는 메서드의 이름을 하나로 정의함으로써 개발자가 기억하기 쉽다.또한 메서드의 이름을 절약할 수 있다.
public class overroding {
private double result;
public void getResult() {//result값을 호출하는 메서드
System.out.println(result);
}
void plus(int v1) {
this.result += v1;
}
void plus(int v1, double v2) {//오버라이딩
this.result += v1;
this.result += v2;
}
}
public class Over {
public static void main(String[] args) {
overroding o = new overroding();
o.getResult();
o.plus(10);
o.getResult();
o.plus(10, 15.5);
o.getResult();
}
}
- [] 오버라이딩이 의미와 그 이점을 설명할 수 있는가?
오버라이딩:상속받은 메서드를 서브 클래스 역할에 맞춰 재정의 하는 문법
이점으로는 같은이름으로 body(구현부)를 변경하여 내용을 수정하여 사용함을 통해 프로그램의 리소스를 줄여준다.
class Parent {
void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }
}
class Child extends Parent {
void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }
}
public class Inheritance05 {
public static void main(String[] args) {
Parent pa = new Parent();
pa.display();
Child ch = new Child();
ch.display();
Parent pc = new Child();
pc.display(); // Child cp = new Parent();
}
}
//결과
부모 클래스의 display() 메소드입니다.
자식 클래스의 display() 메소드입니다.
자식 클래스의 display() 메소드입니다.