JAVA/강의

JAVA 14일차 강의 -OOP 2부 : 예외처리와 컬렉션 프레임워크

record2080 2025. 2. 1. 16:15

13일차는 발표;;

<언어>

변수, 자료형, 연산자, 디버깅표, 제어문, 배열, 함수

<OOP 1부>

클래스, 객체, 생성자, 오버로딩, this, 멤버변수, 메서드, 캡슐화, private, g/s, 상속, 오브젝트, 오버라이딩, 슈퍼,

동적바인딩, 다형성, abstract, 인터페이스(메서드 재정의 강제)

이런 정의들에 대해서

1. 말로 설명할 수 있는지

2. 코드로 쓸 수 있는지 

</OOP 1부의 요점>

 

<OOP 2부>

예외처리 - 자바에서만 쓰는게 아님

예외 발생시 해야 할 것!!

1. 캡쳐

2. 에러원인 작성

3. 해결방안 작성

 

▶ 그렇다면 예외 또는 오류란??

: 코드가 예상과 다른 라인에서 멈춰버리는 현상

: 프로그램이 갑자기 종료되버리는 현상

그러면 사용자 경험이 저하됨

▶예외처리

오류를 해결하는 것이 아니다.

프로그램을 정상적으로 종료 or 프로그램을 끝까지 사용할 수 있게 코딩하는 것

▶try-chtch-finally

public class Practice {
	public static void main(String[] args) {

		int a=10;
		int b=2;

		try {
			// 예외가 발생할수있는 코드
			System.out.println("로그 1");
			System.out.println(a/b); // 예외가 발생될 때 즉시 이동
			System.out.println("로그 2");
		}
		catch(ArithmeticException e) {
			// 예외발생시 수행될 코드
			System.out.println("0으로는 나누기 연산을 수행할 수 없습니다.");
			System.out.println("0");
		}
		finally {
			// 예외 발생여부와 무관하게 항상 수행되는 코드
			System.out.println("항상 출력되는 코드");
		}
		/*
		if(b!=0) {
			System.out.println(a/b);
		}
		else {
			System.out.println("0으로는 나누기 연산을 수행할 수 없습니다.");
			System.out.println("0");
		}
		*/

	}
}

 

catch를 사용하는 법 - 예외가 발생할 수 있는 코드를 블럭잡고 오른쪽마우스클릭- surrounding with- trycatch문

catch문은 부모클래스 아래에 있어야 한다.

catch(ArithmeticException e) { System.out.println("0으로는 나누기 연산을 수행할수없습니다."); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("해당 인덱스는 없습니다."); }
catch(Exception e) { e.printStackTrace(); } 모든예외

 

버퍼비우기 (개인적으로 중요하다고 생각) : 콘솔을 안보고 프로그램을 만들경우, 잊어버릴 확률높음..잊지말자

sc.nextline(); //한줄을 먹음?!으로써 입력되어 있었을지도 모를 버퍼를 비워준다

 

▶예외처리 심화

-예외 일부러 발생시키기

-예외 만들기

-예외 미루기 ★

: 실제로 예외가 발생한 곳에서 예외를 처리하는 것은 아니다

해당함수(메서드, 객체)를 호출한 곳에서 예외를 처리하는 것이다

public class Practice {
	public static int kim(int index) throws Exception { // 예외 처리를 "강제"하는 키워드
		int[] datas= {11,22,33};
		return datas[index];
	}
	
	public static void main(String[] args) {
		int num=-1;
		try {
			num = kim(3); // 반드시 예외 처리를 해야만함!!!!!
		} catch (Exception e) {
			System.out.println("정확한 인덱스로 호출해야 함!");
		} 
		System.out.println(num);
		
		
		
		for(int i=0;i<10;i++) {
			System.out.println("*");
			try {
				Thread.sleep(1000); // 1000당 1초
				// .sleep() 가 throws 를 작성해둔 상황!!!!!
			} catch (InterruptedException e) {
				e.printStackTrace();
			} 
		}	
	}
}

<컬렉션 프레임워크> : 일종의 틀 : list, 집합, 맵 등등

예) 스프링 프레임워크 , 마이바티스프레임워크 등등

포인트) 언제, 어떻게 사용해야 하는지와 용법과 문법을 알아야 한다

 

▶장점

1. 개발자가 개발에 활용하기가 용이

2. 프로그램 동작 중에도 메모리(크기)를 늘리거나 줄일 수 있음

>> 배열의 3요소 중의 하나인 크기를 정해두지 않아도(몰라도) 쓸 수 있음

1.오버로딩
add("apple")
add("작은티모")
add(0,11)
clear() : 비워준다
contains(31); 31번 있니?
get set(0,123); : 0번 인덱스 123으로 바꿈
isEmpty()
size (): 전체크기를 물어봄
remove(0) : 해당인덱스 제거

 

자료형을 절대 섞어쓰지 않는다
ArrayList<Integer> datas=new ArrayList<>();
컬레션프레임워크는 자바기반이기 때문에 integer , String을 씀.

 

<> : genelic

: 저장할 데이터의 타입을 "강제" genelic 제네릭필수!!!!!!!
  (자료형과 클래스는 같은말)

Iterator 복사체 : 컬렉션 또는 데이터 구조를 순차적으로 탐색할수 있게 해주는 객체

이터레이터를 사용하면 컬렉션의 내부 구현을 신경쓰지 않고 데이터를 하나씩 가져올 수 있음

hasNext() /next() : 이터레이터에 주로 사용하는 메서드

이터레이터가 더 이상 순회할 요소가 있는지 확인하는 기능

=forEach로도 구현가능

자바코드참고

 


▶HashSet : 집합

1. 중복을 허용하지 않는다

2. 인덱스 개념이 없어 순서가 없다

import java.util.HashSet; //자바에서 제공하는 것이 아닌 import된다는 것
import java.util.Random;
import java.util.Set;

public class Practice {
	public static void main(String[] args) {

		Set<Integer> set=new HashSet<Integer>();

		Random rand=new Random();
		while(true) {
			int randNum=rand.nextInt(10);
			set.add(randNum);
			if(set.size()>=5) {
				break;
			}
		}
		System.out.println(set);
	}
}

 

▶맵

: index개념은 없는 대신 키값으로 검색 (인덱스를 지정하는 느낌??)
  key와 value 값이 한쌍으로 되어 있어서 이 한 쌍이 하나의 데이터다
  key:value
 키값은 중복되어서는 안된다 (PK)
 value는 중복되도 된다(동명이인)
 set=replace
 add=put

 

import java.util.HashMap;
import java.util.Map;

public class Practice {
	public static void main(String[] args) {

		Map<Integer,String> map=new HashMap<>();
		map.put(101, "t사과");
	}
}