개발 블로그
article thumbnail
문자열(String)의 생성과 비교
Java 2023. 10. 8. 15:13

String 객체의 생성 방법 String 타입 객체를 생성하는 방법에는 2가지가 있다. 1. new 연산자를 사용하는 방법 2. literal 을 사용하는 방법 각 방법은 생성 과정에서 차이가 있다. new 연산자를 사용하는 방법은 늘 새로운 객체를 생성해서 JVM 의 Heap 영역에 이를 저장하고 참조하게 되는 반면 literal 을 사용하는 방법은 우선 동일한 literal 로 생성된 객체가 JVM Heap 영역 중 String Constant Pool 이라는 영역에 저장되어 있는지 확인한다. 이미 생성된 객체가 있다면 해당 객체를 참조하게 되고 그렇지 않다면 새로운 객체를 만들어 String Constant Pool 에 저장하고 참조하게 된다. public class Main { public st..

article thumbnail
산술 변환
Java 2023. 9. 19. 14:15

산술 변환이란? 이항 연산자는 두 피연산자의 타입이 일치해야 하는데 이 때 자동으로 형변환되는 것을 '산술 변환'이라고 한다. 산술 변환의 규칙에는 1) 작은 타입을 큰 타입으로 변환하여 타입을 일치시킨다 2) int 보다 작은 타입의 경우 int 타입으로 변환한다 가 있다. 산술 변환과 관련해 주의할 케이스 overflow 이항 연산자 중 대입 연산자도 산술 변환이 발생한다 long l = 3 + 5; 3 + 5 는 int + int 이므로 그 결과값도 int 인데 long 타입인 l 에 할당할 때는 long 타입으로 자동 변환이 일어난다. 이 때 주의해야할 점은 우변의 결과값은 기본적으로 int 라는 점이다. int i1 = 1000000; int i2 = 2000000; long l1 = i1 * ..

article thumbnail
비트 연산자(<<, >>, &, |, ^, ~)
Java 2023. 9. 19. 13:04

비트 연산자란? 비트 단위의 연산에 사용되는 연산자 비트 연산자의 종류 산술 연산자() a > b : 2진수 a 를 b 비트 만큼 오른쪽으로 미는 연산 int x = 7; System.out.println("x > 2 = " + (x >> 2)); // 0111(2) -> 0001(2) : 1 논리 연산자(&, |, ^, ~) & : 두 비트가 모두 1일 때만 1 | : 두 비트 중 하나라도 1이면 1 ^ : 두 비트가 서로 다르면 1, 같으면 0(xor 연산) ~ : 비트를 반전시키는 부정 연산자(1 -> 0, 0 -> 1) int a = 8; // 01000(2) int b = 17; // 010001(2) System.out.println("a & b = " + (a & b)); // 000000(..

article thumbnail
스레드 동기화(synchronized)
Java 2023. 4. 12. 14:52

이번에는 Java에서 스레드 동기화를 할 때 사용하는 synchronized 에 대해서 알아보려 합니다. 동시성 문제와 동기화 자바에서 여러 스레드가 공유 자원에 동시에 접근하게 되면 의도와 다르게 잘못된 결과가 나올 수 있는데 이를 동시성 문제라고 하고 이를 해결하는 방법을 동기화라고 합니다. 여러 스레드가 공유 자원에 동시에 접근할 경우 어떤 일이 발생하는지 예제를 통해 살펴보겠습니다. class Temp { public void methodA() { System.out.println(Thread.currentThread.getName() + " lock this method"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.prin..

article thumbnail
상속
Java 2023. 4. 7. 15:27

이번에는 객체지향프로그래밍에서 중요한 개념 중 하나인 '상속'에 대해서 알아보고 실제 Java에서는 어떻게 상속을 할 수 있는지 알아보도록 하겠습니다. 추상화 상속에 대해 이야기 하기 전에 먼저 '추상화'라는 개념부터 알아야 합니다. 여기서 중요한 설명은 '핵심적인 개념 또는 기능을 간추려 내는 것'이라는 말입니다. 객체지향 프로그래밍에서 말하는 추상화도 이와 같은 맥락을 지닙니다. "객체들이 공통으로 갖는 핵심적인 속성이나 기능을 간추려 정의하는 것" 예를 들어 자동차와 자전거를 생각해봅시다. 이 객체들은 모두 '전진', '좌회전', '우회전' 등의 기능을 갖고 있습니다. Class Car { void forward(){} void left(){} void right(){} ... } Class Bic..

접근제어자와 Getter & Setter
Java 2023. 4. 6. 21:30

접근제어자 데이터에 대한 접근을 제어하는 녀석으로 4가지 종류가 있습니다. 1. public : 모든 곳에서 접근 가능한 2. private : 해당 클래스에서만 접근 가능한 3. default : 같은 패키지에서만 접근 가능한(아무 제어자도 입력하지 않으면 default) 4. protected : 같은 패키지에서만 접근 가능한 또는 다른 패키지의 경우 자식 클래스에서만 접근 가능한 이런 접근 제어자는 왜 필요한 걸까요? 그냥 모든 데이터에 대해서 public 으로 설정해 누구나 어디에서나 접근 가능하게 하면 안 되는 걸까요? 할인 행사를 예로 들어서 생각해봅시다. 우리 매장은 자전거를 판매하는 매장입니다. public Bicycle { public int price; public Bicycle(int..

클래스, 객체, 인스턴스
Java 2023. 4. 6. 21:00

클래스 클래스는 객체를 만들기 위한 '설계도'입니다. 이 설계도에는 객체를 만들기 위해 필요한 '필드'와 '메서드' 그리고 '생성자'가 정의되어 있습니다. 생성자는 클래스로부터 객체를 만들 때 가장 먼저 자동으로 호출되는 일종의 메서드로 필드를 초기화하는 등의 역할을 하는데 여기서는 자세히 다루지 않겠습니다. 객체 클래스는 객체를 만들기 위한 설계도라고 했는데 그럼 '객체'는 대체 무엇일까요? 객체는 물리적인 관점이나 추상적인 관점에서 다른 것과 식별이 가능한 '것'을 모두 객체라고 합니다. 쉽게 말해서 이 글을 작성한 저, 글을 읽고 있는 여러분, 이 글, 글을 작성하는 데 사용한 노트북 등등 우리 실세계에서 식별이 가능한 모든 것이 객체가 될 수 있는 것이죠. 그리고 객체를 구성하는 요소에는 '속성'..

article thumbnail
얕은 복사 vs 깊은 복사
Java 2023. 4. 4. 15:43

얕은 복사와 깊은 복사 이 개념은 '참조형 변수'를 복사할 때 알아야 하는 개념입니다. 참조형 변수는 변수에 실제 값을 저장하고 있는 것이 아니라 값이 저장된 메모리 공간의 주소를 저장하고 있습니다. 얕은 복사 참조형 변수를 복사할 때 '주소값'을 복사하는 것을 말합니다. int[] a = {1, 2, 3}; int[] b = a; 이렇게 정수형 배열 a를 선언하고 b에 a를 복사해보겠습니다. b[0] = 10; for (int i : a) { System.out.print(i + " "); } System.out.println(); for (int j : b) { System.out.print(j + " "); } b[0] 를 10으로 변경하고 a와 b를 출력하면 결과가 어떻게 나올까요? 일반적으로 예..