본문 바로가기
String 연산 String 클래스는 immutable(불변)하다. 한번 메모리에 생성되면 그 뒤로 할당된 메모리 공간이 변하지 않는다. 문자열 연산을 하면 기존값에 붙는 것이 아니라 새롭게 String클래스 인스턴스를 메모리에 할당받아 생성된다. 따라서 멀티스레드 환경에서 thread-safe하지만, 문자열 연산이 많으면 성능이 떨어질 수 있다. 문자열을 붙일 땐 다음과 같은 방식이 있다. 1 .concat() 2.+연산 3. StringBuilder, StringBuffer 클래스 1. concat() String 클래스가 제공하는 기본 메소드다. concat()을 사용하면 문자열을 추가할 때마다 매번 새로운 String 인스턴스가 생성되기 때문에 성능, 속도가 좋지 않다. "a".concat("b").concat(.. 2022. 7. 17.
예외 (Exception) Error vs Exception Error는 시스템 레벨에서 비정상적인 상황이 일어났을 때 발생한다. Error가 발생하면 프로그램을 더 이상 실행할 수 없다. 이런 Error는 시스템 레벨에서 발생하기 때문에 개발자가 프로그램 코드로 대처할 수 없다. Exception은 개발자의 코드나 사용자에 의해 발생하는 프로그램 레벨의 오류를 뜻한다. Error와 마찬가지로 Exception이 발생하면 프로그램이 바로 종료되지만, Exception Handling을 해주면 정상적으로 프로그램을 작동할 수 있다. 위 구조도를 보면 Error 클래스와 Exception 클래스는 Throwable 클래스를 확장(상속)하고 있다. Throwable 클래스에 정의된 method들 중 가장 많이 쓰이는 것은 다음과 같다... 2022. 6. 28.
Arrays.asList() 보통 배열을 List로 변환하고 싶을 때, Arrays.asList(배열) 위 메소드를 사용한다고 알고 있다. 이번 과제를 하면서 int형 배열 int[]을 Integer를 요소로 하는 리스트 List로 변경하고자 했다. Arrays.asList(int 배열) int[] intArr = {1, 2, 3, 4, 5}; List list = Arrays.asList(intArr); //List형태가 아니다 int size = list.size(); //size == 1 List 에 1, 2, 3, 4, 5를 각각 요소로 가지는 사이즈 5의 list를 기대했지만 결과는 int[]인 [1, 2, 3, 4, 5] 요소 하나를 갖는 사이즈 1의 list가 만들어졌다. Arrays.asList()는 primitive.. 2022. 5. 30.
배열과 맵 toString() 자바에서 여러 자료형을 JSON형태로 만드는 과제가 있었다. 그 중 배열과 Map 자료형에서 JSON형태로 만들 때, StringBuilder에 "["(배열), "{"(Map) 를 붙이고서, 각 요소들을 붙여주는 식으로 구현했다. 그러다보니 마지막 요소 뒤에도 붙는 ","를 처리해주는 과정이 한 번 더 들어갔다. 근데 배열과 map 클래스에서 overriding된 toString()을 이용하는 풀이를 보고 몰랐던 부분을 정리하고자 한다. Arrays.toString(배열) int[] arr = {1, 2, 3, 4, 5}; String result = Arrays.toString(arr); // result : "[1, 2, 3, 4, 5]" //arr.toString(); (x) -> Object클래스.. 2022. 5. 25.
OOP의 특성 - 2. 다형성 다형성이란 단어를 살펴보면, 다양한 형태를 가지는 성질이라고 풀이할 수 있다. 이를 프로그래밍에 적용해보면, 다음과 같다. 하나의 객체는 여러 타입을 가질 수 있다. 프로그래밍에서는 타입을 구현하는 방식 중 하나로 '클래스'라는 개념을 주로 사용하기 때문에, 위 내용을 조금 바꿔보면 다음과 같다. 하나의 객체는 여러 클래스를 가질 수 있다. 여기서 객체가 아무 클래스나 다 가질 수 있는 것은 아니다. 객체는 기본적으로 자신의 클래스를 가지고 있다. 거기에 자신의 클래스와 상속관계에 있는 상위 클래스, 하위 클래스를 가질 수 있다. 타입 변환 타입 변환이라는 개념은 기본자료형 내용에서도 등장한다. 기본 자료형만 타입 변환이 가능한 것이 아니라 참조 자료형도 타입 변환이 가능하다. 자동 타입 변환 단어에서도.. 2022. 5. 13.
OOP의 특성 - 1. 상속 Java는 OOP의 특성 중 하나인 상속을 지원한다. 상속받는 하위 클래스의 이름 옆에 'extends 상위 클래스'를 적어주면 된다. public class Lower extends Upper { ... } 상속은 말 그대로 부모의 재산을 자식이 물려받는 것이다. 이를 프로그래밍에 적용해보면, 상위 클래스(부모)가 가지는 멤버(필드, 메서드)를 하위 클래스(자식)가 그대로 사용할 수 있다는 의미다. 더 나아가 'extends' 키워드에서 알 수 있듯이 하위 클래스는 상위 클래스를 확장한다는 의미까지 될 수 있다. 하지만, 상위 클래스의 모든 멤버를 하위 클래스가 사용할 수 있는 것은 아니다. 상위 클래스 멤버의 접근제어자에 따라 사용 가능 여부가 결정된다. Lower 클래스(하위 클래스)와 Upper .. 2022. 5. 12.
생성자 생성자를 한 문장으로 정리하면 다음과 같다. 인스턴스를 생성할 때 인스턴스 변수를 초기화하기 위해 호출되는 메서드 생성자가 인스턴스를 생성하는 것이 아니라, 인스턴스 변수 초기화의 역할을 한다. 인스턴스 생성은 new 키워드의 역할이다. Test test = new Test(); new 키워드로 다음 과정이 진행된다. -> Heap메모리에 Test 클래스 인스턴스를 저장할 공간을 할당받고. 인스턴스를 생성한다. 그리고 해당 공간의 참조값(주소)을 리턴하고, 올바른 매개변수 형식의 Test 클래스 생성자를 호출한다. 생성자가 호출되면 생성자 내부로직에 의해 인스턴스 변수가 초기화된다. 스택 영역에 위치한 test변수에는 new 키워드가 리턴한 참조값이 저장된다. 필드 초기화 인스턴스가 생성될 때 각 멤버필.. 2022. 5. 11.
static 멤버 필드나 메소드에 static 키워드를 붙이면 정적 멤버가 된다. 정적 멤버는 객체를 생성하지 않고 클래스에 직접 접근할 수 있는 필드와 메소드를 말한다. 정적 멤버가 되면 더 이상 객체가 아닌, 클래스 자체에 소속되기 때문에 클래스 멤버라고도 한다. 정적 멤버는 JVM의 class loader가, 자바 컴파일러가 .java 파일을 컴파일한 .class 파일 (바이트 코드)을 JVM이 할당받은 메모리 영역인 Runtime Area에 속한 method area (class area)에 올릴 때 클래스 별로 관리된다. 즉, 정적 멤버에 대한 정보는 method area에 있다. 해당 클래스를 바탕으로 만들어질 여러 객체가 공유하고 있을 데이터라면 정적 필드로 선언하고, 객체마다 고유의 값을 가질 데이터라.. 2022. 5. 10.
Wrapper Class 기본 개념 Java에서 Data type에는 primitive type과 reference type이 있다. 프로그램을 만들다보면, 이 primitive type의 데이터를 reference type으로 처리해야 하는 경우가 있다. 이런 경우를 위해 Java에는 Wrapper class라는 것이 있다. Wrapper class는 이 primitive type의 데이터를 객체로 사용할 수 있게 해준다. Primitive Type Reference Type byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean Boxing/Unboxing과 Auto-boxing/Auto-unboxin.. 2022. 5. 10.
Class 클래스 자신이 속한 클래스의 정보를 담은 클래스 접근 방법 Student student = new Student(); 1. 생성된 객체로부터 접근 -> student.getClass(); 2. 클래스 리터럴로 접근 -> Student.class 3. 클래스 이름으로 접근 -> Class.forName("Student") Java Reflection API를 통해 클래스 정보에 접근할 수 있다. * Java Reflection API란? -> 힙 영역에 로드된 Class 타입의 객체를 통해, 원하는 클래스의 인스턴스를 생성할 수 있게 지원하고, 인스턴스의 필드와 메서드를 접근 제어자와 상관없이 사용할 수 있도록 지원하는 자바 API https://papimon.tistory.com/82 2022. 4. 1.