[JAVA] 7강 String & Exception & Collection Framwork

KDH59·2024년 1월 31일
0

[JAVA]

목록 보기
7/13

String & Exception

문자열

  • 프로그레밍에서 문자열을 다루는 것은 byte 와 char

  • 본래 문자열(String) 은 char의 배열(array)을 내장하고 있다.

    . 정직 데이터 타입이 아니였다

  • 자바에서는 문자열을 다루기 위한 String 이라는 class를 만들게 한다.

    String 의 사용법

  • String은 클래스이기 때문에 여러가지 기능들이 있다

  • 문자열의 공백을 없애거나, 다른 문자로 치환 할 수 있다.

    • 또한 string 이 char[] 와 같다는 점에 착안하여 배열 개념을 이용한 기능들도 있다

      코드리뷰

      intResult = 0;
      while(intResult > -1) { //
      intResult = str.indexOf("c",intResult);
      if (intResult > -1) {
      System.out.println("c의 위치 : " +intResult);
      intResult++;
      }

    intdexOf : 문자열에서 특정 부분 문자열의 위치를 찾기 위한 메서드
    이 메서드는 문자열 내에서 지정된 부분 문자열의 첫 번째 발견 위치를 반환하며, 해당 부분 문자열이 없으면 -1을 반환합니다.

    if문 : 주어진 조건이 참(True)인 경우에만 특정 코드 블록이 실행

코드리뷰 풀이

intResult 를 0으로 기준을 두고

While 문을 -1보다 int result 가 클때 int result의 값이 문자열 내 지정된 c를 반환하는 특정 부분 문자열의 위치를 찾기 위한 매서드 indexOf값 으로 지정한다

이후 c를 반환 받는 if문이 -1보다 intresult가 클때(주어진 조건이 참)는 c의 위치를 intResult로 반환
-1보다 작을때는 실행은 값이 도출해 낸다.

현재 index는 방금 찾은 문자열의 위치이므로, 다음 탐색을 위해 1을 증가시킨다.

이후 c를 반환 받는 if문이 c의 위치를 inrResult로 반환 , 값이 -1보다 intresult가 클때(주어진 조건이 참) 는 계속하여 반복 실행 하고 -1일때는(주어진 조건이 참이 아닐때) 값을 도출해낸다.

intdexOf : 문자열에서 특정 부분 문자열의 위치를 찾기 위한 메서드
이 메서드는 문자열 내에서 지정된 부분 문자열의 첫 번째 발견 위치를 반환하며, 해당 부분 문자열이 없으면 -1을 반환합니다.

if문 : 주어진 조건이 참(True)인 경우에만 특정 코드 블록이 실행

StirngBuffer 와 StiringBuilder

  • string 은 용량이 고정되기 때문에 문자열 추가 시 객체를 계속 생성 한다.
    string str = "문자열을"

    -> 이런 무분별한 객체의 남발을 방지하기 위해서 사용

  • StirngBuffer 와 StiringBuilder는 용량이 변화하므로 새로운 객체를 생성 하지 않는다

  • StirngBuffer 와 StiringBuilder 차이점

  • Buffersms 다수 유저 동시 접근을 허용 하지 않음

  • builder는 허용함
    노래방에 문을 열어놓고 사용하는거랑 닫아 놓고 사용한다는 예시

    Exception (02.01)

    에외와 에러의 차이

  • 에러(Error) : 문법이나 메모리 사용 문제로 실행에 문제가 생겨 발생하는 오류 (코딩잘못) 빨간줄

    문법적으로 잘못된 경우

  • 예외(Exception) : 사용자의 오 조작이나 외부 문제로 발생하는 오류 (이렇게 사용했을 경우 특정한 상황에 에러가 날 수 있다.)

    예외(Exception) 의 종류

  • 예외는 일반 예외와 실행 예외로 분리된다.

    일반 예외 :
    이대로 실행하면 문제 생길게 예상이 됨

    실행 예외 :
    실행해 봐야 한다. (직접 실행해 보고 처리 해야 한다)

    일반 예외

  • 일반 예외는 필요하다고 판단하면 자동으로 예외처리를 해준다
    그래서 우리는 주로 실행 예외를 신경쓰자

    실행 예외의 종류

  • NullpointException : 객체가 없는 상태에서 객체를 사용할경우

  • ArrayIndexOutodBoundException : 배열 인덱스 범위를 초과하여 사용할 경우

  • NumberFormatException : 숫자 변환 시 문자가 포함되어 있는 경우

  • ClassCastException : 매개 값으로 받은 타입의 종류를 알 수 없는 경우

    예외 처리(Handing)

    -Exception 은 불가피한 외부 문제로 발생하므로 프로그램이 정지 하지 않도록 해야 함
    -그래서 예외처리를 통해 exception 발생 시에도 프로그램이 정상 작동 하도록 함

    ※ 예외처리에는 두 가지 방법을 사용

  1. Try-catch

    • 문제 발생 시 스스로 해결
  2. throws
    해당 업무를 시킨 method 에 전가 한다.

    try-catch 사용법

    -try-catch try 영역 안에서 exception 발생 시 eatch 를 실행하는 구문
    -Finally는 exception 발생시에도 꼭 실해할 code를 작성해준다

    try 문제가 생길 것 같을 때 -> 예외발생 가능 코드

    catch 문제 해결 시 -> 예외 발생 시 실행 코드

    Finally 문제 발생 시에도 꼭 실행한다 -> 항상 실행

※ Exception 이 꼭 하나 발생하라는 법은 없다
-이 경우 Exception에 맞는 catch를 만들어 주거나 1.7JDK에서 지원하는 Multi eatch 사용
-> 여러 예외를 한번 처리 가능
-> 예외 별로 각기 다른 처리는 어렵다.

잘 사용 하진 않음

예외는 공통적으로 Exception을 상속 받음

-다형성(다양한 객체들을 동일한 인터페이스로 다룰수 있는 기능)을 사용한 Exception 처리 주로 사용
-> 때문에 모든 예외를 받아 내고 싶을 경우는 ※Exception 하나로 처리 가능하다

Throws

  • Throws 는 작업을 지시한 메서드 에게 처리를 넘기는 것이다.

  • main() 에서도 throws를 할 경우 JVM 에서 처리 하게 된다. ( 예외 내용 출력 );
    -> 안한 것과 다름이 없다.

  • System.out.println(e.toString()); -> 예외 발생에 대한 간단한 메세지를 알려줌

  • e.printStackTrace(); // 예외에 대한 상세 정보

    사용자 예외 (Custom Exception)

  • 우리는 기존 예외 이외에도 새로운 예외를 만들 수 있다
    -> 단. 하나의 규칙이 있다면 반드시 Exception (일반예외) | RuntimeException (실행예외) 클래스를 상속 받아야 한다.
    -> 또한 테스트를 위해서 강제로 특정 예외를 발생 시킬 수 있다.

    <요약>

  1. 예외란 사용자의 오 조작이나 외부 문제로 발생하는 오류를 말한다.
  2. 예외 발생 시 프로그램이 멈추지 않고 진핼 할 수 있도록 예외 처리
  3. Runtime Exception 은 실행해 봐야 알 수 있다. 실행 예외
  4. Exception 은 coding 중에 알 수 있다. 일반 예외
  5. 모든 exception 의 부모는 Exception class 이다. Try-catch, throw 기억 일반 예외, 실행 예외 기억

    Collection Framework

    • 자료구조 -> 형태, 변수 , 배열

      어떻게 생겨 먹었는가?

      변수
      배열

    Collection Framework 정의

    • Collection Framework 는 Collection interface 를 최상위 로 하는 자료구조 interface 이다.


  • 크게 list, set, map interface 로 나눌 수 있다.
    -> 각 interface 를 구현 받은 class 들의 사용법은 비슷하다.

※Arraylist

※HashMap

Collection Framework 장점

  • Collection Framework 다양한 자료 구조를 가지고 있다

  • 또한 초기 선언 시 크기를 지정하지 않아 유연한 사용이 가능하다.

    list 넣는대로 들어간다

    map 문자로 들어간다

    set 중복을 넣고 싶을 때

Collection Framework 특징

  • 데이터 추가, 삭제, 검색 방법은 거의 비슷하다.
    같은 인터페이스를 구현 받고 있기 때문에 사용방법이 비슷하다

    ※ 인터페이스 구현 시 장점은?
    -> 필수 method 를 강제 할 수 있다.

    <요약>

  1. Collection framework 자료구조 최상위 interface 이다.

  2. 크게 list, set, map interface 로 나눌 수 있다.

  3. 이들은 선언 시 크기를 지정하지 않는다.(크기가 거의 무한하다.)

  4. 각 interface 를 구현 받은 class 들의 사용법은 비슷하다.

List Collection

안에 있는 내용을 전부 보여준다.

Array List

  • Array List 는 index로 객체를 관리한다는 점에서는 array와 유사
  • 차이점은 array와 달리 index가 유연하다.
  • Array List 는 객체 삭제,추가 시 인덱스가 1씩 당겨지거나 미뤄지게 된다.
  • 때문에 비번한 객체의 추가,삭제가 일어날때 다소 무리(불리)가 간다.

※ <>를 제너릭 이라고 한다.
※ <>안에 데이터 타입을 넣어서, 해당 클래스 안에서 어떤 데이터를 사용하는지 명시 해 준다
※ 단. 데이터 타입은 반드시 클래스 형태로 들어가야한다. int(X), Integer(O)

★ 이런식으로도 선언이 된다 왜? 다형성 때문에

List<Integer> list2 = new ArrayList<Integer>();


크기는 length 가 아닌 size()로 확인 한다.
값을 가져 올때는 get(index)를 사용한다.

Vector

  • Vector 와 Array List 와의 차이점은 하나이다.
    ->바로 특정 Thread 가 접근 시 다른 Thread 가 접근 할 수 없다는 점 이다.
  • 쉽게 말해 누군가가 사용하고 있다면 다른 사람은 기다려야 한다는 것이다.

Linked List

  • 좌우 데이터의 주소를 기억하는 구조를 갖는다.
    -> 그래서 중간에 데이터가 추가 삭제 되는데 높은 효율
    ※ 단. 양 옆이 누군지 확인 하면서 알아야 되기 때문 데이터 추가 자체는 느리다.
  • Array List 와 Linked list의 속도 체크를 어떤 방식으로 할 것인가?

    a라는 b라는 친구 중에 달리기가 빠른친구 찾아

    한명씩 달리는데 시간을 어캐 체크 (1.타이머 2.도착한 시간 - 출발한 시간)

<요약>
  1. Array List 는 array 와 비슷하지만 훨씬 편리하다.

  2. 다만 중간 index 에 입력과 삭제가 잦은 경우 불리하다.

  3. Linked List 는 는 반대로 위 경우에 유리하다.

set Collection

※ set 은 중복을 허용하지 않고 순서도 없다.

※ 검색 할 수 없으며 하나씩 꺼내는 iterator를 제공

※ 향상된 for문을 통해서 더 쉽게 꺼내 올 수 있다.

hash set

  • set만의 iterator 기능을 알아보자
    ※ set의 기본 방식 쪼개서 꺼내온다 <정석적인 방법>
    -> iterator로 쪼개고 -> hasNext로 가져올 값이 있는지 확인하고 -> next로 하나씩 가져온다

질문지

-String 순수 데이터 타입이 아니다. 문자를 다룰때 쓰는 것

  1. 무얼 봤으때 class를 알아보는 이유
    앞 글자가 대문자일때

  2. 문자열을 생성할 때 다양한 방법으로 사용한데 무엇떄문에
    생성자 오버로드를 사용한다.

  3. 문자열 비교시 이퀄스를 사용하는 이유
    -각 각 다른 개체이기떄문에 이퀄스라는 매소드를 사용

  4. 예외와 오류의 정의

  5. 일반예외와 실행예외의 정의

  6. 실행예외의 발생하는 원인 4가지
    ArrtIndexOutofBoundsException
    NumberFormatException

  7. 예외가 발생 했을때 처리하기 위한 방법

  8. 예외처리의 두가지 차이점

  9. try에 어떤 내용이 들어가는지

  10. try - catch예외가 여러개가 발생 할때 어떻게 처리 하나

  11. Collection Framework 이란?

  12. interface를 상속 받은 인원들

  13. list들의 사용법이 비슷한 이유?

  14. Array List , Linked List 둘의 차이점

profile
[JAVA]

3개의 댓글

comment-user-thumbnail
2024년 1월 31일
  1. indexOf 오버로드 메서드 활용(코드리뷰)
    intResult = 0;
    while(intResult>-1){
    intResult = str.indexOf("c", intResult);
    if(intResult>-1) {
    System.out.println("c 의 위치 : "+intResult);
    intResult++;
    }
    }

intdexOf : 문자열에서 특정 부분 문자열의 위치를 찾기 위한 메서드
이 메서드는 문자열 내에서 지정된 부분 문자열의 첫 번째 발견 위치를 반환하며, 해당 부분 문자열이 없으면 -1을 반환합니다.

if문 : 주어진 조건이 참(True)인 경우에만 특정 코드 블록이 실행

intResult 를 0으로 기준을 두고

While 문을 -1보다 int result 가 클때 int result의 값이 문자열 내 지정된 c를 반환하는 특정 부분 문자열의 위치를 찾기 위한 매서드 indexOf값 으로 지정한다

이후 c를 반환 받는 if문이 -1보다 intresult가 클때(주어진 조건이 참)는 c의 위치를 intResult로 반환
-1보다 작을때는 실행은 값이 도출해 낸다.

현재 index는 방금 찾은 문자열의 위치이므로, 다음 탐색을 위해 1을 증가시킨다.

이후 c를 반환 받는 if문이 c의 위치를 inrResult로 반환 , 값이 -1보다 intresult가 클때(주어진 조건이 참) 는 계속하여 반복 실행 하고 -1일때는(주어진 조건이 참이 아닐때) 값을 도출해낸다.

// 요구사항 : 주어진 문자열 str에서 문자 'c'의 위치를 모두 출력하는 기능을 구현한다
// 자바의 indexOf 함수는 탐색하는 문자의 위치를 하나(맨처음)만 반환하기 때문에 모두 출력하는 기능을 구현해내야 한다
// 그래서 반복문안에 indexOf 함수를 넣어 모두 출력하는 기능을 구현했다

int index = 0;
// 문자열을 탐색할 시작 위치를 지정하는 변수이다
String str = "abcdefg".repeat(5);

while (index > -1) {
// 이 반복문은 문자열의 위치를 더이상 찾지 못하면 반복을 종료한다
index = str.indexOf("c", index);
// indexOf 함수는 찾을 문자와 찾을 시작 위치를 입력받아 찾은 문자의 위치를 반환한다
// 반환된 값을 기억하기 위해 index에 저장한다.

// 만약 문자를 더 이상 찾지 못해 index 값이 -1이라면,
// 다음 탐색을 위해 1을 증가되어 값이 0이 되어버린다
// 값이 0이 되어버리면 while 문이 무한반복이 되기에 if문을 사용해 반복문을 탈출한다
if (index == -1) {
break;
}

// 'c'를 찾은 위치를 출력한다.
System.out.println("c의 위치: " + index);
// 현재 index는 방금 찾은 문자열의 위치이므로, 다음 탐색을 위해 1을 증가시킨다.
index++;

답글 달기
comment-user-thumbnail
2024년 2월 1일

프로그래밍에서 문자열을 다루는 것은

  • Byte 와 char

본래 문자열은 무엇을 내장 하고 있나

  • char의 배열을 내장하고 잇다

String의 사용법

  • String은 클래스기 때문에 여러가지 기능들이 있다
    문자열의 공백을 없애거나. 다른 문자로 치환 할 수 있다.
    또한 char와 같다는 점에 착안 배열 개념을 이용한 기능들도 있다.

StringBuffer 와 StringBuilder을 사용 하는 이유

  • 용량이 변화 함으로 새로운 객체를 생성하지 않아 String의 무분별한 객체의 남발을 방지한다.

이 둘의 차이점
-다수 유저 동시 접근을 허용하는 buffer와 허용하지 않은 builder 의 차이점이 있다.

예외와 에러의 차이점

  • 에러는 문법이나 메모리 사용 문제로 실행의 문제가 생겨 발생하는 것
  • 예외는 사용자의 오 조작이나 외부 문제로 발생하는 오류

예외의 종류

  • 일반 예외와 실행 예외로 구분 되어 있다.
    일반 예외는 실행하면 문제 생길게 예상이 되는 예외이며
    실행 예외는 직접 실행해보고 처리 해야 되는 예외이다.

예외 처리의 키워드
-Handing

예외처리를 사용하는 이유

  • Exception 은 불가피한 외부 문제로 발생하므로 예외 처리를 통해 exception 발생 시에도 프로그램이 정상 작동 하도록 하기 위해

예외 처리의 두가지 방법과 의미

  • Try-catch 는 문제 발생 시 스스로 해결하며
    throw는 해당 업무를 시킨 method에 전가 한다.

두가지 방법의 처리 방법

Exception이 다중으로 발생할 경우 어떻게 진행 할 건가

  • 1.7JDK부터 지원하는 multi earch를 사용하거나
  • Exception은 다형성을 이용하여 해결 한다.
답글 달기
comment-user-thumbnail
2024년 2월 1일

질문지

-String 순수 데이터 타입이 아니다. 문자를 다룰때 쓰는 것

  • 무얼 봤으때 class로 알아보는 이유
    앞 글자가 대문자일때

  • 문자열을 생성할 때 다양한 방법으로 사용한데 무엇떄문에
    생성자 오버로드를 사용한다.

  • 문자열 비교시 이퀄스를 사용하는 이유
    -각 각 다른 개체이기떄문에 이퀄스라는 매소드를 사용

  • 예외와 오류의 정의

  • 일반예외와 실행예외의 정의

  • 실행예외의 발생하는 원인 4가지
    ArrtIndexOutofBoundsException
    NumberFormatException

  • 예외가 발생 했을때 처리하기 위한 방법

  • 예외처리의 두가지 차이점

  • try에 어떤 내용이 들어가는지

  • try - catch예외가 여러개가 발생 할때 어떻게 처리 하나

  • Collection Framework 이란?

  • interface를 상속 받은 인원들

  • list들의 사용법이 비슷한 이유?

  • Array List , Linked List 둘의 차이점

답글 달기

관련 채용 정보