반응형 분류 전체보기313 [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. 백준 9935 : 문자열 폭발 https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net [ 문제풀이 ] 주어진 문자열의 길이가 최대 1000000이기 때문에 문자열에서 폭발 문자열이 존재하지 않을 때까지 탐색 후 제거하는 방법으로는 TLE가 발생하게 된다. 해당 문제는 한번의 탐색으로 탐색 및 제거를 처리해줘야 하는데 이는 스택 자료구조를 활용하면 해결할 수 있다. 문자열을 처음부터 탐색하다가 폭발 문자열의 마지막 문자를 만나게되면 스택의 Top부터 역으로 폭발 문자열.. 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. 이전 1 ··· 22 23 24 25 26 27 28 ··· 35 다음 반응형