JAVA 13

[JAVA] List, Set은 선언된 변수만으로 컬렉션의 내용이 찍힌다

Collection 인터페이스는 List와 Set 인터페이스의 공통된 부분을 뽑아 정의한 것이다. 이 Collection 인터페이스를 일부 구현한 게 추상 클래스인 AbstractCollection이고, 그 아래 AbstractList와  AbstractSet이 있다. 이들 또한 추상 클래스들이고 우리가 많이 사용하는 ArrayList, HashSet 등이 이들을 상속하여 사용하고 있다.  어찌됐건 내가 궁금했던 것은 List와 Set 인스턴스를 출력할 때 왜 변수만으로 객체 주소가 아니라 컬렉션의 내용이 출력되는지였다. 그 이유는 아래와 같이 이들의 조상인 AbstractCollection에서 toString() 메서드를 오버라이드했기 때문이다. 예제를 보면 쉽게 이해할 수 있다. 작성된 코드는 자바의..

JAVA 2025.01.11

[JAVA] 소수점 특정 자릿수까지 표현하기

1. Math.round()Math.round()는 실수를 정수로 반환해 주는 메서드다. 쉽게 말해 반올림을 해 준다고 볼 수 있는데 이 메서드로 실수를 특정 자릿수까지의 수로 표현해 줄 수 있다. 예를 들어 100.3564를 소수점 둘째 자릿수까지 표현해 100.36로 반환하도록 말이다. round()는 아래 공식 문서대로 int나 long 타입의 정수형을 반환하기 때문에 변형해 주어야 한다. 둘째 자릿수까지 원한다면 100을 곱하고 100.0으로 나누어 준다. 즉 소수점 수대로 곱해주고 나누어 주면 된다.     System.out.println(Math.round(100.3564 * 100) / 100.0); // 100.36System.out.println(Math.round(100.3564 * ..

JAVA 2025.01.02

[JAVA] 천 단위마다 쉼표로 구분하기 - DecimalFormat, NumberFormat

두 클래스 모두 java.text 패키지에 속하여 숫자를 문자열로 또는 문자열을 숫자로 변환한다. 두 클래스 모두 패턴을 이용하여 특정 패턴 때문에 형 변환이 쉽지 않을 때 사용할 수 있다. 예를 들어 Double.parseDouble("123,456.78"); 구문은 에러가 발생한다. 그래서 이러한 경우들에 사용하면 된다. 먼저 숫자를 특정한 패턴에 맞는 문자열로 바꾸고 싶다면 format() 메서드를 사용하면 된다. 반대로 특정 패턴에 있는 문자열을 숫자로 변환하고 싶을 때는 parse() 메서드를 사용하면 된다. 1. DecimalFormat 클래스 DecimalFormat 클래스는 NumberFormat 클래스를 상속한 구체 클래스다. 그렇기 때문에 NumberFormat의 방법과 다를 게 없다...

JAVA 2024.11.04

[JAVA] 열거형 enum

열거형 enumenumeration(열거, 목록)의 약자허용 가능한 값 제한특정 값들의 집합을 나타내는 데이터 타입, 서로 연관되어 있는 '미리 정의된 상수 집합'일반적으로 이름과 값의 쌍으로 구성되어 있음열거 상수는 대문자로 작성코드의 가독성, 안정성 향상, 싱글톤 패턴 구현public enum Day { MON, TUE, WED, THUR, FRI, SAT, SUN;}열거 상수의 데이터위처럼 열거 상수 이름만으로도 선언할 수 있지만, 열거 상수 안에 필드를 두어 세부적으로 접근하게 할 수 있다필드 뿐만 아니라 메서드도 가능하여 각각의 기능을 처리하게 둘 수 있다'MON(korean)'의 모습은 사실 생성자생성자는 private으로 외부에서 호출할 수 없다publi..

JAVA 2024.10.09

[JAVA] 직렬화, 역직렬화 개념

