My footsteps
컬렉션 / 2 + 추상화 본문
< 예외처리 >
- 예외를 강요하지 않는 방법 (Runtime)
- 예외에 추가적인 메세지를 달고 싶을때 하는 방법
public static void main(String[] args) throws 천을넘은예외, 음수가되는예외{
int result = 0;
result = Calculator.add(3000, 5);
package ex1;
public class 천을넘은예외 extends RuntimeException {
public String getMessage() {
return "덧셈결과가 1000을 넘었습니다.";
}
}
< 컬렉션 >
- 컬렉션은 오브젝트로부터 형변환 할수있는 애들만 들어올수 있음
- 어떠한 형식으로도 변환할수 있기 때문에 템플릿이라는 단어를 쓰지 않고, 제네릭(;무엇이든 될수있는)이라는 단어를 쓴다
GList<Integer> students = new GList<>();
//인티저 형만 담을수 있는 상태
- int 형은 올수없다. "클래스"형(래퍼클래스)만 올수있다
GList<String> names = new GList<>();
names.add("김철수");
System.out.println(names.get(0).length());
//세글자의 길이인 3이 나옴
< 추상화 >
- 상속이란 : 다른 클래스를 '틀'로 사용하는것
- 좋은 코드란 쉽게 고칠수있고,찾을수 있는
- 추상화는 '객체단위(=객체지향)'적인 것이다
- 공통되는 부분이 있는 것을 공통분모라 하는데 이런 공통분모의 모음을 '추상화' 라고 한다
- 집중화를 하면 코드 수정에 매우 용이하다 일괄적으로 관리하기에도 편함
Shape[] shapes = new Shape[3];
shapes[0] = rect;
shapes[1] = circle;
shapes[2] = line;
//rect,circle,line의 공통된 속성을 shape가 갖고 있어서
//shape에 그 공통된 속성과 함수들 다 넣고 저런식으로 대입할수가 있다
for(Shape shape : shapes) {
shape.moveTo(20, 30);
}
//이렇게 해서 shape안에 있는 모든 도형객체를 한방에 움직이게 할수도 있다
- 객체화 못하게 하는 키워드 abstract
public abstract class Shape
- abstract 키워드를 뺐다고 추상화가 아닌건 아니다
- abstract는 오직 '자바'에만 국한된거다
- 오버라이드 단축키 : ct+space
@Override
public void draw() {
System.out.println("rect");
System.out.println("draw");
}
- abstract 함수를 갖고 있다면 상단부에서 절대 abstract를 빼면 안된다 (abstract함수 안갖고 잇으면 빼도 되나봄)
public abstract class Shape {
//공통분모 클래스
- 이런식으로 자식 클래스에게 역할을 분담....
package ex07.abst;
public class Rect extends Shape{
private int w;
private int h;
@Override
public void drawSpecific() {
System.out.println("rect");
}
}
package ex07.abst;
public class Circle extends Shape{
private int radius;
// @Override
// public void draw() {
// System.out.println("Circle");
// System.out.println("draw");
// }
public void drawSpecific() {
System.out.println("circle");
}
}
package ex07.abst;
public abstract class Shape {
//공통분모 클래스
private int x;
private int y;
public void moveTo(int x,int y) {
this.x = x;
this.y = y;
System.out.printf("(%d,%d)로 이동\n",x,y);
}
public void draw() {
//이건 네가 책임져!
drawSpecific();
System.out.println("draw");
}
public abstract void drawSpecific();
}
package ex07.abst;
public class Line extends Shape{
// @Override
// public void draw(){
// System.out.println("Line");
// System.out.println("draw");
// }
public void drawSpecific() {
System.out.println("line");
}
}
- 추상클래스가 객체가 되면 안되는 이유 : 만들다 만거라서(abstract : 미완성)
- 그래서 미완성인 상태에서 노출할때는 protected 를 붙여준다
https://kephilab.tistory.com/58
3. Java 자바 - protected 접근 제한자
protected 접근 제한자 (상속과 관련이 있다.) protected 는 public 과 default 접근 제한의 중간쯤에 해당된다. 같은 패키지에서는 default 와 같이 접근 제한이 없지만, 다른 패키지에서는 자식 클래스만 접
kephilab.tistory.com
- 원래 미완성일때는 안보이는데, 같은 패키지면 노출이 가능하다
'국비수업 > 수업정리' 카테고리의 다른 글
Stream Api + 컬렉션 / 3 (0) | 2023.05.18 |
---|---|
인터페이스 / 다형성 / 익명클래스 (0) | 2023.05.17 |
예외 처리 / 컬렉션 (0) | 2023.05.15 |
서블릿 / 4 (0) | 2023.05.12 |
서블릿 / 3 (0) | 2023.05.11 |