Java

    String Class (3) - 정규표현식

    정규표현식이란? 정규표현식은 메타문자를 활용해서 특정 조건에 맞는 문자열을 포현하는 식입니다. 이것이 왜 필요하냐? 간단한 예시로 간단한 이메일형식의 문자열을 나타낸다면 정규표현식으로 \\\\w+@\\\\w+\\\\.\\\\w+와 같이 나타낼수 있습니다. 그리고 이를 조건으로 활용해서 문자열 내에 이메일만 존재하는지도 체크할수도 있죠. 정규표현식이 없다면 꽤나 복잡한 과정을 거쳐 구했을 것입니다. 문자 클래스 문자 클래스는 [] 안에 문자를 넣어 사용합니다. 정확한 의미는 “대괄호 안에 있는 문자 중 하나”를 의미합니다. 예시는 다음과 같습니다. String regex = "[hi]" //h, i 중 하나 String regex = "[^hi]" //h, i 를 제외한 문자 중 하나 String rege..

    String Class (2) - 주요 메서드

    이번 게시글에선 주로 사용하는 문자열 관련 메서드를 알아봅시다. 주의할 점은 String 객체는 불변이기 때문에 (Strring Class (1) - String Pool과 Immutable 참고) 해당 메서드들이 객체가 가지고 있는 값을 변경할 수 없다는 점을 알아두셔야 합니다. 문자열과 숫자 간 형 변환 우선 형변환부터 알아보겠습니다. 여기서 알아볼 형변환은 숫자와 문자열 간 형 변환입니다. //int => String int number1 = 0; String text1 = String.valueOf(number1); System.out.println(text1); //0 //String => int String text2A = "10"; String text2B = "hello"; int numb..

    String Class (1) - Immutable과 StringBuilder/StringBuffer

    String Pool과 Immutable String은 객체입니다. 원시타입처럼 사용하지만 실제론 new를 통해 생성이 가능한 객체입니다. 그렇다면 {} 사용한 방식과는 차이가 무엇일까요? 코드를 통해 알아보겠습니다. public static void main(String[] args) { String text1 = "hello"; String text2 = "hello"; String text3 = new String("hello"); String text4 = new String("hello"); System.out.println(text1 == text2); //true System.out.println(text3 == text4); //false } 위와 같이 {}를 사용한 String 객체들은 ..

    추상클래스와 인터페이스의 차이

    ( 2022.05.15 수정 - 내용 추가와 글 서식 변경 ) 자바8에서 람다에 대한 내용이 추가됨에 따라 인터페이스에서 메서드를 구현할수 있게되었습니다. 이전에는 추상클래스와 인터페이스의 주요 차이점은 구현과 상속이었습니다. 하지만 이제 구현까지 인터페이스에서 가능해짐에 따라 이 둘의 경계가 모호해졌습니다. 그렇다면 차이점은 무엇일까요? 인터페이스와 추상메서드의 공통점 dafult 키워드를 사용하면 인터페이스 안에서 필드 사용과 메서드를 구현할 수 있게 되었습니다. public interface HelloInterface { String text = "hello"; default void sayHello() { System.out.println(text); } } public class People i..

    Call by value

    함수 호출 시 매개변수로 전달받은 인자는 원본 데이터일까요? 우리 자바는 "원본 데이터가아닌 복사한 값을 전달받는 Call by value 방식"을 사용합니다. 예시를 통해 알아봅시다. public class CallByValue { public static void toZero(int data) { data = 0; } public static void main(String[] args) { int data = 100; System.out.println("호출 전 : " + data); //호출 전 : 100 toZero(data); System.out.println("호출 후 : " + data); //호출 후: 100 } } toZero() 메서드 내에서 원본 데이터를 변경하려 했지만 변경이 되지 ..

    생성자와 상속의 관계

    생성자는 객체 생성 시 자동으로 호출되는 메서드입니다. 하지만 생생자는 일반적인 메서드와는 달리 "상속이 불가능" 합니다. 이에 따라 상속받은 클래스는 생성자를 매번 "재정의" 해주어야 합니다. 그렇다면 여러분은 상속받은 클래스가 생성자를 재정의하는 것을 보신적이 있으신가요? 아마 많이 보지 못했을 겁니다. 부모 클래스의 생성자가 "매개변수가 없다면 자식 클래스의 생성자는 생략이 가능" 하기 때문이죠. public class Parent { //부모 생성자 public Parent() { System.out.println("constructor"); } } public class Me extends Parent{ public void say() { System.out.println("hello"); } ..