직렬화Object를 ByteStream으로 변환하는 과정객체나 데이터 구조를 네트워크나 저장소(ex. 배열 버퍼 또는 파일 형식)를 통한 전송에 적합한 형식으로 변환하는 프로세스[https://developer.mozilla.org/ko/docs/Glossary/Serialization]자바 언어에서 사용되는 Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용할 수 있도록 바이트 스트림 형태로 연속적인 데이터로 변환하는 포맷 변환 기술 JVM의 힙 혹은 스택 메모리에 상주하고 있는 객체 데이터를 직렬화를 통해 바이트 형태로 변환하여 데이터베이스나 파일과 같은 외부 저장소에 저장해 두고, 다른 컴퓨터에서 이 파일을 가져와 역직렬화를 통해 자바 객체로 변환하여 JVM 메모리에 적재한다바이트 스..

JAVA 2024.10.02

[JAVA] 큐(Queue), 덱(Deque) 구현체, 메서드 정리

큐(Queue)대기 줄처럼 삽입하는 곳과 제거하는 곳이 각각 하나씩인 자료 구조먼저 들어온 순서대로 나간다(= FIFO) cf. 스택은 LIFO 자바에서는 Queue 인터페이스를 제공하고 있고, 그에 따른 구현체는 다양하다. 대표적으로 LinkedList()를 사용한다.(PriorityQueue - 정렬 가능, ArrayBlockingQueue, ConcurrentLinkedQueue ...) https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Queue.htmlQueue queue = new LinkedList(); 삽입 메서드- 요소를 삽입할 때 사용한다. add(): 삽입 성공 시 true를 반환하고, 큐에 자리가 없다면 I..

JAVA 2024.09.30

[JAVA] 자바와 C언어 메모리 구조 비교

자바 메모리 구조 메서드 영역에는 클래스, 메서드 등의 실행 코드와 static 영역이 들어가 있다. 추가로 공통 리터럴 상수를 보관하는 상수 풀(constant pool)이라는 것도 있는데 나는 인프런 - 김영한님의 자바 기본 강의에서 메서드 영역에 포함되어 있는 걸로 배웠으나 다른 블로그들을 보면 힙 영역에 포함된 것이라고 한다. 의견이 분분하길래 chatGPT에게 물어봤더니 자바 버전에 따라 위치하는 영역이 달라진 것이라고 했다. 즉, 자바 7이전(PermGen)에는 메서드 영역에 있었는데, 자바 8 이후(MetaSpace)로는 힙 영역으로 옮겨졌다는 것이다. 이 변화가 메모리의 한계를 개선시켜줬다고 하는데 나처럼 메서드 영역에 있냐, 힙 영역에 있냐를 구분시키는 질문은 별로 좋지 않은 질문이라고 ..

JAVA 2024.08.19

[JAVA] comparable, comparator 비교

https://st-lab.tistory.com/243 자바 [JAVA] - Comparable 과 Comparator의 이해아마 이 글을 찾아 오신 분들 대개는 Comparable과 Comparator의 차이가 무엇인지 모르거나 궁금해서 찾아오셨을 것이다. 사실 알고보면 두 개는 그렇게 어렵지 않으나 아무래도 자바를 학습하면서 객st-lab.tistory.comcomparable과 comparator는 아래의 메서드를 필수적으로 오버라이드해야 한다. 왜냐하면 이들은 인터페이스이기 때문.이 둘은 모두 객체를 비교할 수 있도록 만든다. primitive 자료형과 달리 객체 간 비교에서는 객체 내부의 속성 중 어떤 걸 가지고 비교해야 할지 기준이 모호한데 이들이 이 기준을 정해준다고 생각하면 된다. 비슷한 ..

JAVA 2024.07.03

[JAVA] System.in.read()

System.in.read()Scanner, BufferReader 말고 입력값을 받는다.아스키코드로 값을 받는다.버퍼를 사용하기 때문에 throws IOException 예외처리를 해 준다.숫자로 값을 받으려면 0의 아스키코드 값인 48을 빼준다. ex) -'0' , -48문자로 값을 받으려면 (char) 형변환을 해 준다.문자열 출력도 가능 -- 문자 하나당 byte로 받는데 byte 배열로 받은 후 new String(byte[])하여 출력 디버깅 모드로 1을 입력하고 엔터를 치게 되면 차례로 1의 아스키코드 값인 49와 엔터(LF; line feed) 값인 10이 들어가게 되어 원래 의도대로 실행되지 않는다. 엔터까지 인식하게 되어서! 그래서 이 점을 주의하고 사용하여야 한다. 안전하게 각각을 주..

JAVA 2024.06.30

[JAVA] delete(), deleteCharAt()

StringBuffer delete(int start, int end) 마지막 인덱스 전까지  StringBuffer deleteCharAt(int index) StringBuilder, StringBuffer 둘 다 적용 가능 출처: https://gomgomkim.tistory.com/14  [JAVA] StringBuffer - 원하는 위치 문자 제거개요 StringBuffer 클래스 개체의 원하는 위치 문자를 제거할 때 delete, deleteCharAt 메소드를 사용한다. 메소드 정의 StringBuffer delete(int start, int end) StringBuffer deleteCharAt(int index) 사용 예시 public class Progragomgomkim.tistor..

JAVA 2024.05.07