반응형

개발 & 데이터베이스/JAVA 43

자바 지역변수, 전역변수, 정적(static) 변수의 차이점 (Java 8 이후의 JVM 구조)

자바에서는 선언 위치에 따라서 크게 지역 변수와 전역 변수 2개로 나눌 수 있다. 전역 변수에는 클래스 변수와 인스턴스 변수가 있다. 1. 지역 변수 (Local Variable) public class Main { public static void main(String[] args) { int localVar = 10; System.out.println(localVar); // 10 } } 메서드 내에서 선언된 변수로 해당 메서드 내에서만 사용이 가능하다. 메서드 호출이 끝나면 소멸되고, 초기화하지 않으면 컴파일 에러가 발생한다. 2. 전역 변수 전역 변수에는 클래스 변수와 인스턴스 변수가 존재한다. [인스턴스 변수] public class Main { public int globalVal; publi..

자바 NumberFormatException 발생 원인 및 예외 처리

자바(Java)에서 발생하는 NumberFormatException 예외에 대해서 알아보겠다. ✅ 예외(Exception) ? 오류(Error) ? : 프로그램 실행 중에 예상 가능한 상황에서 발생하는 문제로 예외 처리를 통해 프로그램의 안전성을 유지할 수 있다. 오류는 예상하지 못한 상황에서 발생하는 심각한 문제로 일반적으로 오류가 발생하면 프로그램이 중단된다. 해당 예외는 "숫자로 변환할 수 없는 문자열이 입력된 경우"에 발생한다. 보통 숫자로 변환할 수 없는 문자열이 입력되면 parseInt(), parseLong() 등과 같은 숫자 변환 메서드에서 NumberFormatException 예외를 발생시킨다. NumberFormatException 예외가 발생하는 원인 1. 숫자로 변환할 수 없는 문..

이클립스 오류 svn:E160024 Some of selected resources where not commited.

이클립스로 개발을 진행하면 svn을 사용해서 서로의 작업을 공유한다. 간혹 작업하는 과정에서 파일이 겹쳐서 충돌이 발생하게 되면 아래와 같은 에러로 인해 커밋이 안되는 경우가 있다. ✅ svn: E1600024: Commit failed 위 에러를 해결하기 위해선 'Override and Update...'를 진행해주면 된다. 충돌이 발생한 파일에 한해서 Override and Update를 진행하기 전에 본인이 했던 작업을 백업해두는 게 좋다. Update를 완료했다면 본인이 했던 작업을 덮어씌우고 Commit을 진행해주면 완료.

자바 Scanner vs BufferedReader 차이점

자바에서 문자열을 입력받는 대표적인 방법에는 Scanner와 BufferedReader가 있다. 오늘 두 개의 차이점에 대해서 알아보려고한다. 자바를 한 번이라도 접해봤으면 Scanner는 사용해봤을거라고 생각된다. 알고리즘을 풀어봤다면 BufferdReader 또한 사용해봤을것이다. 기본 문법 [Scanner] import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); System.out.println(input); } } JDK1.5부터 java.util 패키지에 포함된 클래스로 데이터를..

자바 카운팅 정렬 Counting Sort 계수 정렬 완벽 이해하기

카운팅 정렬 Counting Sort 카운팅 정렬은 시간 복잡도 O(n) 을 가지고 있기 때문에 많은 정렬 알고리즘 중에서 좋은 성능을 갖고 있다. 빠른 정렬 알고리즘에 속하는 퀵 정렬 (Quick Sort), 힙 정렬 (Heap Sort), 합병 정렬 (Merge Sort) 등의 평균 시간 복잡도가O(nlogn) 인 것을 보면 엄청난 속도를 가지고 있다는 것을 알 수 있다. 이처럼 빠른 속도를 가졌음에도 정렬이 필요한 상황에서는 퀵 정렬을 주로 사용한다. 그 이유에 대해서 알아보자. 정렬 과정 카운팅 정렬은 데이터 값이 몇 번 나왔는지 세주는 것이다. 정렬의 이름처럼 수를 counting 해주는 것. 다음과 같은 배열이 있다고 가정해보자. 1. 배열을 쭉 돌면서 해당 값을 index로 하는 새로운 배열..

