추상 클래스와 인터페이스는 클래스의 기본 구조를 정의하는 공통점이 있지만 차이점이 있다.본 글에서는 추상 클래스와 인터페이스의 차이를 알아보려고한다. 추상클래스와 목적추상 클래스는 클래스들의 공통적인 필드와 메서드를 추출해서 선언한 클래스로, 실체 클래스와 상속의 관계를 가진다.공통된 속성과 행동을 통일할 목적으로 사용하는데, 실체 클래스가 여러개이고 설계하는 사람도 여러명이라고 가정했을 때 실체 클래스마다 속성과 행동이 다를 수 있다.예를 들어 전기차, 하이브리드차, 내연기관차는 자동차라는 공통점이 있다. 바퀴, 창문, 라이트와 같이 공통된 속성이 있고 전진과 후진이라는 행동을 가진다. 하지만 전기차, 하이브리드차, 내연기관차에 대한 클래스를 생성할 때 동일한 속성과 행동을 가짐에도 불구하고 다른 이름..
싱글톤이 무엇이고 메모리 관점에서 어떻게 동작하는지에 대해 알아보려고 한다.싱글톤 패턴클래스에서 오직 한 개의 객체만 갖도록 보장하고, 객체에 대한 전역적인 접근점을 제공하는 패턴이다. 싱글톤프로그램 내에서 단 한번만 생성된 객체이다. 왜 그리고 언제 사용할까싱글톤을 사용하는 목적은 하나의 객체가 반복적으로 생성되지 않도록 보장하기 위한 것이다.즉 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근점으로 모든 사용자가 접근할 수 있도록 해야할 때 사용한다.예로 데이터베이스 연결(DBCP, Database Connection Pooling)이 있다. 데이터베이스 연결이 필요한 곳에서 매번 새로운 연결 객체를 생성한다면, 리소스 낭비가 발생하고 성능 저하가 일어날 수 있다. 객체를 사용할 때 데이터베이..
객체지향의 특징 중 다형성이 상속과 인터페이스에서 각각 어떻게 구현되는지 알아보려고 한다.타입 변환상속과 인터페이스의 다형성에서 동일하게 적용되는 기술은 타입 변환이다.타입 변환에는 두 가지 방법이 있다.Upcasting(자동 타입 변환) 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.상속에서는 자식 클래스가 부모 클래스의 타입으로, 인터페이스에서는 구현 클래스가 인터페이스 타입으로 변환되는 것이다.Downcasting(강제 타입 변환) 개발자가 명시적으로 선언해야하는 타입 변환 과정이다.상속에서는 부모 클래스가 자식 클래스 타입으로, 인터페이스에서는 인터페이스 타입이 구현 클래스로 변환되는 것이다. 강제 타입 변환 시 거쳐야 하는 과정이 있는데, 바로 객체 타입 확인이다.instan..
인스턴스 멤버와 정적 멤버를 나누는 이유에 대해 알아보려고 한다.인스턴스 멤버와 정적 멤버인스턴스 멤버는 객체를 생성한 후 사용할 수 있는 필드와 메서드로 heap 영역에 할당된다.객체를 생성한 후 사용할 수 있기 때문에 객체 생성 없이 사용할 수 없으며, 객체가 생성되는 시점에 메모리에 할당된다. 즉 모든 객체는 독립적인 속성을 갖게 된다.인스턴스 멤버를 사용하려면 new 연산자를 사용하여 객체를 생성하고 객체.인스턴스멤버 형태로 사용한다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드로 method 영역에 할당된다. 정적 멤버로 선언하려면 필드와 메서드 선언 시 static 키워드를 붙이면 된다.클래스의 고정된 멤버이기 때문에 클래스 로더가 클래스를 로딩할 ..
final 키워드는 어떻게 활용되는지에 대해 알아보려고 한다.finalfinal 은 최종적이라는 뜻으로, 해당 선언이 최종 상태이고 수정될 수 없다.final 키워드는 필드와 메서드 그리고 클래스에 선언할 수 있는데 각각 해석이 다르다.필드, 메서드 그리고 클래스에 final 키워드를 선언하였을 때 어떻게 해석되는지 알아본다. final 클래스클래스에 final 키워드를 선언하면 해당 클래스는 자식클래스를 가질 수 없다. 즉 상속될 수 없다.해당 클래스가 최종적인 클래스가 되기때문에 자식클래스를 만들 수 없는 것이다.따라서 자식클래스를 갖는 부모클래스에 final 키워드를 선언하도록 변경할 때 주의해야 한다.public final class Vehicle {}/* final 로 선언 된 Vehicl..
생성자는 new 연산자를 사용하여 객체를 초기화하는 특별한 메서드이다.생성자의 종류와 생성자를 다양하게 선언할 수 있는 방법에 대해 알아보려고 한다. 생성자 종류생성자의 종류는 기본 생성자와 사용자 정의 생성자 두 가지로 볼 수 있다.기본 생성자는 매개변수가 없는 생성자로 특별한 동작이 없고 필드를 기본값으로 초기화한다. 클래스는 기본 생성자를 제공한다. 이는 클래스 내부에 생성자 선언을 명시적으로 하지 않았다면 컴파일러는 자동으로 기본 생성자를 바이트 코드에 추가한다는 것이다.사용자 정의 생성자는 매개변수를 받아 특정 값으로 필드를 초기화하는 생성자이다.프로그래머가 사용자 정의 생성자를 정의하였다면 컴파일러는 기본 생성자를 자동으로 추가하지 않는다. 기본 생성자를 사용하고 싶은데 사용자 정의 생성자를 ..
이 글은 클래스의 구성 멤버와 이를 통해 클래스 설계하는 방법에 대해 알아보려고 한다. 클래스와 객체 그리고 인스턴스클래스는 객체를 생성하기 위한 설계도이다.클래스는 객체가 가지는 속성(필드)과 동작(메서드) 그리고 생성자를 정의한다. 객체는 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 객체와 식별 가능한 존재이다. 클래스로부터 만들어진 객체를 인스턴스라고 한다. 클래스로부터 객체를 만드는 과정을 인스턴스화라고 하며 해당 인스턴스는 heap 영역에 할당된다.인스턴스는 클래스의 구체적인 실체의 객체를 의미하며 객체는 더 넓은 의미로 사용된다.모든 인스턴스는 객체가 될 수 있지만, 모든 객체는 인스턴스가 아니라고해.. Car car = new Car(); 클래..
enum 값을 비교할 때, == 연산자를 사용해서 비교해 본 적이 있다.객체 비교 시 == 연산자는 객체의 내용이 아닌 동일한 메모리 주소를 가리키는지 비교하기 위해 사용한다.enum을 선언하였을 때 어떻게 메모리에 할당되고 어떻게 접근하는지, 그리고 왜 == 연산자를 사용해도 되는지에 알아보려고 한다.Enum열거 타입은 한정된 상수 집합에 의해 정의되는 타입으로, 클래스이다.열거 상수는 열거 타입에서 정의된 개별 값으로, 열거 타입의 인스턴스이다. Enum 선언public enum DrivingStatus { DRIVE, NEUTRAL, REVERSE, PARKING;}enum은 클래스처럼 정의한다.열거 타입은 DrivingStatus 이며, 열거 상수로는 DRIVE, NEUTRAL, REVERSE, ..
배열의 정의와 특징 그리고 사용하는 방법만 알았을 뿐, 실제로 내부적으로 어떻게 동작하는지 생각해보지 않았었다.그래서 배열이 선언되었을 때 어떻게 메모리에 할당되고 접근할 수 있는지에 대해 알아보려고 한다.배열같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여한 자료구조이다.메모리는 연속적으로 생성되고, 같은 타입의 데이터만 저장할 수 있고, 한 번 선언한 배열의 크기를 변경할 수 없다. 배열의 메모리 구조 배열은 참조타입(Reference Type)으로 heap 영역에 할당되고, 배열을 참조하는 변수는 stack 영역에 할당된다.stack 영역에 할당된 배열을 참조하는 변수는 heap 영역에 할당된 배열 객체의 주소를 참조한다.배열은 heap 영역에 배열의 크기만큼 연속된 메모리 ..
문제가 뭐야?프로젝트를 진행하면서 요청값과 응답값을 String 타입을 사용하였다.json 라이브러리를 사용해서 문자열을 파싱하고 또 그안에서 필요한 값을 가져와 사용하고..컨트롤러의 코드가 길어질뿐만아니라, 값을 가져오려다 오타가 발생하여 런타임에 에러가 발생하고 중복된 코드도 작성하게 되었다.프로젝트가 커지기 전, 그때 미리 정의하고 수정했다면 아마 내가 12건 이상의 API를 수정할일은 없었을것이다. 어떻게 해결했어? 왜 그렇게 했어?DTO 클래스를 정의하여 활용하기로했다.사실 보통 프로젝트를 보면 DTO를 관례적으로 사용하는거같았지만, 또한 그렇게 진행하는 이유는 많지만.나는 DTO 객체를 활용하고자했던 가장 큰 이유는 다음과같다.1. 반복적인 데이터 파싱작업의 코드를 줄이고싶다.2. 요청값 검증..
- Total
- Today
- Yesterday
- 인스턴스변수
- nginx
- AutoConfiguration
- syncronized
- fail-fast
- Sticky Session
- Load Balancer
- 인터페이스
- 정적변수
- 다중화
- object
- Spring
- 오블완
- HashMap
- 고정 세션
- java
- 티스토리챌린지
- Red-Black Tree
- 자동구성
- Hash
- Security
- 로드 밸런서
- nosql
- fail-safe
- spring boot
- @conditional
- 추상클래스
- HashSet
- JPA
- Caching
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |