목록Language/Java (24)
devseop08 님의 블로그
Object루트 클래스: 자바의 모든 클래스는 암묵적으로 Object 클래스를 상속한다.class A {}는 class A extends Object {}와 동일하다.주요 메서드와 기능: 기본적으로 객체의 동일성, 동기화/통신(wait/notify), 복제, 런타임 타입 정보 등을 제공하는 메서드를 정의한다.메서드설명비고 / 주의equals(Object o)객체의 논리적 동등성을 비교. 기본 구현은 참조(identity) 비교 (==).재정의 시 hashCode()도 반드시 함께 재정의해야 한다.hashCode()객체를 해시 테이블에 넣을 때 사용하는 정수 값. equals와의 계약이 있음.equals가 같다면 hashCode도 같아야 한다.toString()객체를 사람이 읽을 수 있는 문자열로 표현. ..
자바 1.0에서는 java.util.Date 클래스 하나로 날짜와 시간 관련 기능을 제공Date 클래스의 문제1.'Date'라는 클래스 이름과 달리 Date 클래스는 특정 시점을 날짜가 아닌 밀리초 단위로 표현2.1900년을 기준으로 하는 오프셋, 0에서 시작하는 달 인덱스 등 모호한 설계로 인한 유용성하락3.Date 클래스의 toString으로는 반환되는 문자열을 추가로 활용하기 어렵다.(Date는 JVM 기본 시간대인 CET, 즉 중앙 유럽 시간대를 사용했는데 이것이 문자열로 반환된다.)Date 클래스는 자체적으로 시간대 정보를 알고 있지도 못한다.자바 1.1에서는 Date 클래스의 여러 메서드를 deprecated시키고 java.util.Calendar 클래스를 대안으로 제공Calendar 클래스의..
11.1 값이 없는 상황을 어떻게 처리할까?전형적인 문제 상황public class Person { private Car car; public Car getCar(){ return car; }}public class Car { private Insurance insurance; public Insurance getInsurance() { return insurance; }}public class Insurance { private String name; public String getName() { return name; }}public String getCarInsurance(Person person) { return person.getCar().getInsuran..
얕은 복사(Shallow Copy)얕은 복사: 참조의 대상은 복사해서 늘리지 않고 참조자만 늘리는 형태사이드 이펙트 발생의 원인이 된다.대상 인스턴스는 그대로 두고 참조만 늘어나는 경우참조자에 참조자를 대입하여 두 개의 참조자가 동일한 하나의 인스턴스를 참조하게 하는 방식참조자가 참조하는 인스턴스 안의 값(내용)을 복사해오는 것이 아니다.여러 참조자가 하나의 인스턴스를 공유하게 된다. => 공유하는 하나의 인스턴스 상태를 변경 시 변경으로 인한 영향이 전파된다.얕은 복사 예시class Address { public String addr; public String phone; public Address(String addr, String phone) { this.addr = ..
변수와 타입변수는 데이터가 저장되는 메모리 공간이고, 변수의 형태, 즉 메모리 공간의 형태를 메모리 공간 타입, 변수의 타입이라 한다.자바는 정수, 실수, 문자, 논리값 데이터를 저장할 수 있는 메모리 공간의 기본 타입을 제공한다.정수 타입 : byte, char, short, int, longbyte크기 : 8비트, 1바이트값의 저장 범위: -2^7 -1 ~ 2^7 -1short크기 : 16비트, 2바이트값의 저장 범위: -2^15-1 ~ 2^15-1char => 유니코드(문자)에 해당하는 이진수 데이터들을 저장할 수 있다.크기 : 16비트, 2바이트값의 저장 범위 : 0~ 2^16-1int크기 : 4바이트값의 저장 범위: -2^31-1 ~ 2^31-1long크기: 8 바이트값의 저장 범위: -2^63..
프로그래밍 언어의 주요 목표는 메시지를 명확하고, 안정적인 방식으로 전달하는 것무엇보다 의도가 명확하게 전달돼야 한다.개발팀과 도메인 전문가가 공유하고 이해할 수 있는 코드는 생산성과 직결도메인 전용 언어로 애플리케이션의 비즈니스 로직을 표현함으로 이 문제를 해결 가능DSL은 범용이 아니라 특정 도메인을 대상으로 만들어진 특수 프로그래밍 언어다.Maven, Gradle, Ant => 빌드 과정을 표현하는 DSLHTML은 웹 페이지 구조를 정의하도록 특화된 언어SQL 언어같은 종류의 DSL을 외부적이라 하는데, 이는 데이터베이스가 텍스트로 구현된 SQL 표현식을 파싱하고 평가하는 API를 제공하는 것이 일반적이기 때문이다.menu.stream() .filter(d -> d.getCalories() 위..
람다 표현식을 이용해 가독성과 유연성을 높이기 위한 코드 리팩터링람다 표현식으로 전략, 템플릿 메서드, 옵저버, 팩토리 등의 객체지향 디자인 패턴을 어떻게 간소화 시킬지람다 표현식과 스트림 API를 사용하는 코드를 테스트하고 디버깅하는 방법9.1 가독성과 유연성을 개선하는 리팩터링9.1.1 코드 가독성 개선람다, 메서드 참조, 스트림을 황용해서 코드 가동성 개선 예제 3가지익명 클래스를 람다 표현식으로 리팩터링람다 표현식을 메서드 참조로 리팩터링명령형 데이터 처리를 스트림으로 리팩터링9.1.2 익명 클래스를 람다 표현식으로 리팩터링익명 클래스는 코드를 장황하게 만들고 쉽게 에러를 일으킨다.람다 표현식으로 간결하고 가독성이 좋은 코드를 만들 수 있다.Runnable r1 = new Runnable() { ..
중첩 클래스와 중첩 인터페이스객체지향 프로그래밍에서 클래스들은 서로 긴밀한 관계를 맺고 상호작용어떤 클래스는 여러 클래스와 관계를 맺지만 어떤 클래스는 특정 클래스와 관계를 맺는다.클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나,클래스가 특정 클래스와 관계를 맺을 경우에는 해당 클래스 내부에 특정 클래스를 선언하는 것이 좋다중첩 클래스중첩 클래스란 클래스 내부에 선언한 클래스를 말한다.중첩 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있는 장점이 있다.class ClassName { class NestedClassName { }}중첩 클래스의 분류중첩 클래스는 클래스 내부에 ..