728x90

개발/Java 5

[Java] Java - 자바 관련 이것저것 (Overriding, Singleton, Serializable, Comparable, Comparator 등등)

생성자 생성자 : 객체를 생성할 때 호출하는 메서드 비슷한 것 (new 키워드와 함께 호출하는 것, 일반 멤버 변수의 초기화나 객체 생성 시 실행돼야 하는 작업 정리) 생성자 작성 규칙 : 메서드와 비슷하나 리턴 타입이 없고 이름은 클래스 이름과 동일 기본 생성자(default constructor) : 기본 생성자의 형태는 파라미터가 없고 구현부가 비어있는 형태(생성자 코드가 없으면 컴파일러가 기본 생성자 제공) 파라미터가 있는 생성자 : 생성자의 목적이 일반 멤버 변수의 초기화 -> 생성자 호출 시 값을 넘겨줘서 초기화 (주의! 파라미터가 있는 생성자를 만들면 기본 생성자는 추가되지 않는다.) this : 참조 변수로써 객체 자신을 가리킴(참조 변수를 통해 객체의 멤버에 접근했던 것처럼 this를 이..

개발/Java 2022.03.22

[Java] 자바 BufferedWriter를 이용한 int형 출력

자바에서 System.out.println로 많은 양을 출력하면 시간이 오래 걸리기 때문에 BufferedWriter를 사용하여 빠른 출력을 한다. 근데 BufferedWriter를 사용하다 보면 숫자를 출력할 때 원하는 값이 나오지 않을 때가 있다. 1을 출력하고 싶어서 bw.write에 1을 넣었다고 해보자. public static void main(String[] args) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); bw.write(1); bw.flush(); bw.close(); } 결과는 아래와 같다. 분명히 int형과 String형을 구분 지어 매개변수로 전달받는..

개발/Java 2021.11.27

[Java] 자바 가상 머신 JVM(Java Virtual Machine)이란?

JVM JVM은 '자바 가상 머신(Java Virtual Machine)'의 줄임말이다. 가상 머신이란 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어이다. 쉽게 생각하면 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터이므로 컴퓨터 속의 컴퓨터라고 생각하면 된다. 따라서 자바 가상 머신은 자바를 실행하기 위한 컴퓨터 속의 컴퓨터(가상 머신)인셈이다. 자바로 작성된 애플리케이션을 실행하기 위해서는 반드시 JVM이 필요하다. Java 애플리케이션 ◀ ▶ JVM ◀ ▶ OS ◀ ▶ 컴퓨터(하드웨어) 일반 애플리케이션 ◀ ▶ OS ◀ ▶ 컴퓨터(하드웨어) 일반적인 애플리케이션은 OS만 거치고 바로 하드웨어로 전달되지만 Java로 작성된 애플리케이션은 JVM을 한번 더 거치기 때문에 속도가 느리다..

개발/Java 2021.11.01

[Java] 자바 컬렉션 시간복잡도 (Collection Time Complexity)

자바는 다양한 컬렉션(Collection)을 제공한다. 같은 기능을 동작하는 코드여도 어떤 컬렉션을 사용했는지에 따라 성능 차이가 크게 날수있다. 이 차이는 데이터가 많아질수록 커질것이다. 따라서 컬렉션들의 특징과 각 연산의 수행시간을 고려해서 가장 적합한 컬렉션을 정하는것이 중요하다. 다음은 자바 컬렉션의 시간복잡도를 정리한 표이다. List add() remove() get() contains() Data Structure ArrayList O(1) O(n) O(1) O(n) Array LinkedList O(1) O(1) O(n) O(n) Linked List CopyonWriteArrayList O(n) O(n) O(1) O(n) Array Set add() contains() next() Dat..

개발/Java 2021.10.30

[Java] 자바 String, StringBuffer, StringBuilder 차이

String String 클래스는 변경 불가능한(immutable) 클래스이기 때문에 한번 생성된 String 인스턴스는 변경할 수 없다. '+' 연산자를 이용해서 문자열을 결합할 때 인스턴스 내의 문자열이 바뀌는 것이 아니고 합쳐진 새로운 문자열이 담긴 String 인스턴스가 생성된다. 따라서 String 클래스에서의 문자열 결합은 연산할 때마다 새로운 문자열을 가진 인스턴스를 생성시키므로 메모리 공간과 메모리 할당 및 해제에 의해 성능이 낭비된다. 문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많아진다면 StringBuffer 클래스나 StringBuilder 클래스를 사용하는 게 유리할 것이다. StringBuffer String과 StringBuffer의 가장 큰 차이는 문자열의 내용을 변경..

개발/Java 2021.10.24
728x90