자바 Comparable과 Comparator 차이점

Comparable과 Comparator 은 인터페이스 (interface) 다. 그렇기 때문에 Comparable 과 Comparator 을 사용하기 위해서는 인터페이스 내에 선언된 메소드를 필수적으로 재정의해야한다. 두 개의 인터페이스는 알고리즘을 풀어보면서 자주 언급했던 부분이다. 실제로 알고리즘과 별개로 꼭 알아두어야하는 인터페이스 중 하나이므로 기억해주는 게 좋다. Comparable 해당 인터페이스에는 compareTo(T o) 메소드 하나가 선언되어있다. 즉, Comparable 인터페이스를 사용하기 위해서는 compareTo(T o) 메소드의 재정의가 필수다. Comparator 해당 인터페이스에는 많은 메소드가 선언되어있다. 하지만 필수로 재정의 해주어야하는 건 compare(T o1, ..

자바 오류 source release 11 requires target release 11 해결

java: warning: source release 11 requires target release 11 프로젝트를 생성했을뿐인데 발생하는 에러다. Project SDK가 build.gradle에 적힌 버전과 맞지 않아서 발생하는 에러로 쉽게 해결할 수 있다. group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' build.gradle 파일을 보면 sourceCompatibility 를 볼 수 있다. "Java 11 버전을 쓰겠다." 라는 뜻이다. Project SDK 확인하는 방법 1. File > Project Structure에 들어간다. 2. Project Settings > Project 목록에 SDK 를 확인해보면 bui..

[JAVA] 얕은 복사와 깊은 복사에 대해서 알아보기

자바에는 얕은 복사 (Shallow Copy) 와 깊은 복사 (Deep Copy) 가 존재한다. 얕은 복사는 복사하려는 배열의 '주소값'을 복사함 깊은 복사는 '실제값'을 새로운 메모리 공간에 복사함 1차원 배열 - 얕은 복사 복사하려는 배열의 주소값을 가져옴 두 개의 배열 중 하나라도 값을 수정한다면 둘 다 수정됨 int[] A = {1, 2, 3}; int[] B = A; B[0] = 5; A[2] = 10; System.out.println(A[0]); // 5 System.out.println(B[2]); // 10 B[0]을 수정했지만 A[0]의 값도 변경되고, A[2]를 수정했지만 B[2]의 값도 같이 변하는 것을 볼 수 있다. - 깊은 복사 복사하려는 배열의 주소값이 아닌 실제값을 가져와서 ..

자바 String, StringBuffer, StringBuilder 차이

자바에서 문자열을 처리할 때 대표적으로 String, Stringbuffer, StringBuilder 3가지를 사용한다. 위 3가지의 차이점은 무엇일까? String int, long, float, char, boolean과 같은 primitive 타입이 아닌 reference 타입의 참조형 변수로 한 번 할당된 공간이 변하지 않는 immutable 자료형이다. String str = "Hello "; str += "World !!!"; 위의 그림을 보면 본래 가리키고 있던 "Hello" 를 버리고 "Hello World !!!" 라는 값을 가지는 메모리 영역을 가리킨다. immutable 자료형의 특징으로 문자열을 수정하게 되면 기존에 있던 메모리 영역은 Garbage Collection 으로 사라지..

자바 정적 (Static) 메서드 정의 및 생성, 사용 예시

정적 (Static) 메서드 정의 Java에서는 Static 변수와 메서드를 만들 수 있는데, 이를 정적 필드와 정적 메서드라고 부르며 이 둘을 합쳐서 정적 멤버(클래스 멤버)라고 합니다. 정적 필드와 정적 메서드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이므로 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리합니다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다. [장점] 1. static 키워드를 붙이면 메모리 할당을 딱 한 번만 하게 되어 메모리 사용에 이점을 볼 수 있음. 그렇기에 항상 값이 변하지 않는 경우라면 static 키워드를 사용하는 것이 좋음 2. static으로 설정하면 같은 곳의 메모리 주소만을 바라보기 때문에 stat..

반응형