1. 정적 팩토리 메서드란?정적 팩토리 메서드는 인스턴스를 생성자로 생성하지 않고, 별도의 객체 생성의 역할을 하는 정적 메소드를 사용해 인스턴스를 생성하는 방식입니다. ex)자바의 LocalTime 클래스내 정적 팩토리 메서드public static LocalTime of(int hour, int minute) { HOUR_OF_DAY.checkValidValue(hour); if (minute == 0) { return HOURS[hour]; } MINUTE_OF_HOUR.checkValidValue(minute); return new LocalTime(hour, minute, 0, 0);}위 예시 코드에서 본 LocalTime의 of 메서드처럼 생성자를 사용하지 않고 정적 메서드를 사용해 객..
1. 불변 객체란 무엇일까?불변 객체는 객체의 상태(내부의 값, 필드, 멤버 변수)가 변하지 않는 객체로 한 번 초기화 후 수정될 수 없기 때문에 예측 가능하고 안전한 코드 작성을 할 수 있게 도와줍니다. 대표적으로 자바의 String, Integer 등의 클래스가 불변으로 설계되어 있습니다. 지금부터는 불변 객체의 장점과 불변 객체를 구현하는 방법에 대해 알아보겠습니다. 2. 불변 객체의 장점스레드 안정성(Thread Safety)멀티스레드 환경에서 가변 객체를 여러 스레드가 동시에 수정하려 할 때 동기화를 적절히 처리하지 않으면 예상치 못한 동작이 발생할 수 있습니다. 하지만 불변객체는 상태가 변하지 않으므로 스레드 안정성을 보장할 수 있습니다. Side Effect를 최소화할 수 있다.객체의 공..
1. GC(Garbage Collection)이란? 가비지 컬렉션은 자바에서 사용되는 메모리 관리 기법으로 프로그램이 동적으로 할당한 메모리를 자동으로 관리해 더 이상 사용되지 않는 객체를 주기적으로 해제하는 역할을 합니다.MyObject obj = new MyObject("안녕");obj = null; //obj는 더 이상 참조되지 않아 GC 대상이 된다MyObject obj2 = new MyObject("first");obj2 = new MyObject("second"); //first 객체는 더 이상 참조되지 않는다. c와 c++에서는 프로그래머가 직접 수동으로 메모리 할당과 해제를 일일이 해줘야 하지만 자바에서는 가비지 컬렉터가 메모리 관리를 해주기 때문에 메모리를 효율적으로 사용할 수 있고 메모..
1. Call by Value와 Call by Reference란?Call by Value란 값에 의한 호출을 의미합니다. 함수에 값을 전달할 때 값을 복사해서 전달하고, 전달한 값을 변경하여도 원본은 변경되지 않습니다. Call by Reference란 참조에 의한 호출을 의미합니다. 함수에 값을 전달할 때 참조 값을 전달하게 됩니다.2. 자바에서 Call by Value의 동작방식자바의 데이터 타입은 크게 두 가지로 나누어집니다.원시타입 - byte, short, int, float, long, double, char, boolean참조타입 - Class, interface, Array, Enum 등등메소드 파라미터로 원시 타입과 참조 타입을 전달하며 일어나는 동작 방식을 보며 자바가 어떻게 Call..
1. 래퍼 클래스란?자바에서 자료형은 기본형(Primitive Type)과 참조형(Reference Type)으로 나누어집니다. 프로그래밍을 하다 기본형의 데이터를 객체로 표현해야 하는 경우가 생기는데 이럴 때 기본형을 객체로 다루기 위해 사용하는 클래스를 래퍼클래스(Wrapper Class)라고 합니다. 지금부터 래퍼클래스에 대해 자세히 알아봅시다. 2. 래퍼 클래스가 생긴 이유?기본형(Primitive Type)은 객체가 아니기 때문에 다음과 같은 한계점이 존재합니다.객체가 아니다 : 객체가 아니기 때문에 객체지향의 장점을 살릴 수 없다(메소드 제공 불가)null 값을 가질 수 없다 : 기본형은 항상 값을 가지기 때문에 null 표현을 할 수 없다.이런 단점을 해결하기 위해 기본형을 객체로 감싸서 ..
스트링은 왜 불변(immutable)으로 설계되었을까?기본적으로 자바에서는 String 객체의 값은 변경할 수 없다. 그렇다면 왜 String은 불변하게 만들었을까?String이 불변인 이유는 크게 3가지로 볼 수 있다. 1. String 객체의 캐싱 기능과 성능문자열 객체는 널리 사용되고 재사용될 가능성이 매우 높다. JAVA는 String 리터럴을 캐싱하고 재사용해 많은 힙공간을 절약할 수 있다. 예를 들어 아래같은 코드를 실행했을 때ex 1) String str1 = new String("hello");String str2 = new String("hello"); 메모리상에 2개의 인스턴스가 생성되게 된다. 하지만 리터럴 방식을 이용하면 Heap의 String pool이라는 공간에 String ..
자바에는 String, StringBuffer, StringBuilder클래스가 존재한다 String 클래스는 자바에서 가장 많이 쓰이는 만큼제대로 알아둘 필요가 있다. String은 변경 불가능한(immutable)클래스이다public final class String implements java.io.Serializable, Comparable { private final byte[] value; .......}String 클래스에는 문자열을 저장하기 위해 참조변수 byte[] value를 인스턴스 변수로 정의해 놓고 있다.인스턴스 생성 시 생성자 매개변수로 입력받는 문자열은 인스턴스 변수에 문자열 배열로 저장이된다.한번 생성된 String 문자열은 읽어 올 수만 있고 변경할 수는 없다.ex)S..
문제두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오. 입력첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다. 출력첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.풀이import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashSet;p..
자바 인터페이스(1)인터페이스란?추상클래스가 부분적으로만 완성된 미완성 설계도라고 한다면 인터페이스는 구현된 것은 없고 밑그림만 그려진 기본 설계도라고 할 수 있다. 밑그림만 그려져 있기 때문에 그 자체로 사용되기 보다는 다른 클래스를 작성하는데 도움을 줄 목적으로 작성된다.인터페이스 작성인터페이스의 작성은 interface키워드를 사용하고 접근제어자로 public, default를 사용할 수 있다.interface 인터페이스이름 { public static final 상수이름 = 값; public abstract 메서드이름(매개변수); default void 메서드이름() { 구현부분 };}인터페이스의 제약사항- 모든 멤버변수는 public static final 이어야 한다.- 모든 메서드는 pub..