JAVA9 자바 객체 복사 방법(얕은 복사, 깊은 복사) 자바 객체 복사 방법 자바에서는 객체를 복사하는 경우 참조 값으로만 복사가 됩니다. 하지만 상황에 따라 값 자체를 복사해야 하는 경우가 있습니다. 이렇게 자바의 복사 방법은 얕은 복사와 깊은 복사 두 가지 방법이 있습니다. 얕은 복사 얕은 복사(Shallow copy)는 객체를 복사할 때 원본 객체와 복사본 객체가 같은 객체를 참조하는 경우를 말합니다. 즉, 복사본 객체를 수정하는 경우 원본 객체도 변경 사항을 공유하게 됩니다. public class CopyObjectEx { private static class Point{ int x,y; public Point(int x, int y) { this.x = x; this.y = y; } public void setX(int x) { this.x = x.. JAVA/이펙티브 자바 2023. 7. 2. JVM의 동작 방식과 메모리 구조 1. JVM의 동작 순서 1. 자바를 실행 시키면 자바 컴파일러에 의해 자바(. java) 파일이 클래스 파일(. class)로 컴파일된다. 2. 이후에 클래스 로더에 .class 파일(바이트 코드)을 로드한다. - 이 과정에서 클래스 파일은 메모리에 저장되고 파일 정보가 JVM내부에 유지된다. 3. class loder를 통해 JVM Runtime Data Area(메모리 영역)을 구성한다. (메소드 영역, 힙영역, 스택영역) -> 아래에 나오지만 간단하게 설명하면 - 1. 메소드 영역 : 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드, 변수) - 2. 힙 영역 :객체, 배열이 생성되는 영역 (new 생성자로 생성되는) - 3. 스택 영역 : 각 스레드 마나 하나씩 존재, 메소드 호출 시.. JAVA 2023. 4. 26. Stream 스트림 배경 이전까지는 많은 양의 데이터 처리를 위해 배열이나 컬렉션을 이용해서 처리하며 반복문을 사용해서 접근해야 했다. 해당 방법은 코드가 길어지고 가독성이 떨어진다. 이 문제점을 해결하기 위해 스트림 API를 도입했다. 즉, 스트림은 자바 컬렉션과 배열 등의 데이터를 다룰때 유용한 기능으로 기존 데이터를 변경하지 않고 다양한 연산을 하여 결과를 새로운 스트림으로 반환한다. 장점 스트림은 데이터 소스를 추상화 하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 둔 것이다. 이를 활용하여 코드의 재사용성을 높이고 간결하고 이해하기 쉽게한다. 또한, 병렬 처리를 쉽게 할 수 있다. 특징 데이터 소스를 변경하지 않고 한번 생성되면 소모하면서 내부에서 반복하기 때문에 다시 재사용이 불가능하다. 다양한 연산으로.. JAVA 2023. 3. 19. 람다식(Lambda Expression) 람다식 메서드를 하나의 식으로 표현한 것 익명 함수의 한 종류이다. 람다식을 통해서 메서드를 변수처럼 다루는 것이 가능해졌다. 작성법 //기존 반환 타입 메서드이름(매개변수 선언){ 문장들 } //람다식 (매개변수 선언) -> { 문장들 } //람다식의 선언된 매개변수의 타입이 추론 가능한 경우 생략 가능하다(대부분 생략 가능하다) //매개변수의 타입을 선언해야 하면 (int a) -> a*a //와 같이 괄호 안에 타입 선언을 해야하지만 //타입을 선언하지 않아도 되는 경우라면 a -> a*a// 와 같이 생략 가능하다. 람다식의 장점 불필요한 코드를제거해서 코드가 간결해지고 가독성이 올라가는 장점이 있다. 또한 메서드를 전달가능하게 하면서 생산성이 높아진다. 람다식의 단점 디버깅이 어렵고, 비슷한 기.. JAVA 2023. 3. 8. Enum 클래스 열거형 : 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유리하다. 1️⃣ 특징 열거형의 상수간의 비교에는 "=="이 사용가능하다 (빠른 성능을 제공한다) 와 같은 비교연산자는 사용이 불가능 하지만 compareTo()는 이용이 가능하다 열거형 상수 하나하나각 각 클래스의 객체이다 2️⃣ 사용법 정의 : enum 열거체이름 { 상수이름, 상수이름,... } 사용법 : 열거체 이름. 상수이름 3️⃣ enum 메서드 ordinal() : 열거체에서 정의된 순서를 반환한다.(0부터 시작한다) valuOf(상수) : 상수 반환 values() : 열거체의 모든 상수를 저장한 배열을 반환 import java.util.Arrays; public enum Prize { first.. JAVA 2023. 2. 28. ArrayList와 LinkedList List 인터페이스 : 순서가 있는 집합, 데이터의 중복을 허용하는 컬렉션을 구현하는 데 사용된다. List인터페이스를 구현한 클래스 중에 가장 많이 사용되는 클래스는 ArrayList와 LinkedList가 있다. 1️⃣ ArrayList Vector와 구현원리나 기능적인 측면에서 동일하다.(Vector클래스는 소스와의 호환성을 위해서 남겨둔 것이므로 사용하지 말자) List인터페이스를 구현한다 ArrayList는 말 그대로 배열의 원리를 이용한 컬렉션 클래스다.(배열의 사이즈는 ArrayList에서 알아서 조절한다) ArrayList가 허용하는 범위(capacity)를 넘어가는 경우 경우 기존배열의 사이즈에 *2 사이즈의 배열을 만들고 거기에 요소를 복사하여 배열을 만들어 사용한다. 배열에 요소를 삭.. JAVA 2023. 2. 24. 오버로딩과 오버라이딩 오버로딩(OverLoading) 같은 이름의 함수(메서드)를 여러 개 생성하는 것이다 기존에 없는 새로운 메서드를 정의하는 것이다 리턴(반환) 타입이 달라도 상관이 없다 메서드의 이름이 같을 때 메서드의 파라미터의 개수나 타입이 달라야 한다 하단 코드를 실행하면 오른쪽과 같은 결과가 나옴을 확인할 수 있다. l은 long형의 리터럴 표기를 위해서 사용했다. import java.io.IOException; import java.util.List; public class Main { public static void main(String[] args) throws IOException { System.out.println(sum(List.of(1,2))); System.out.println(sum(1, 2.. JAVA 2023. 2. 22. Array 배열 복사의 4가지 방법 1. 새로운 배열 생성 후 포문으로 도는 방법 for : [1, 2, 3, 4, 5] int[] arr = {1, 2, 3, 4, 5}; //1. for 문을 이용 int[] cpyArrFor = new int[arr.length]; for (int i = 0; i < arr.length; i++) { cpyArrFor[i] = arr[i]; } System.out.println(" for : " + Arrays.toString(cpyArrFor)); System.out.println(); 2. arr.clone()를 이용하는 방법 clone : [1, 2, 3, 4, 5] //2. clone을 이용 int[] cpyArrClone = arr.clone(); System.out.println(" clon.. JAVA 2023. 2. 10. JAVA 자료형 범위 논리형 - boolean boolean true, false 1byte ( 8bit ) 문자형 - char char 0 ~ 65535 2byte ( 16bit ) 정수형 - byte, short, int, long byte -128 ~ 127 1byte ( 8bit ) short -32768 ~ 32767 2byte ( 16bit ) int -2_147_483_648 ~ 2147483647 4byte ( 32bit ) long -9_223_372_036_854_775_808 ~ 9223372036854775807 8byte ( 64bit ) - jvm의 경우 피연산자를 4byte 단위로 저장하기 때문에 byte나 short 를 계산하는 경우에는 int로 변형되어 계산되므로 int 를 사용하는게 더 효율적.. JAVA 2022. 10. 3. 이전 1 다음