이번에 새싹 스터디에서 코드 리뷰에 대한 내용 중 static final을 사용할 지, final을 사용할 지 구분이 되지 않음 그래서 이번 기회에 final을 제대로 공부해보고자 정리해봄 final 키워드는 무엇인가요? 재할당 불가를 명시하는 키워드 final 키워드는 변수, 메서드, 파라미터, 클래스에서 사용하는 “non-access modifier(비접근 수정자)” 로서, 각각 사용하는 context마다 사용법이 다릅니다. context마다 사용법이 다르다고 말씀하셨는데 어떻게 다른가요? primitive 변수는 한 번 초기화되고 이후에 수정할 수 없음 reference 변수는 다시 재할당할 수 없지만, 내부 값은 수정할 수 있음 메서드는 overriding을 prevent함 클래스는 상속을 pre..
영한님 스프링 강의를 들으면서 스트림을 사용하시는 것을 보고, 실무에서도 스트림을 많이 사용하는구나 라는 생각이 들었다 이번 기회에 스트림을 제대로 공부해보고자, 옛날에 들었던 "윤성우의 열혈 Java"를 통해 스트림을 공부하게 됐다. 뭔가 필요한 공부를 하니 강의를 들으면서 더욱 집중할 수 있었고, 빨리 내 프로젝트에 적용해보고 싶은 욕구가 생겼다. 스트림 일련의 과정을 부드럽게 해결하기 위해 사용한다. 물이 흐르면서 필터를 거쳐 우리가 마실 수 있는 물이 되는 것처럼, 데이터가 흐르면서 여러 필터를 거치며 우리가 원하는 데이터를 얻을 수 있다. 스트림은 중간 연산과 최종 연산으로 나뉜다. 중간 연산은 마지막이 아닌 위치에서 진행되는 연산으로, 각각 순서가 바뀔 수 있다. 최종연 산은 마지막에 진행되는..
StringBuilder와 StringBuffer를 공부하다가 StringBuilder에서의 equals 출력 값과 String에서의 equals 출력 값이 다르다는 것을 발견했다. 그래서 왜 다른지 열심히 구글링 하고 오카방에 여쭤보았다. 원래 equals() 는 주소를 비교한다. 아래 코드는 자바에서 equals() 메소드 구현한 코드이다. 보면 ==을 이용하여 비교를 한다. 즉, 오버라이딩 되지 않은 equals는 ==를 사용하여 주소 값을 비교한다. public boolean equals(Object obj) { return (this == obj); } 그러면 왜 아래 코드는 이러한 값을 출력할까? StringBuilder sb1 = new StringBuilder("abc"); StringBu..
String을 비교할 때 왜 .equals()를 사용할까에 대해 궁금해하면서 공부를 하게됐다. 새로운 줄에서 + 연산 public class Main { public static void main(String[] args) throws IOException { String str1 = "a"; str1 += "bc"; String str2 = "abc"; System.out.println(str1 == str2); //false System.out.println("str1 = " + str1); //abc System.out.println("str2 = " + str2); //abc String str3 = "a" + "bc"; System.out.println(str2 == str3); //true S..
자바 공식 문서에서 Object 메소드에 equals와 toString이 있다. public String toString() 모든 Wrapper 클래스는 객체를 문자열로 변환하는 toString() 메소드를 가지고 있음 Integer i = Integer.valueOf(11); 1) System.out.println( i.toString() ); 2) System.out.println(i); 1)과 2)의 결과값은 같다. public boolean equals(Object o) 객체 내부의 값을 비교함 Integer x1 = 6; Integer x2 = 7; Integer y1 = 6; int y2 = 6; System.out.println(x1.equals(x2)); //false System.out...
Integer.valueOf() public static type valueOf(type t or String str) 기본형 또는 String --> Wrapper 반환형이 Integer 매개변수에 String, Integer 올 수 있음 매개변수로 문자가 올 경우 해당 유니 코드 값을 반환 java.lang 패키지에 속하는 정적 메소드 Integer.parseInt() public static type parse type (String str) 문자열 --> 기본형 반환형이 int 매개변수에 String만 올 수 있음 매개변수로 문자가 올 경우 에러 발생 Integer클래스에 속함 VAL.typeValue() Wrapper 클래스의 VAL 변수를 type형으로 (기본형) 바꾼다 Integer a = ..
백준 문제를 풀다가 문자열 정렬이 나와 comparable과 comparator 공부를 하게 되었다.그래서 comparable과 comparator의 정확한 개념은 구글링을 해도 많이 나오기 때문에 나는 알고리즘 문제를 풀면서 적용할 수 있게끔, 나중에 내가 다시 봐도 이해할 수 있게 글을 써보았다. comparator 인터페이스 백준 문제를 풀다가 문자열 정렬이 나와 comparable과 comparator 공부를 하게 되었다. comparator은 java.util 패키지에 포함되어 있는 인터페이스이다. comparator는 comparable과 다르게 일반적인 기준이 아닌 특정 기준을 사용할 때 필요하다. comparator의 메소드는 compare( o1, o2)이다. comparator 활용 나..
Queue 인터페이스를 구현하는 클래스 큐를 구현하는 클래스는 여러 가지가 있지만 대부분 사용하는 것은 LinkedList, ArrayDeque라고 생각한다. 일반적인 큐를 사용할 경우 LinkedList를 사용한다. 하지만 자바 api에서는 큐를 사용할 때 LinkedList를 사용하는 것보다 ArrayDeque를 사용하는 것이 더 빠르다고 한다. 성능 테스트한 것을 보았는데 ArrayDeque가 더 빠르고, 그다음으로 LinkedList가 빨랐다. Queue 특징 큐는 스텍과 다르게 FIFO 형태를 가진다. 먼저 들어온 데이터가 가장 먼저 나가는 구조이다. Queue 공통 메소드 boolean offer(E e) - 큐에 데이터를 추가한다. E peek() - 첫번째로 저장된 값을 리턴한다. 그러나 ..
📌List 인터페이스를 구현하는 클래스 - ArrayList, Vector, LinkedList, Stack이 있다. 📌List 특징 - List는 입력 순서대로 데이터가 저장이 되고, Set과 다르게 중복 데이터 저장이 허용된다. 선형 구조로 데이터를 일렬로 놓은 모양이라고 생각하면 된다. 📌List 공통 메소드 boolean add(E e) - 데이터 삽입 void add(int index, E element) - index에 데이터 삽입 void clear() - 데이터 모두 삭제 boolean contains(Object o) - 데이터가 존재하면 true, 없으면 false 리턴 E get(int index) - index의 데이터 리턴 boolean isEmpty() - 데이터가 없으면 tru..
next()와 nextLine()의 차이 next() - 공백을 기준으로 한 단어 또는 한 문자씩 입력받는다. - 버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽음. 그래서 개행 문자를 가져오지 않는다. nextLine() - 문자 또는 문장 한 라인 전체를 입력받는다. - 버퍼에 입력된 문자열을 개행 문자까지 다 가져온다. ex) Hello World 입력 next() : Hello만 출력 nextLine() : Hello World 출력 nextInt() 사용 후 nextLine() 사용 시 문제 발생 - nextInt()는 개행 문자를 제거하지 않는다. 그래서 버퍼에 개행 문자가 남아있게 된다. 여기서, nextLine()을 사용하게 되면 개행 문자를 만나서 개행 문자를 받게 된다. 따라서..
Map 인터페이스를 구현하는 클래스 - 대표적으로 HashMap, LinkedHashMap, TreeMap이 있다. Map 특징 - map은 key와 value로 이루어져 있고, 두 개의 값이 한 쌍의 데이터로 이루어져 있다. 예를 들어 key에는 이름 value에는 홍길동 이런 식으로 한 쌍의 데이터가 저장되어있다. - 중복을 허용하지 않는다. Map 공통 메소드 boolean containsKey(Object key) - map이 특정 key값을 가지고 있으면 true 리턴 boolean containsValue(Object value) - map이 특정 value값을 가지고 있으면 true 리턴 V get(Object key) - key에 해당하는 value값을 리턴한다. 만약에 key값이 존재하지..
📌Set 인터페이스를 구현하는 클래스 - HashSet, TreeSet, LinkedHashSet 등 📌Set 특징 -List와 다르게 객체를 중복해서 저장할 수 없다. ex) 20 10 10 30 40 20 10 30 40만 저장됨. 중복해서 저장할 수 없는 대신에 순서가 보장되지 않는다. 📌Set 공통 메소드 boolean add(E e) - 객체 저장 후 성공이면 true, 실패면 false를 리턴 boolean contains(Object o) - 객체가 있는지 여부 리턴 boolean isEmpty() - 컬렉션이 비어있는지 확인 boolean remove(Object o) - 인자로 받은 요소를 삭제한다. int size() - 요소의 개수를 리턴 Object[] toArray() -set을 ..