My footsteps

컬렉션 / 2 + 추상화 본문

국비수업/수업정리

컬렉션 / 2 + 추상화

밀김 2023. 5. 16. 10:14
728x90

 

 

 

 

 

 

 

 

 

 

 

< 예외처리 >

 

 

 

- 예외를 강요하지 않는 방법 (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을 넘었습니다.";
	}
}

 

 

 

 


 

 

 

 

 

 

< 컬렉션 >

 

 

- 컬렉션은 오브젝트로부터 형변환 할수있는 애들만 들어올수 있음

 

 

이건 c++이 갖고있는 템플릿 클래스

 

 

 

자바는 이렇게 오브젝트로 '변환'을 해줌

 

 

 

 

 

- 어떠한 형식으로도 변환할수 있기 때문에 템플릿이라는 단어를 쓰지 않고, 제네릭(;무엇이든 될수있는)이라는 단어를 쓴다

 

 

 

 

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

 

 

 

 

최상위 클래스 shape에 draw 함수 만들고 아무것도 안쓴다음에,아래 클래스들에서 draw 함수 안에 아래 오버라이드 코드 작성

 

	@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

 

 

 

- 원래 미완성일때는 안보이는데, 같은 패키지면 노출이 가능하다

 

 

 

 

 

 

 

728x90

'국비수업 > 수업정리' 카테고리의 다른 글

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