🙆♂️ 동일성(Identity)동일성은 두 객체가 메모리 상에서 같은 객체인지 비교하는 개념이다. 즉, 동일성은 두 객체가 메모리에서 동일한 위치를 참조하는지 의미한다."==" 연산자를 사용하여 비교한다.즉, "==" 연산자는 객체의 참조(레퍼런스)를 비교한다. 객체의 값이 같아도 항상 true를 반환하는 것은 아닌 것이다.대신 기본 타입에 대해서는 "==" 연산자를 사용하면 값을 비교한다.public static void main(String[] args) { Coffee coffee1 = new Coffee(100); Coffee coffee2 = new Coffee(100); System.out.println(coffee1 == coffee2); // false} 두 Coffee..

🖨 자바에서의 객체 복사자바에서의 객체 복사는 얕은 복사와 깊은 복사가 존재한다. 둘의 차이를 알아보자사용할 예제는 다음과 같다. import java.util.Objects;class Book { private String name; // 책 이름 private Author author; // 저자 public Book(String name, Author author) { this.name = name; this.author = author; } public Book shallowCopy() { // 얕은 복사 return new Book(this.name, this.author); } public Book deepCopy() { // 깊은 복사 Author copiedAuthor = new ..

☝ 일급 컬렉션일급 컬렉션이란 하나의 컬렉션을 감싸는 클래스를 만들고 해당 클래스에서 컬렉션과 관련된 비즈니스 로직을 관리하는 패턴이다. Wrapping된 컬렉션 이외의 다른 멤버 변수는 없어야한다.public class Orders { private final List orders; public Orders(List orders) { this.orders = orders; }}여기서 Order List 컬렉션을 감싼 Orders 클래스가 일급 컬렉션이다. 왜 사용하는가?1️⃣ 비즈니스에 종속적인 자료구조일급 컬렉션에 비즈니스 로직을 작성하면 중복 제거, 안정성 향상, 유지보수성 증가 등의 이점을 얻을 수 있다. Orders라는 일급 컬렉션이 Order 클래스를 관리한다고 해보..

🎮 자바의 Exception자바는 Throwable이라는 모든 예외와 오류의 최상위 클래스를 가진다.그리고 Error와 Exception이 각각 Throwable을 상속하는 구조이다.Exception 클래스는 예외의 슈퍼 클래스로 Checked Exception과 Runtime Exception 으로 나뉜다. Unchecked Exception이 Runtime Exception의 하위 클래스이다. (Error는 Exceptoin에 속하지 않는다.) Checked Exception컴파일 타임에 처리해야 하는 예외로 개발자가 강제적으로 처리해야 하는 Exception 중요한 것은 Checked Exception은 예외 처리가 강제된다는 것이다.public void throwsCheckedException(..
(오랜만에 글을 쓴다. 최근에는 노션에 익숙해지느라 티스토리를 좀 간과했다😥) 인터페이스와 추상클래스는 자바로 개발을 하면 한번씩은 들어본 단어일 것이다.둘의 느낌이 비슷해서 이번에 공부하면서 차이점을 알아보았다. 인터페이스와 추상클래스의 차이인터페이스 : implements(구현)에 초점. 인터페이스에 정의된 메소드들을 각 클래스의 목적에 맞게 기능을 구현하기 위해추상클래스 : extends(상속)에 초점. 추상 클래스의 기능을 하위 클래스로 확장하기 위해추상클래스중복 멤버 통합. 인터페이스는 static final 상수만 정의할 수 있는 차이가 있다.클래스끼리 명확한 계층 구조가 필요할 때 사용 → 클래스와 의미있는 연관관계 구축다형성 : 미리 논리적인 클래스 상속 구조를 만들어 놓고 사용인터페이..

Guitar 클래스가 Instrument 클래스를 상속받는 상황을 가정해보자. public class Instrument { public void play() { System.out.println("악기를 연주합니다."); } } public class Guitar extends Instrument { @Override public void play() { System.out.println("기타를 연주합니다!"); } } 그리고 Guitar 객체를 생성한다. public class InheritanceMain { public static void main(String[] args) { Guitar guitar = new Guitar(); guitar.play(); } } 이 때 Guitar 객체가 참조..
자바의 main 메소드는 static이 붙은 정적 메소드이다. public static void main(String[] args) {...} 왜 main 메소드에 static이 붙었을까? ⛏ static 메소드 static 메소드는 정적 메소드, 클래스 메소드라고도 하는데 객체 생성 없이 클래스로부터 바로 호출이 가능하다. 유틸리티성 메소드에 자주 사용된다. static 메소드는 메소드 영역에 존재하며 클래스로 접근하여 사용할 수 있다. public class StaticMethodMain { public static void main(String[] args) { int a = 30; // 클래스로 바로 접근 int result = StaticMethod.calculate(a); System.out...
⛏ JVM Java Virtual Machine의 약자로, 해석하면 자바 가상 머신이다. (가상 머신 : 프로그램 실행을 위해 물리적 머신과 유사한 머신을 sw로 구현한 것) 즉, JVM은 자바를 실행하기 위한 가상 머신으로 자바의 바이트 코드를 해석하고 실행한다. 특징 1. 운영체제 종류와 상관없이 JVM만 설치하면 자바 파일 실행이 가능하다. 2. 크게 4가지 영역으로 구성되어있다. 1️⃣ Garbage Collector(GC) 힙 영역에 더이상 참조되지 않는 객체들을 제거한다. 자동으로 실행된다. 2️⃣ Class Loader 런타임 시점에 컴파일된 바이트 코드(.class)들을 메모리 할당을 받은 Runtime Data Area로 적재한다. 3️⃣ Execution Engine Class Load..
⛏ final final 키워드는 특정 변수 및 클래스, 메소드 등에 값을 최초 할당 후 변경되지 않게 하는 제약이다. 기본형 변수, 참조형 변수에 모두 사용할 수 있다. 특징 1. final이 붙은 변수는 값 변경이 불가하다. 지역 변수, 매개 변수 public class FinalBasic { public static void main(String[] args) { final int data = 10; // 값 할당 후 변경 불가 // data = 20; changeFinal(10); System.out.println("data : " + data); } static public void changeFinal(final int data) { // final 이 붙은 매개변수도 변경 불가능 // dat..
⛏ 생성자 생성자는 객체 생성 직후 객체에 초기값을 할당하는 메소드이다. 특징 1. 생성자 이름은 클래스 이름과 동일해야 한다. 2. 생성자는 반환 타입을 가지지 않는다. class Member { String name; int age; // 생성자(constructor) Member(String name, int age) { this.name = name; this.age = age; } } 생성자는 인스턴스를 생성한 후 즉시 호출된다. 즉, new 키워드를 통해 인스턴스를 생성한 후 즉시 생성자가 호출되어 객체에 초기값을 할당한다. Member member = new Member("dragon", 20); 왜 쓰나? 객체에 값을 넣어주는 메소드를 만드는 대신 생성자를 사용하는 이유가 무엇일까? 1. ..
- Total
- Today
- Yesterday
- 이진탐색
- upperBound
- 동등성
- springboot
- 일급컬렉션
- Java
- 유효성 검사
- checkedException
- @Value
- 자바
- 메인메소드
- 오블완
- JPA
- NPE
- lowerBound
- Thymeleaf
- Optional
- null
- uncheckedException
- 티스토리챌린지
- N+1문제
- StreamAPI
- ddl-auto
- @Spring
- @ConfigurationProperties
- 백준
- Spring
- id생성전략
- 생성자
- @NoArgsConstructor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |