본문 바로가기
반응형

IT 개인 공부/Java38

[Java] Optional : Null을 처리하는 방법 Java에서는 null을 사용하여 존재하지 않는 객체를 표현한다. ​null 값을 사용함으로써 존재하지 않는 값을 표현할 수 있는 장점이 있지만 NPE(NullPointerException)이 발생할 수 있는 단점이 존재한다. NPE는 프로그램을 실행하는 런타임 시 발생하기 때문에 개발자들은 NPE를 사전에 발견하고 처리하기가 상당히 까다롭다. ​또한, Java는 모든 것이 객체로 이루어져 있다고 해도 무방할 정도로 무수히 많은 객체가 존재하기 때문에 NPE는 상당히 많은 곳에서 발생할 수 있으며 이를 모두 고려해주는 것은 힘들다. ​ 예를 들어 다음과 같이 Person과 University 클래스가 있다고 하자. class Person { String name; int age; University un.. 2021. 7. 15.
[Java] Scanner vs BufferedReader Java를 처음 공부할 때는 Scanner 클래스를 사용하여 데이터들을 입력받았을 것이다. import java.util.Scanner; public class Main { public static void main(String args[] ) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); //정수형 데이터를 입력 System.out.println(num); sc.close(); } } 하지만 Problem Sovling을 하다 보면 입력이 굉장히 많은 문제가 있는데 이때는 Scanner를 사용하면 시간 초과가 발생하게 된다. 이를 해결하기 위해서는 BufferedReader 클래스를 사용해야 한다. ​그렇다면 Scanner와 Buffer.. 2021. 7. 15.
[Java] Comparable vs Comparator Java에서 배열이나 리스트의 원소들을 특정 기준으로 정렬하기 위해서 사용하는 방법은 Comparable 인터페이스나 Comparator 인터페이스를 사용하는 방법이 존재한다. ​이들은 비슷하면서도 다른 점이 존재하는 친구들이다. 한번 공부 및 정리해보도록 하자. ​ 우선 Comparable과 Comparator 인터페이스는 다음과 같이 구성되어 있다. package java.lang; public interface Comparable { public int compareTo(T o); } -------------------------------------- package java.util; @FunctionalInterface public interface Comparator { int compare(.. 2021. 7. 15.
[Java] String 객체 선언 방법 & String Constant Pool Java에서 문자열을 나타내는 String 객체를 선언하는 방법은 new 연산을 통해 객체를 생성하는 방법과 ""를 이용해서 생성하는 리터럴 방법이 존재한다. String a = new String("Hello"); //new 연산 String b = "Hello"; //리터럴 방식 그렇다면 이 두 방식의 차이는 무엇일까? 이에 대해 알아보기 전에 간단한 예제를 한번 보도록 하자 ​Java에서 객체 간의 '==' 연산은 두 객체의 주소가 같은지를 비교한다. 다음과 같이 4개의 String 객체를 선언하여 각각 주소를 비교해보자. 분명히 a, b, c, d는 서로 다른 객체니 주소가 달라야 할 것이다. public class Main { public static void main(String[] args).. 2021. 7. 15.
[Java] equals vs '==' & hashCode Java에서는 두 개의 데이터가 같은지 비교할 때 equals() 메서드나 '==' 비교연산자를 통해 비교한다. 이들의 차이에 대해서 한번 정리해보자. Java에는 크게 두 가지 데이터 타입이 존재한다. 원시 타입의 데이터는 '==' 비교연산자로만 두 데이터가 같은지 비교할 수 있으며 equals() 메서드는 사용할 수 없다. 왜냐하면 equals() 메서드는 Object 클래스의 메서드이기 때문에 원시 타입의 데이터는 사용할 수 없다. ​반면, 참조 타입의 데이터는 Object 클래스를 상속받기 때문에 '==' 비교연산자와 equals() 메서드 모두 사용이 가능하다. 그렇다면 두 방법은 뭐가 다른 것일까? ​ '==' 비교연산자는 두 객체의 주소를 비교하여 동일한지 판단한다.​​ 즉, 두 객체가 같은.. 2021. 7. 14.
[Java] 객체 직렬화(Serialization)와 역직렬화(Deserialization) 객체지향 언어인 Java는 프로그램의 모든 데이터들이 객체로 이루어져 있다고 봐도 무방하다. ​그렇다면 Java로 만든 프로그램의 데이터(객체)를 외부로 전송하려면 어떻게 해야 할까? 네트워크를 공부했다면 기본적으로 데이터인 객체 그 자체를 네트워크 상으로 전송할 수 없다는 것을 알 것이다. 이를 전송하기 위해선 객체 그 자체보단 조금 더 단순한 형태로 변환해야 할 것이다. ​ Java의 I/O 처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체의 내용을 저장/복원하거나 네트워크 상으로 전송하기 위해서는 객체의 내용을 I/O가 처리할 수 있는 형태로 변환해 줘야 한다. ​Java에서 말하는 객체 직렬화는 이처럼 Java의 객체를 외부로 저장/복원하거나 네트워크 상으로 전송할 수 있도.. 2021. 7. 14.
[Java] Call by Value vs Call by Reference 함수의 호출 방식에서 대표적인 방식은 Call by Value(값에 의한 호출)와 Call by Reference(참조에 의한 호출), 두 가지 방식이 존재한다. ​아마 바로 Java를 접하였으면 잘 모를 수도 있지만 C 계열의 언어를 접해봤다면 Call by Value와 Call by Reference를 한 번쯤은 들어봤을 것이다. ​우선 간단한 swap 함수(교환하는 함수)를 통해 Call by Value와 Call by Reference에 대해서 알아보자. #include using namespace std; void swapCallByValue(int A, int B) { int temp = A; A = B; B = temp; } void swapCallByReference(int* A, int*.. 2021. 7. 14.
[JAVA] 정적 바인딩(Static Binding) vs 동적 바인딩(Dynamic Binding) 이전 오버로딩(Overloading)과 오버라이딩(Overriding)을 공부할 때 오버로딩은 정적 바인딩되고 오버라이딩은 동적 바인딩된다고 하였다. 그렇다면 여기서 말하는 바인딩은 무엇일까? 이에 대해서 한번 공부 및 정리해 보려고 한다. ​ 바인딩(Binding)이란 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위를 의미한다. 즉, 프로그램에서 사용되는 변수나 메서드 등 모든 것들이 결정되도록 연결해주는 것을 뜻한다. ​이러한 바인딩은 바인딩이 되는 시점에 따라 정적 바인딩과 동적 바인딩으로 구분할 수 있다. 그렇다면 왜 오버로딩은 정적 바인딩이며 오버라이딩은 동적 바인딩일까? ​오버로딩은 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것.. 2021. 7. 14.
[JAVA] Static 이란? 자바로 프로그래밍을 하다 보면 다음과 같은 Static 키워드를 접해봤을 것이다. public static void main(String[] args) { ... } 상당히 중요한 개념이기 때문에 Static에 대해서 한 번 공부 및 정리해보도록 하자 Static은 '정적', '고정된'이라는 의미를 가지며 Static 변수와 Static 메서드로 사용할 수 있다. 이를 합쳐서 정적 멤버라고 부른다. ​그렇다면 일반적인 멤버와 Static 키워드가 붙은 정적 멤버의 차이는 무엇일까? 일반적인 멤버는 자신들이 선언된 클래스의 객체를 통해서 접근할 수 있는 반면, 정적 멤버는 객체 없이 접근할 수 있다. (물론 객체를 통해서도 접근이 가능하다) ​간단한 예시로 Math 클래스의 변수나 메서드를 사용할 때 우리.. 2021. 7. 13.
반응형