04.20 자바 수업 9일차
야심차게 블로그 시작해놓고 개념이 조금 어려워지고 많아지니까 임시저장 글만 늘어났다.
학원 단톡에 수강생분이 블로그를 공유해주셔서 블로그를 구경했는데 정리도 깔끔하시고,, 개념만 적기보단 사담도 적어놓으셨길래 나도 적어보았다.
블로그를 개념 정리와 기록용으로만 생각해서 그런지 제대로 정리가 되지 않으면 글도 안올리고 임시저장만 하기를 벌써 4일째인데 완벽하게 하려하지 말고 어렵게 생각하지 말고 일단 그 날 배운 것은 그 날 올리기!를 목표로 다시 심기일전해봐야겠다!
그리고 오늘은 개념 이해 아주 잘한 것 같아,, 뿌듯 ㅎ
문자열
요약
- String은 char 배열을 다루기 위한 class 이다.
- String에는 문자열을 다룰 수 있는 여러 메서드 들이 존재한다.
- String에서 문자열을 추가할 때마다 객체의 개수는 늘어난다.
- 객체의 남발을 막기 위해 StringBuffer와 StringBuilder가 생겼다.
- StringBuffer와 StringBuilder은 객체를 추가하면 객체의 크기는 커지지만 개수는 늘어나지 않고 하나의 객체이다.
- StringBuffer와 StringBuilder의 차이점은 다수유저의 동시 접근을 허용하느냐(StringBuilder) 하지않느냐(StringBuffer) 이다.
String은 char 배열을 다루기 위한 class 이다.
String이 char[] 와 같다는 것.
String에는 문자열을 다룰 수 있는 여러 메서드 들이 존재한다.
자바에서 문자열을 다루기 위해 String 이라는 클래스를 만든 것이므로 String의 다양한 메서드들을 활용할 수 있다.
- .charAt(인덱스) => 인덱스 3의 값을 뽑아내는 것이므로 str에서 d가 출력된다.
- .substring(시작인덱스,끝인덱스) => 시작 인덱스 부터 끝 인덱스의 앞 인덱스까지!! ** 주의해야한다. 1부터 5로 써놓으면 4번 인덱스의 값까지만 출력된다.
- .toCharArray() => 문자열을 배열로 변환
- .split(기준) : 기준으로 설정한 특정 문자에서 나눈다. 공백으로 설정할 수도 있다.
결과값은
- .indexOf(특정문자(열)) / .lastIndexOf(특정문자(열)) : 특정문자가 있는 인덱스를 출력해준다. 단점은 앞/뒤에서부터 딱 하나만 찾아준다.
어떻게 모든 "c"를 찾을 수 있을까?
=> indexOf로 c를 찾으면 해당 인덱스+1을 split에 넣어주어 잘라내고 남은 배열에서 indexOf로 c를 찾는 방법을 생각
=> 문제점은 인덱스값이 변동이 있다는 점!
여기서 내가 생각해내지 못한 것은 문자열은 문자들의 배열이라는 것이다.
배열은 인덱스로 하나씩 뽑아올 수 있다!
그러면 하나씩 뽑아와서 해당 인덱스의 값이 찾던 값이라면 인덱스를 출력하고 배열이 끝날 때까지 이 과정을 반복하면 된다.
자바에서 기본으로 제공하는 메서드를 활용하는 방법도 있다.
- 앞에서 봤던 .indexOf라는 메서드는 찾으려는 값의 인덱스를 알려주는데 찾는 값이 배열에 존재하지 않으면 -1을 반환한다.
if문이 없다면 어떻게 될지 궁금해서 해봤는데
무한반복..
String에서 문자열을 추가할 때마다 객체의 개수는 늘어난다.
객체의 남발을 막기 위해 StringBuffer와 StringBuilder가 생겼다.
StringBuffer와 StringBuilder은 객체를 추가하면 객체의 크기는 커지지만 개수는 늘어나지 않고 하나의 객체이다.
StringBuffer와 StringBuilder의 차이점은 다수유저의 동시 접근을 허용하느냐(StringBuilder) 하지않느냐(StringBuffer) 이다.
- String
- StringBuffer와 StringBuilder
다수유저 동시 접근은 말그대로 내가 객체를 사용할 때 다른 사람들도 접근하는 것을 허락할 것인지 나만 사용할 것인지 여부이다. 나중에 더 자세히 배운다고 한다.
Generic (제너릭)
요약
- Generic은 객체화 시 객체에 들어갈 타입을 지정해준다.
- Generic을 사용하면 데이터를 넣고 뺄 때 확인 작업(Casting)을 할 필요가 없다.
- Generic으로 지정하는 타입은 class도 가능하다.
- 지정할 타입이 여러개인 경우 class 타입으로 지정해주는 것이 유용하다.
Generic은 객체화 시 객체에 들어갈 타입을 지정해준다.
Generic을 사용하면 데이터를 넣고 뺄 때 확인 작업을 할 필요가 없다.
- 택배를 받았을 때 송장이 있다면 택배를 열어보지 않아도 어디서 어떤 물건을 보낸 건지 알 수 있지만 송장이 없다면 택배를 열어보아야 안에 있는 물품이 무엇인지 알 수 있다. 송장과 같은 역할을 해주는 것이 Generic이다.
Generic 사용법은 Class나 interface 선언 시 <T>를 추가해주면 된다.
T는 Type Parameter의 약어일 뿐 꼭 T를 사용할 필요는 없다.
여러개의 Type을 사용하려면 콤마로 구분해주면 된다. <A,B,C,D> 이런 식.
Generic으로 지정하는 타입은 class도 가능하다.
지정할 타입이 여러개인 경우 class 타입으로 지정해주는 것이 유용하다.
여러개의 Type을 사용하는 경우(왼쪽) 와 class 타입으로 지정해서 사용해주는 경우 (오른쪽)
info 클래스를 타입으로 지정해주면 만들어야 할 파일은 3개가 되지만 타입들을 info안에서 관리하기 때문에 더 편리하다.
Main.java에서 사용할 때도 코드가 더 보기쉽고 데이터 타입을 헷갈리지 않고 사용할 수 있다.
클래스 타입으로 사용할 때의 장점을 이해하기 쉬운 그림이 있다.
큰 상자(Info) 안에 작은 상자(변수)들을 넣으면 꺼낼 때와 넣을 때 큰 상자에서 작은 상자들을 꺼내야하는 과정을 거쳐야하지만 들고 옮기기(관리)에는 큰 상자 하나를 드는 것이 작은 상자들을 쌓아 옮기는 것보다 쉽다.
오늘 처음 코드리뷰를 해봤는데 머리로 이해하고 있는 것을 주석으로 설명하기가 참 어려웠다. 또 해당 코드를 쓴 이유를 하나하나 뜯어보게 되니 모르고 있던 부분도 잡아낼 수 있었다.
아직 명확하게 설명하지 못하는 부분은 if문의 조건에 왜 intResult > -1이 들어가는지!!!! 이해는 하는데 명확하게 말과 글로 풀어내기가 쉽지 않다.
2022-04-20
'Back-End > JAVA' 카테고리의 다른 글
JAVA, SPRING 기술 면접 정리 (0) | 2022.09.06 |
---|---|
자바] 조건문-switch, 반복문, 배열, 향상된 for문 (0) | 2022.04.12 |
STS /이클립스] 사용법 (계속 추가) (0) | 2022.04.08 |
[자바] JAVA, STS 설치 (0) | 2022.04.07 |
[자바] 자바 기초 개념 (0) | 2022.04.07 |