[Java] java.lang.Object class, String, Array, ArrayList, HashMap, HashSet

클라우드·2024년 4월 4일
0

Java

목록 보기
8/20
post-thumbnail

1. java.lang.Object class

  • 모든 class의 최상위 class
  • 몇 가지 주요한 method를 제공한다.
  • 여기서는 equals()toString() 에 대해 알아보자.
  • equals()
package test;

public class Student {

    // field
    private String name;
    private int age;

    // constructor
    public Student() {
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    // getter & setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // method
    @Override
    public boolean equals(Object obj) {
        // 인자로 들어온 instance가 equals method를 가지고 있는
        // instance의 내용과 같으면 같은 객체로 판별하는 로직을 작성하면 된다.
        // 당연히 처음은 두 instance의 type을 똑같이 맞춰야 한다.
        Student target = (Student)obj;
        boolean result = false;
        if(this.getName() == target.getName() && this.getAge() == target.getAge()) {
            result = true;
        }
        return result;
    }
}

class MyMain {
    public static void main(String[] args) {
        Student s1 = new Student("홍길동", 20);
        Student s2 = new Student("홍길동", 20);

        boolean result = s1 == s2; // 서로 인스턴스 값이 같은지?
        System.out.println(result); // false
        System.out.println(s1.equals(s2));
    }
}
  • toString()
package test;

public class Student {

    // field
    private String name;
    private int age;

    // constructor
    public Student() {
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    // getter & setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // method
    @Override
    public boolean equals(Object obj) {
        // 인자로 들어온 instance가 equals method를 가지고 있는
        // instance의 내용과 같으면 같은 객체로 판별하는 로직을 작성하면 된다.
        // 당연히 처음은 두 instance의 type을 똑같이 맞춰야 한다.
        Student target = (Student)obj;
        boolean result = false;
        if(this.getName() == target.getName() && this.getAge() == target.getAge()) {
            result = true;
        }
        return result;
    }

    @Override
    public String toString() {
        return this.getName() + " : " + this.getAge();
    }
}

class MyMain {
    public static void main(String[] args) {
        Student s1 = new Student("홍길동", 20);

        System.out.println(s1);
        // toString() 오버라이딩 X -> 메모리 주소값이 나온다. test.Student@4554617c
        // toString() 오버라이딩 O -> 홍길동 : 20
    }
}

2. String class

  • Java는 primitive type으로 총 8개의 데이터 타입을 제공한다.
  • 정수형 4개, 실수형 2개, 논리형 1개, 문자 1개
    • 자바는 문자는 존재하지만, 문자열은 존재 X
    • 자바스크립트 및 파이썬은 문자열은 존재하지만, 문자는 X
  • 즉, 문자열은 기본 타입으로 제공되지 않으므로 reference type으로 제공된다. 즉, class로 제공된다.
  • 따라서 사용하기 불편하다.
String a = new String("불편불편!!");

// 너무 불편하다. 그래서 다음과 같이 사용한다.

String b = "편해편해!!";
String c = "편해편해!!";
String d = new  String("불편불편!!"); 

b= "아이편해";
// 문자열은 불변이기 때문에 값을 수정할 수 없다. 새로 만들어야 한다.

3. Array

  • Java 배열
  • 배열은 같은 data type을 여러 개 저장할 수 있는 집합형 자료구조
  • 기호는 [ ] 사용
  • 저장 순서 존재. index 개념 존재
  • 배열은 instance이고, 특수한 형태로 생성을 한다.
int a = 100;

int[] arr = new int[6];

4. ArrayList class

package test;

import java.util.ArrayList;
import java.util.List;

class MyStudent {

}

public class ArrayListTest {
    public static void main(String[] args) {

        // ArrayList 객체를 만들어서 사용하자.
        // List 계열은 객체면 type에 상관없이 다 저장 가능하다.
        // 다른 reference data type들을 저장할 수 있다.
        // 그런데 실제로 구현하다보면 거의 예외없이
        // 같은 데이터 타입을 이용해서 사용하게 된다. (마치 배열처럼)
        List list = new ArrayList();
        list.add("홍길동"); // 문자열 (오버라이딩 되어있다.)
        list.add(new MyStudent()); // class (오버라이딩 X)
        list.add(100); // integer (오버라이딩 되어있다.)
        // 100은 int형태의 primitive type이다.
        // 따라서 ArrayList 안에 저장될 수 없다.
        // 자바에는 primitive type에 각각 대응되는 wrapper class가 존재
        // list.add(100); => list.add(new Integer(100));
        // boxing 이라는 표현을 사용한다.
//        for(int i=0; i<10; i++) {
//
//        }
        for(Object obj : list) {
            System.out.println(obj.toString());
        }

        List<String> myList = new ArrayList<String>();
        myList.add("홍길동");
        myList.add("신사임당");

        for(String str : myList) { // generic을 쓰면 type이 명시되어 있어 편리하다.
            System.out.println(str);
        }
    }
}

5. HashMap class

  • key와 value 쌍으로 이루어진 집합형 자료구조
package test;

import java.util.HashMap;
import java.util.Map;

public class HashMapTest {
    public static void main(String[] args) {
        // 상위타입 Map = 실제 구현 클래스 하위타입 HashMap
        Map<String, String> map = new HashMap<String, String>();

        map.put("1", "안녕하세요!");
        map.put("2", "하이하이");

        System.out.println(map.get("2"));
    }
}

6. HashSet class

  • set은 바구니 같은 자료구조
  • 저장되는 순서는 없다.
  • set은 중복 허용 X
package test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetTest {
    public static void main(String[] args) {

        Set<String> set = new HashSet<String>();

        set.add("홍길동");
        set.add("신사임당");
        set.add("홍길동");

        // Iterator 생성
        Iterator<String> iter = set.iterator();
        while(iter.hasNext()) { // 다음 것이 있는지 체크하고 있으면 출력
            System.out.println(iter.next());
        }
    }
}
profile
안녕하세요 :)

0개의 댓글