KEEP GOING

[프로그래머스] 자바 중급 PART1~8 정리 본문

language/java

[프로그래머스] 자바 중급 PART1~8 정리

jmHan 2022. 5. 14. 14:58
반응형

https://programmers.co.kr/learn/courses/9

 

자바 중급

평가 5.0 20개의 평가 ★★★★★20 ★★★★0 ★★★0 ★★0 ★0 김보성 2022.03.27 11:12 YongHoonLee 2022.02.06 21:44 손창우 2022.01.19 23:25 유태형 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 리뷰 더보기

programmers.co.kr

 

파트1. Object 클래스 

object

모든 클래스의 최상위 클래스

 

모든 클래스는 Object 클래스의 메서드를 사용할 수 있다. ex) equals, toString, hashCode

이러한 메서드를 사용할 경우, 오버라이딩하여 사용

 

equals : 객체 간의 값 비교시 사용

toString : 객체가 가진 값을 문자열로 반환 

hashCode : 객체의 해시코드 값 반환

 

* String 클래스의 equals 메서드 : Object 클래스의 equals를 오버라이딩한 것.

                                                  오버라이딩하여 두 객체간 '문자열'이 같은지 비교 

 

package intermediate;

public class Student {
	String name;
	String number;
	int birthYear;

	public static void main(String[] args) {
		Student s1 = new Student();
		s1.name = "수현";
		s1.number = "2015";
		s1.birthYear = 1988;
		
		Student s2 = new Student();
		s2.name = "수지";
		s2.number = "2015";
		s2.birthYear = 1994;
	
		if(s1.equals(s2)) {
			System.out.println("s1 == s2");
		}else {
			System.out.println("s1 != s2");
		}
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
	}
}

결과

Object 메소드 오버라이딩

상단 source > Generate hashCode() and equals() > 비교할 멤버변수 선택 

package intermediate;

import java.util.Objects;

public class Student {
	String name;
	String number;
	int birthYear;
    
    @Override
	public int hashCode() {
		return Objects.hash(number);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		return Objects.equals(number, other.number);
	}

	public static void main(String[] args) {
		Student s1 = new Student();
		s1.name = "수현";
		s1.number = "2015";
		s1.birthYear = 1988;
		
		Student s2 = new Student();
		s2.name = "수지";
		s2.number = "2015";
		s2.birthYear = 1994;
	
		if(s1.equals(s2)) {
			System.out.println("s1 == s2");
		}else {
			System.out.println("s1 != s2");
		}
		System.out.println(s1.hashCode());
		System.out.println(s2.hashCode());
	}
}

 

toString 출력 결과

System.out.println(s1.toString());

출력 결과
source > Generate hashCode() and equals() > 비교할 멤버변수 선택

 

package intermediate;

public class Student {
	String name;
	String number;
	int birthYear;
	
	@Override
	public String toString() {
		return "Student [name=" + name + ", number=" + number + ", birthYear=" + birthYear + "]";
	}

	public static void main(String[] args) {
		Student s1 = new Student();
		s1.name = "수현";
		s1.number = "2015";
		s1.birthYear = 1988;
		
		Student s2 = new Student();
		s2.name = "수지";
		s2.number = "2015";
		s2.birthYear = 1994;
	
		System.out.println(s1.toString());
		System.out.println(s2.toString());	
	}
}

toString 오버라이딩 후 출력 결과

오버라이딩 후 출력 결과

 

파트2. java.lang 패키지

java.lang

java에서 쓰이는 가장 중요한 패키지 

import하지 않아도 사용 가능

 

- wrapper 클래스 : 8가지의 기본형 타입을 객체로 변환시킬 때 사용하는 클래스

                             ex) Boolean, Byte, Short, Integer, Long, Float, Double 

- Object 클래스 : 모든 클래스의 최상위 클래스 

- String, StringBuffer, StringBuilder 클래스 : 문자열 관련 

- System 클래스 : 화면 값 출력 

- Math 클래스 : 수학 

이 외에도 Thread와 관련된 클래스 등이 java.lang 패키지에 존재한다.  

 

    public class WrapperExam {
        public static void main(String[] args) {
            int i = 5; 
            Integer i2 = new Integer(5);
            Integer i3 = 5;     //오토박싱
            int i4 = i2.intValue();
            int i5 = i2;       //오토언박싱
        }
    }

* 오토박싱(Auto Boxing)

기본형 값을 객체 타입으로 형변환해주는 기능   

 

* 오토언박싱(Auto unboxing)

JAVA 5부터 지원.

