Java 39

래퍼 클래스, Class 클래스

래퍼클래스 - 기본형의 한계자바는 객체 지향 언어이다. 그런데 자바에서 객체가 아닌 것이 있는데 바로 int, double 같은 기본형 타입이다.기본형은 객체가 아니기 때문에 객체 지향 프로그래밍의 장점을 살릴 수 없다.객체는 유용한 메서드를 제공할 수 있는데, 기본형은 객체가 아니므로 메서드를 제공할 수 없다.추가로 객체 참조가 필요한 컬렉션, 제네릭을 사용할 수 없다.그리고 null값을 가질 수 없다. 때로는 데이터가 없음이라는 상태를 나타내야 할 필요가 있는데, 기본형은항상 값을 가진 상태이기 때문에 null을 표현할 수 없다. package wrapper;public class MyIntegerMethodMain0 { public static void main(String[] args) { ..

Java 2024.10.17

String 클래스

String은 클래스이다. 즉 참조형이다 문자열은 자주 사용되니 편의상 쌍따옴표로 문자열을 감싸면 자바에서 아래와 같이 자동으로 변경해준다. package lang.string;public class StringBasicMain { public static void main(String[] args) { String str1 = "hello"; //String str1 = new String("hello"); }}(실제로는 성능 최적화를 위해 문자열 풀을 사용한다) public final class String implements java.io.Serializable, Comparable, CharSequence, Constable, C..

Java 2024.10.15

불변 객체

기본형과 참조형의 공유 자바의 데이터타입은 기본형(Primitive Type), 참조형 (Reference Type)으로 나눌 수 있다.기본형: 하나의 값을 여러 변수에서 절대 공유하지 않음int a = 10;int b = a;b = 20;// a = 10 , b = 20 참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있음Address a = new Address("서울");Address b = a;b.setValue("부산");// a,b 둘 다 부산으로 변경 공유 참조와 사이드 이펙트사이드 이펙트(Side Effect)는 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는것을 말한다.이로인해 디버깅이 어려워지고 코드의 안정성이 저하될 수 있다.(엄한곳에서 버그가 ..

Java 2024.10.10

Object

자바에서 모든 클래스의 최상위 부모는 항상 Object 클래스이다. 부모가 없는 클래스는 묵시적(Implicit)으로 Object 클래스를 상속한다. 이유1. 공통기능 제공 - 공통된 메서드를 지원하기 때문에 일관성 있고 단순화된 프로그래밍 가능2. 다형성의 기본 구현 - Object 클래스는 모든 객체를 참조할 수 있다. 다양한 타입의 객체를 통합적으로 처리 가능 Object의 다형성 Object 는 모든 객체 대상으로 다형적 참조를 할 수 있다. (모든 객체를 담을 수 있다)그러나 모든 객체를 참조할 수 있다고 해도, 모든 메서드를 알고 있는 것은 아니다. 객체를 호출하려면 다운캐스팅이 필요하다.당연히 Object 클래스의 메서드는 자식클래스에서 오버라이딩이 가능하다. 결과적으로 다형적 참조는 가능하..

Java 2024.10.09

제네릭 - 제한된 타입 파라미터/ 와일드카드

경우에 따라 타입 파라미터를 대체하는 구체적인 타입을 제한할 필요가 있다. 숫자를 연산하는 제네릭 메소드는 대체 타입으로 Number 또는 자식클래스 (Byte, Short, Integer ....)로 제한 할 필요가 있다. 상위 타입은 클래스뿐만 아니라 인터페이스도 가능하다. 인터페이스라고 해서 implements를 사용하진 않는다. package ch13.sec04;public class GenericEx { // 제한된 타입 파라미터를 갖는 제네릭 메소드 public static boolean compare(T t1, T t2) { System.out.println("compare: " + t1.getClass().getSimpleName() + ", " + ..

Java 2024.07.11

제네릭(Generic) 메소드

제네릭 메소드는 타입 파라미터를 가지고 있는 메소드를 말한다.제네릭 메소드는 리턴 타입 앞에 기호를 추가하고 타입 파라미터를 정의한 뒤, 리턴 타입과 매개변수 타입에서 사용한다. package ch13.sec03.ex01;public class Box { private T t; public T get() { return t; } public void set(T t) { this.t = t; }} package ch13.sec03.ex01;public class GenericEx { public static Box boxing(T t) { Box box = new Box(); box.set(t); return..

Java 2024.07.11

제네릭 (Generic)

제네릭이란 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타이븡로 대체시키는 기능 package ch13.sec01;public class Box { public T content;} Box 클래스에서 결정되지 않은 content 타입을  T라는 타입 파라미터로 정의했다. 는 타입 파라미터를 뜻하는 기호로, 타입이 필요한 자리에 T를 사용할 수 있음을 알려준다.여기서 Box 클래스는 T를 content 필드의 타입으로 사용했다. 즉 Box 클래스는 T가 무엇인지 모르지만,Box 객체가 생성될 시점에 다른 타입으로 대체된다는걸 알고있다. package ch13.sec01;public class GenericEx { public static void main(Stri..

Java 2024.07.10

어노테이션

@으로 작성되는 요소를 어노테이션이라고 한다.어노테이션은 클래스 또는 인터페이스를 컴파일하거나 실행할 때 어떻게 처리해야 할 것인지를 알려주는 설정 정보이다. 어노테이션의 세가지 용도1. 컴파일 시 사용하는 정보 전달2. 빌드 툴이 코드를 자동으로 생성할 때 사용하는 정보 전달3. 실행 시 특정 기능을 처리할 때 사용하는 정보 전달 컴파일 시 사용하는 정보 전달의 대표적인 예는 @Override 어노테이션이다. @Override는 컴파일러가 메소드 재정의 검사를하도록 설정한다. 정확히 재정의 되지 않았다면 컴파일러는 에러를 발생 시킨다. 어노테이션 타입 정의와 적용어노테이션도 하나의 타입이므로 어노테이션을 사용하기 위해서는 먼저 정의부터 해야한다.어노테이션을 정의하는 방법은 인터페이스를 정의하는 것과 유..

Java 2024.07.10

정규표현식

문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야 하는 경우가 있다.예를 들어 이메일이나 전화번호를 사용자가 제대로 입력했는지 검증할 때 이다.자바 정규표현식(Regular Expression)을 이용해서 문자열이 올바르게 구성되어 있는지 검증할 수 있다.기호설명.임의의 단일 문자 (개행 문자를 제외한 모든 문자)^문자열의 시작$문자열의 끝*0회 이상 반복 (전의 문자가 0번 이상 반복)+1회 이상 반복 (전의 문자가 1번 이상 반복)?0회 또는 1회 반복 (전의 문자가 0번 또는 1번 나타남)``[]문자의 집합 또는 범위 (e.g., [a-z]는 소문자 알파벳 a부터 z까지 중 하나)[^]NOT 연산 (e.g., [^a-z]는 소문자 알파벳이 아닌 문자)()그룹화 (하나의 단위로 묶어서 서브패턴을..

Java 2024.07.10