드디어 코딩으로 갈음해서 챌린지 블로깅할 거리가 생겼다...(신난다!)
역시 자료구조의 첫걸음은 배열이다.
배열이란?
데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조이다.
처음에는 Java같은 언어들이 List 타입으로 배열 기능을 포함한 확장기능을 제공하는 줄 알았는데,
역시나 python도 기본적으로 비슷하다고 하더라.
어느 언어나 배열은 디폴트로 제공해준다.
같은 종류의 데이터를 효율적으로 관리하기
같은 종류의 데이터를 순차적으로 저장하기
빠른 접근
인덱스
다~ 기초부터 필요한 기능이다.
물론...
데이터 추가 및 삭제를 할때 전체 메모리 관리가 점점 골때리기 시작하고,
최대 길이를 미리 지정한다는 점으로 한계는 뚜렷하다.
(나도 Array.class 보단 그냥 List<T> 인터페이스에 담아서 리스트들 썼다)
아, kotlin 언어로 SpringBoot 쓸때는 restTemplate 부분에 뭔가 안맞는게 있어서
List<T>를 응답으로 받을때 Array<T>.toList()를 쓰기는 했었다.(primitive 구현형이라 그런감?)
그러므로 아주 안쓰지는 않는다. 프로그램 어딘가에서 계속 돈다.
그리고 또 하나로 강사님이 좋다는 느낌이 들었던게,
Primitive와 Wrapper 클래스에 대해 설명해 주시고,
Wrapper class를 쓰는 이유까지 설명해 주셨다는 점이다.
kotlin을 처음부터 쓰지 않는 이상, null 처리나 ArrayList같은 걸 왜쓰는지는 알고 넘어가야 한다.
(나도 좀 더 파고들어서 공부해야...)
간만에 Java식으로 코딩을 하면서 느꼈는데,
Stream이나 Lambda식을 사용하는데
'구차했다'
이래서 kotlin이 나왔나 싶어서 다시 자바로 적응하는데 시간 좀 걸릴 정도로.
그나마 선언식의 차이점을 강사님이 설명해 주실 때, 다시금 엄격한 타입을 적용하는 Java의 특성상
에러날 일은 적겠구나 하고 장단점을 다시 떠올리게 되었다.
그리고 소감은 다 적었으니,
오늘의 핵심 학습내용 Array의 구현체 중 하나인 ArrayList의 메소드를 종 정리하고 마치겠다.
ArrayList
List 자료형 중 가장 간단한 형태의 자료형인 ArrayList에 대해서 알아보자.
점프 투 자바List 자료형
List 자료형에는 ArrayList, Vector, LinkedList 등의 List 인터페이스를 구현한 자료형이 있다. 여기서 말하는 List 자료형은 인터페이스인데 인터페이스에 대해서는 뒤에서 자세히 다루도록 한다.
add
박찬호 선수가 총 3번의 투구를 138, 129, 142(km) 의 속도록 던졌다면 다음과 같이 코드를 작성할 수 있다.
import java.util.ArrayList;
public class Sample {
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
pitches.add("142");
}
}
※ ArrayList를 사용하기 위해서는 import java.util.ArrayList와 같이 ArrayList를 먼저 import해야 한다.
ArrayList 객체인 pitches에 add 라는 메소드를 이용하여 투구 스피드를 저장했다. 만약 첫번째 위치에 "133"이라는 투구 스피드를 삽입하고 싶다면 아래와 같이 삽입할 위치를 파라미터로 넘겨주어야 한다.
pitches.add(0, "133"); // 첫번째 위치에 133 삽입.
만약 2번 째 위치에 133을 삽일 할 경우에는 다음과 같이 코딩하면 된다.
pitches.add(1, "133");
점프 투 자바제네릭스
자바는 J2SE 5.0 버전 이후부터 ArrayList<String> pitches = new ArrayList<>(); 처럼 객체를 포함하는 자료형도 어떤 객체를 포함하는지에 대해서 명확하게 표현할 것을 권고하고 있다. 인텔리제이에서 위의 예제와 같이 제네릭스 없이 코딩하면 명확한 타입을 명시하라는 warning이 표시될 것이다. 이 부분에 대한 자세한 내용은 잠시 후에 자세하게 설명한다.
get
박찬호 선수의 2번째 투구 스피드를 출력하고 싶다면 다음과 같이 한다.
System.out.println(pitches.get(1));
ArrayList의 get 메소드를 이용하면 특정 인덱스의 값을 추출할 수 있다.
size
size 메소드는 ArrayList의 갯수를 리턴한다.
System.out.println(pitches.size());
위 코드를 실행하면 pitches에 담긴 갯수가 출력된다.
contains
contains 메소드는 리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴한다.
System.out.println(pitches.contains("142"));
pitches 객체는 142 값을 포함하고 있으므로 true가 출력된다.
remove
remove 메소드에는 2가지 방식이 있다. (이름은 같지만 입력파라미터가 다르다)
- remove(객체)
- remove(인덱스)
첫번째 remove(객체)의 경우는 리스트에서 객체에 해당되는 항목을 삭제하고 삭제한 결과(true, false)를 리턴한다.
System.out.println(pitches.remove("129"));
수행결과는 다음과 같다.
true
"129"라는 항목이 성공적으로 삭제되고 true를 리턴한다.
두 번째 remove(인덱스)의 경우는 해당 인덱스의 항목을 삭제하고 삭제된 항목을 리턴한다.
System.out.println(pitches.remove(0));
수행결과는 다음과 같다.
138
pitches의 첫번째 항목은 "138"이므로 "138"이 삭제된 후 "138"을 리턴한다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'자료구조' 카테고리의 다른 글
패캠챌린지 09일차 (0) | 2022.04.26 |
---|---|
패스트캠퍼스 캐시백 챌린지 08일 (0) | 2022.04.25 |
패스트캠퍼스 캐시백 챌린지 02일 (0) | 2022.04.19 |
패스트캠퍼스 캐시백 챌린지 01일 - intro 포함 (0) | 2022.04.18 |
패스트캠퍼스 캐시백 챌린지 -05일차 (0) | 2022.04.12 |