객체 타입 값을 기본형으로 자동 형변환하여 값을 할당 

wrapper 클래스를 사용하여 컴파일러가 자동으로 메서드(ex. intValue) 호출 

 

(1) String Buffer 클래스

    StringBuffer sb = new StringBuffer();
    // 스트링 버퍼에 "hello", 공백, "world"를 차례대로 추가

    sb.append("hello");
    sb.append(" ");
    sb.append("world");
    // StringBuffer에 추가된 값을 toString()메소드를 이용하여 반환

    String str = sb.toString();

StringBuffer 메서드들은 자기 자신인 this를 반환한다.

*메소드 체이닝 - 자기 자신의 메서드를 호출하여 자기 자신의 값을 바꿔가는 것

		StringBuffer sb2 = new StringBuffer();
		StringBuffer sb3 = sb2.append("hello");
		if (sb2 == sb3) {
			System.out.println("same");
		}
		// 메서드 체이닝 
		String str2 = new StringBuffer().append("zz").append(" ").append("world").toString();
		System.out.println(str2);

 

(2) String 클래스

문자열을 다룰 때 주로 사용하며 String 클래스는 불변 클래스이다.

        String str1 = "hello world";
        String str2 = str1.substring(5);
        System.out.println(str1);
        System.out.println(str2);

str1의 부분 문자열을 str2에 저장할지라도 str1 자체는 전혀 변화가 없다.

 

for문 안에서 String 클래스를 사용할 경우, 반복 횟수만큼 String 객체를 생성한다.

즉, 성능 면에서 비효율적이다. 따라서 이를 개선하기 위해 StringBuffer 클래스를 사용한다.

        String str5 = "";
        // 성능 문제 o 
        for (int i=0; i < 100; i++) {
            str5 = str5 + "*";
        }
        System.out.println(str5);
        // 성능 효율 o
        StringBuffer sb = new StringBuffer();
        for (int i=0; i<100; i++) {
            sb.append("*");
        }
        String s = sb.toString();
        System.out.println(s);

 

(3) Math 클래스

수학 계산을 위한 클래스 

Math 클래스의 생성자가 private이기에 new 연산자로 객체를 생성할 수는 없다.

하지만 모든 메서드와 속성이 static으로 정의되어 있기 때문에 객체를 생성하지 않고 사용할 수 있다.

        int value = Math.max(5, 30);
        System.out.println(value);
        int value2 = Math.min(5,  30);
        System.out.println(value2);
        System.out.println(Math.abs(-10));

        System.out.println(Math.random());
        System.out.println(Math.sqrt(25));

 

파트3. java.util 패키지

java.util

java.lang만큼 자주 사용하는 패키지

 

- Date, Calendar 클래스 : 날짜와 관련된 클래스.

                                       Date 클래스는 지역화를 지원하지 않으나 Calendar 클래스는 지원한다.

- List, Collection, Map, Set 클래스 : 자료구조 클래스 

 

(1)컬렉션 프레임워크란?

자료구조 클래스들을 컬렉션 프레임워크라고 한다.

- Collection 인터페이스 : 가장 기본이 되는 인터페이스. 중복을 허용하고 자료의 순서를 기억하지 못함.

                                      특정 위치에 존재하는 자료를 꺼낼 수 없음.

                                      Iterator 인터페이스를 통해 자료를 하나씩 꺼낼 수 있다.

- Iterator 인터페이스 : hasNext(), next() 

- Set 인터페이스 : 중복을 허용하지 않는 자료구조 

                          Collection 인터페이스를 상속받는다.

                          add(Object) : boolean 같은 자료가 있는 경우 false 없으면 true 반환

- List 인터페이스 : 중복을 허용하나 순서를 기억하는 자료구조 

                            Collection 인터페이스를 상속받는다.

                            get(int) : n번째 원소를 꺼낼 때 

                             

- Map 인터페이스 : Key와 Value를 가지는 자료구조. Key는 중복을 허용하지 않는다.

                            put(Key, Value) : 저장

                            get(Key) : Value 꺼냄

                            keySet() : 가지고 있는 모든 key 정보를 Set으로 반환

 

(2) Generic 클래스

Box.class

    public class Box {
        private Object obj;
        public void setObj(Object obj){
        this.obj = obj;
        }

        public Object getObj(){
        return obj;
        }
    }

BoxExam.class

    public class BoxExam {
        public static void main(String[] args) {
            Box box = new Box();
            box.setObj(new Object());
            Object obj = box.getObj();

            box.setObj("hello");
            String str = (String)box.getObj();
            System.out.println(str);

            box.setObj(1);
            int value = (int)box.getObj();
            System.out.println(value);
        }
    }

