ArrayList
- 특징
- 연속적인 데이터의 리스트 (데이터는 연속적으로 리스트에 들어있어야 하며 중간에 빈공간이 있으면 안된다)
- ArrayList 클래스는 내부적으로 Object[] 배열을 이용하여 요소를 저장
- 배열을 이용하기 때문에 인덱스를 이용해 요소에 빠르게 접근할 수 있다.
- 크기가 고정되어있는 배열과 달리 데이터 적재량에 따라 가변적으로 공간을 늘리거나 줄인다.
- 그러나 배열 공간이 꽉 찰때 마다 배열을 copy하는 방식으로 늘리므로 이 과정에서 지연이 발생하게 된다.
- 데이터를 리스트 중간에 삽입/삭제 할 경우, 중간에 빈 공간이 생기지 않도록 요소들의 위치를 앞뒤로 자동으로 이동시키기 때문에 삽입/삭제 동작은 느리다. 따라서 조회를 많이 하는 경우에 사용하는 것이 좋다
import java.util.ArrayList;
import java.util.List;
class Main2 {
public static void main(String[] args) {
v1(); // 기존에 사용하던 배열.
v2();
v3();
}
static void v3() {
System.out.println("==v3==");
List<Article> articles = new ArrayList<>();// <>안에는 변수 타입을 지정함.
articles.add(new Article());
articles.add(new Article());
articles.add(new Article());
for (int i = 0; i < articles.size(); i++) {
Article article = articles.get(i);
System.out.println(article.id);
}
}
static void v2() {
System.out.println("==v2==");
ArrayList articles = new ArrayList();
articles.add(new Article());
articles.add(new Article());
articles.add(new Article());
for (int i = 0; i < articles.size(); i++) {
Article article = (Article) articles.get(i);
System.out.println(article.id);
}
}
static void v1(){
System.out.println("==v1==");
Article[] articles = new Article[100];
int articleSize = 0;
articles[0] = new Article();
articleSize++;
articles[1] = new Article();
articleSize++;
articles[2] = new Article();
articleSize++;
for (int i = 0; i < articleSize; i++) {
System.out.println(articles[i].id);
}
}
}
class Article {
static int lastId; //스태틱 변수는 공공재다.
int id;
String regDate;
static {
lastId = 0;
}
Article() {
this( lastId+ 1, "2024-12-12 12:12:12");
lastId++;
}
Article(int id, String regDate) {
this.id = id;
this.regDate = regDate;
}
}
getter, setter 개념
private 내부에서는 접근이 가능하나, 외부에서는 접근이 불가능.
class Main2 {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.setId(20);
// a사람.id = 20; ->private 접근 불가능
//System.out.println("번호 : " + a사람.id); ->private 접근 불가능
System.out.println("번호 : " + a사람.getId()); // getter와 setter을 사용해 접근후 출력.
}
}
class 사람 {
private int id;
public int getId() { // getter
return this.id;
}
public void setId(int id) { // setter
this.id = id;
}
}
경유하여 값을 주고 값을 가져오는 개념 객체 내부 속성에 직접 접근하지 않아 객체의 정보 은닉을 가능하게 해주어 보안을 강화할 수 있고, 코드의 안전성과 유지보수성을 높일 수 있다는 장점이 있다. 또한 옳지않은 값을 넣으려고 할때 이를 미연에 방지할 수 있다.
catch 예외처리 Exception
class Main2 {
public static void main(String[] args) {
try {
int rs = 계산기.나누다(15, 0);
System.out.println(rs);
} catch (AbstractMethodError e) {
System.out.println("0으로 못나눠");
} catch (Exception e) {
System.out.println("알 수 없는 문제");
}
}
}
class 계산기 {
static int 나누다(int a, int b) throws AbstractMethodError {
int rs = 0;
rs = a / b;
return rs;
}
}
StringBuilder 설명을 위해 equals 까지 동원하신듯.
String 불변성.
StringBuilder
문자열의 변경이 가능한 가변 클래스
??.equals() => 동등성 판단.
class Main {
public static void main(String[] args) {
char c1 = 'a';'
char c2 = 'a';'
System.out.println(c1 == c2); // true
// String 은 char의 순서있는 조합이다.
String s1 = "하하";
String s2 = "하";
s2 += "하";
System.out.println(s1 == s2); // false 객체에 있는 리모컨을 비교한다.(주소값을 비교한다.)
System.out.println(s1.equals(s2)); // true
}
}
StringBuilder 사용
StringBuilder sb = new StringBuilder();
sb.append("*");
sb.append("*");
sb.append("*");// 같은 공간(힙)에서 하나씩 추가할 수 있음. string은 불변성 때문에 새로운 공간을 써야해서 메모리 낭비가 심함.
Object Class, toString
class Main2 {
public static void main(String[] args) {
사람 a사람 = new 사람("김철수", 22);
System.out.println(a사람);
}
}
class 사람 { // extends Object
String name;
int age;
@Override
public String toString() {
return "사람{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public 사람(String name, int age) {
this.name = name;
this.age = age;
}
}
HashMap => ArrayList랑 비슷하나 매개변수를 두개 갖는다. (key, value)
ArrayList 넣을 때는 쉽지만 가져올 때 귀찮다.
HashMap 넣을 때는 귀찮지만 가져올 때 좋다.
HashMap<String, Integer> map = new HashMap<>();
map.put("영수나이", 1);
System.out.println(map.get("영수나이"));
오늘 프로그래머스 자바 기초 문제 풀다가 나의 능지가 처참하단걸 느꼈다. 주말에 한번 복습 제대로 해야될 것 같다..
강의 끝나고 전공생 레슨하고 오느라 평소보다 업로드가 늦었다. 아마 목금은 늦거나 12시가 넘어서 업로드 되지 않을까 싶다.
'Coding History' 카테고리의 다른 글
국비 지원 IT(웹앱개발) 취업반 강의 13일차 (0) | 2024.06.24 |
---|---|
국비 지원 IT(웹앱개발) 취업반 강의 12일차 (0) | 2024.06.21 |
국비 지원 IT(웹앱개발) 취업반 강의 10일차 (0) | 2024.06.19 |
국비 지원 IT(웹앱개발) 취업반 강의 9일차 (0) | 2024.06.18 |
2024. 06. 17 문제 풀이 (0) | 2024.06.18 |