Coding History

국비 지원 IT(웹앱개발) 취업반 강의 11일차

BlackBirdIT 2024. 6. 20. 21:13

ArrayList

  • 특징
  1. 연속적인 데이터의 리스트 (데이터는 연속적으로 리스트에 들어있어야 하며 중간에 빈공간이 있으면 안된다)
  2. ArrayList 클래스는 내부적으로 Object[] 배열을 이용하여 요소를 저장
  3. 배열을 이용하기 때문에 인덱스를 이용해 요소에 빠르게 접근할 수 있다.
  4. 크기가 고정되어있는 배열과 달리 데이터 적재량에 따라 가변적으로 공간을 늘리거나 줄인다.
  5. 그러나 배열 공간이 꽉 찰때 마다 배열을 copy하는 방식으로 늘리므로 이 과정에서 지연이 발생하게 된다.
  6. 데이터를 리스트 중간에 삽입/삭제 할 경우, 중간에 빈 공간이 생기지 않도록 요소들의 위치를 앞뒤로 자동으로 이동시키기 때문에 삽입/삭제 동작은 느리다. 따라서 조회를 많이 하는 경우에 사용하는 것이 좋다
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시가 넘어서 업로드 되지 않을까 싶다.