Box 클래스는 생성자에 매개변수로 Object를 받고 getObj 메서드로 Object를 반환한다.

Box 클래스는 Object의 자식들을 모두 받아들일 수 있다. ex) String 객체, int 객체... (모든 클래스의 부모 클래스가 Object 클래스이므로)

 

* JAVA5부터 Generic 키워드 사용 가능.

  Generic 문법을 통해 인스턴스를 만들 때 타입 지정 가능   

 

Generic을 이용한 Box.class

    public class Box <E> {
        private E obj;
        public void setObj(E obj){
            this.obj = obj;
        }

        public E getObj(){
            return obj;
        }
    }

Generic을 이용한 BoxExam.class

    public class BoxExam {
        public static void main(String[] args) {
            Box<Object> box = new Box<>();
            box.setObj(new Object());
            Object obj = box.getObj();

            Box<String> box2 = new Box<>();
            box2.setObj("hello");
            String str = box2.getObj();
            System.out.println(str);

            Box<Integer> box3 = new Box<>();
            box3.setObj(1);
            int value = (int)box3.getObj();
            System.out.println(value);
        }
    }

 

(3) Set 클래스

중복/순서 없는 자료 구조

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

    public class SetExam {
        public static void main(String[] args) {
            Set<String> set1 = new HashSet<>();

            boolean flag1 = set1.add("kim");
            boolean flag2 = set1.add("lee");
            boolean flag3 = set1.add("kim");

            System.out.println(set1.size());   //저장된 크기를 출력합니다. 3개를 저장하였지만, 이미 같은 값이 있었기 때문에 2개가 출력
            System.out.println(flag1);  //true
            System.out.println(flag2);  //true
            System.out.println(flag3);  //false

            Iterator<String> iter = set1.iterator();

            while (iter.hasNext()) {   // 꺼낼 것이 있다면 true 리턴.          
                String str = iter.next(); // next()메소드는 하나를 꺼낸다. 하나를 꺼내면 자동으로 다음것을 참조한다.
                System.out.println(str);
            }
        }
    }

 

(4) List 클래스

중복/순서 가능한 자료구조

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

    public class ListExam {

        public static void main(String[] args) {
            List<String> list = new ArrayList<>();

            // list에 3개의 문자열을 저장합니다.
            list.add("kim");
            list.add("lee");
            list.add("kim");

            System.out.println(list.size()); //list에 저장된 자료의 수를 출력 (중복을 허용하므로 3 출력) 
            for(int i = 0; i < list.size(); i++){
                String str = list.get(i);
                System.out.println(str);
            }
        }   
    }

 

(5) Map 클래스

key와 value를 쌍으로 저장하는 자료구조

키는 중복될 수 없으나 값은 중복될 수 있음. 

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;   
    public class MapExam {  
        public static void main(String[] args) {
            // Key, Value가 모두 String 타입인 HashMap인스턴스를 만듭니다.
            Map<String, String> map = new HashMap<>();

            // key와 value값을 put으로 저장합니다.
            map.put("001", "kim");
            map.put("002", "lee");
            map.put("003", "choi");
            // 같은 key가 2개 있을 수 없습니다. 첫번째로 저장했던 001, kim은 001, kang으로 바뀐다.
            map.put("001", "kang");

            // map에 저장된 자료의 수를 추력합니다. 3이 출력됩니다.
            System.out.println(map.size());

            // 키가 001, 002, 003인 값을 꺼내 출력합니다.
            System.out.println(map.get("001"));
            System.out.println(map.get("002"));
            System.out.println(map.get("003"));

            // map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
            Set<String> keys = map.keySet();
            // Set자료구조에 있는 모든 key를 꺼내기 위하여 Iterator를 구합니다.
            Iterator<String> iter = keys.iterator();
            while (iter.hasNext()) {
                // key를 꺼냅니다.
                String key = iter.next();
                // key에 해당하는 value를 꺼냅니다.
                String value = map.get(key);
                // key와 value를 출력합니다.
                System.out.println(key + " : " + value);
            }
        }
    }

 

파트4. 날짜와 시간

aa

 

파트5. IO

aa

 

파트6. 어노테이션

  • 소스코드(클래스, 메소드)에 메타코드를 붙이는 것
  • Java 5부터 추가된 기능
  • 사용자가 직접 만든 어노테이션은 '커스텀 어노테이션'이라고 한다.
aa

 

파트7. 쓰레드

aa

 

파트8. 람다

aa
반응형
Comments