Language
-
Java - Overloading & OverridingLanguage/Java 2022. 3. 23. 17:55
Overloading (오버로딩) 메서드 시그니처(Method Signature) 메서드 오버로딩의 핵심은 메서드 시그니처에 있다. 메서드 시그니처란 메서드의 선언부에 명시되어 있는 매개변수의 리스트를 말한다. 두 개의 메서드는 다음 조건을 만족하면 같은 시그니처를 가진다고 할 수 있다. 1. 메서드의 이름 2. 매개변수의 수 3. 매개변수 타입의 순서 여기서 중요한 점은 리턴 타입이 메서드 시그니처에 포함되지 않는다는 점이다. public class Test { /** 기준이 되는 메서드 */ public int method(int x, int y) { return x + y; } /** 메서드 정의 가능 */ public int method(int x) { return x; } /** 메서드 정의 가..
-
Java - Checked Exception & Unchecked ExceptionLanguage/Java 2022. 3. 22. 15:09
예외(Exception)와 에러(Error) 예외(Exception)란? 프로그래밍에서 예외란 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름에 어긋나는 경우를 말한다. 그리고 Java에서 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링할 수 있다. 에러(Error)란? 에러는 시스템에 무엇인가 비정상적인 상황이 발생한 경우를 말한다. 주로 JVM에서 발생하는 것이며, 예외와 반대로 이를 애플리케이션 코드에서 잡을 수 없다. 에러의 예시로는 OutOfMemoryError, ThreadDeath, StackOverflowError 등이 있다. 예외 구분 예외는 위 그림과 같이 Checked Exception과 Un..
-
Java - 직렬화(Serialization)와 역직렬화(Deserialization)Language/Java 2022. 3. 21. 17:48
데이터 직렬화와 역직렬화 데이터 직렬화와 역직렬화란? 데이터 직렬화 : 메모리의 데이터를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것이다. 데이터 역직렬화 : 디스크에 저장한 데이터를 읽거나 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것이다. 데이터를 저장하거나 통신하기 위해 직렬화 과정을 거치는 것은 알겠는데, 왜 데이터를 그냥 사용하지 않고 이러한 과정을 거치는 것일까? 직렬화가 필요한 이유 어떠한 개발 언어를 사용하던지 간에 사용하는 데이터는 다음과 같이 크게 두 가지로 나뉜다. 값 형식 데이터 : int, float, char 등 값 형식 데이터는 Stack에 메모리가 쌓이고 직접 접근이 가능하다. 참조 형식 데이터 : 객체와 같은 참조 형식 변수..
-
Java - staticLanguage/Java 2022. 3. 4. 13:24
static static이란? static은 고정된이라는 의미를 가지고 있으며, static 키워드를 통해 정적 필드와 정적 메서드를 만들 수 있다. 정적 필드와 정적 메서드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이기 때문에 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용이 가능하며, 프로그램이 종료되기 전까지 사용할 수 있다. static 키워드를 통해 생성된 정적 멤버들은 heap 영역이 아닌, static 영역에 할당된다. static 영역에 할당된 메모리는 Garbage Collection의 관리 영역 밖에 존재하기 때문에 프로그램이 종료될 때까지 메모리에 값이 유지된 채로 존재하게 된다. ..
-
Java - 동일성(identity) & 동등성(equality)Language/Java 2022. 3. 3. 16:47
동일성(identity) & 동등성(equality) 동일성이란? 동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수가 같은 객체를 가리키게 된다. 위 사진에서 refVar1은 객체1을 가리키고 있고, refVar2와 refVar3는 객체2를 가리키고 있다. refVar2와 refVar3는 동일한 객체를 가리키고 있으므로, 두 변수는 동일하다고 이야기할 수 있다. 그리고 해당 변수가 동일한지 "==" 연산자를 통해 판별할 수 있다. 추가적으로, Primitive Type은 객체가 아니라 주소가 없으므로 "==" 연산자를 사용하였을 때 내용이 같으면 동일하다고 말한다. 동등성이란..
-
Java - Call by Value & Call By ReferenceLanguage/Java 2022. 2. 21. 13:23
Call by Value & Call by Reference Call by Value(값에 의한 호출) void function(int number) { number = 20; } void main() { int number = 10; function(number); printf("%d", number); // 출력되는 값은 10 } - 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성되고, 종료 시 해당 공간이 사라진다. - 해당 호출 방식은 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달한다. 이때, 복사된 인자는 함수 안에서 지역적으로 사용되기 때문에 local value의 속성을 가진다. - 따라서, 함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경..