본문 바로가기
반응형

IT 개인 공부95

[Java] 향상된 for 문 : for-each Java5에서부터 향상된 for문이라고 부르는 for-each문이 도입되었다. 일반적인 for문과 거의 비슷하지만 내부적으로 조금 다르게 순회하는 방법이다. ​for-each문의 형태는 다음과 같다. for (type var: iterate) { body-of-loop } type은 int, String 등 변수 타입을 의미하며 iterate는 순환할 자료구조를 의미하며 Array나 Collection 등의 자료구조를 사용할 수 있다. ​예를 들어 String 형태의 변수를 가지는 리스트가 있을 경우 이를 순회할 때 다음과 같이 사용할 수 있다. List list = Arrays.asList("A","B","C","D","E"); ---------- 기존의 for 문 -------------- for (.. 2021. 7. 16.
[Java] 정규 표현식(Pattern, Matcher) 정규 표현식(Reqular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 검색하거나 치환하는 과정을 매우 간편하게 처리할 수 있도록 하는 수단이다. ​이메일이나 전화번호 등 특정 문자열을 확인할 때 if문과 for문을 통해 지저분하게 처리하던 것을 정규 표현식을 활용하면 훨씬 간단하고 깔끔하게 처리할 수 있다. ​Java에서는 util.regex 패키지에서 제공하는 Pattern과 Matcher 라이브러리를 사용하여 정규 표현식을 활용할 수 있다. ​실제로 문자열 클래스인 String 클래스는 특정한 조건의 문자를 검색하거나 치환하는 메서드를 정규 표현식을 활용하여 구현하였다. ​대표적으로 matches, replaceAll, replace, split 메서드들이 있다... 2021. 7. 16.
[Java] 참조 유형(Strong, Soft, Weak, Phantom) Java는 모든 것들이 객체로 이루어져 있다고 봐도 무방하다. 또한 객체들은 new 연산을 통해 Heap 영역에 생성되기 때문에 이들은 GC(Garbage Collection) 대상이 될 수 있다. ​Java에선 메모리가 부족하면 JVM의 Garbage Collector가 스택 영역과 힙 영역을 탐색하면서 스택 영역의 변수가 더 이상 참조하지 않는 힙 영역의 객체들에 대해 GC를 수행해 줌으로써 메모리를 관리한다. ​하지만 개발자가 객체의 참조 강도를 약하게 만들어 GC 대상이 될 수 있도록 만들어 JVM의 메모리를 어느 정도 관리할 수도 있다. ​객체의 참조 강도를 조절할 수 있는데 Java의 참조 유형은 크게 Strong, Soft, Weak, Phantom 4가지가 존재한다. 그렇다면 각 유형들에 .. 2021. 7. 16.
[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.
반응형