상속은 부모 클래스와 자식 클래스 관계에서 자식 클래스가 부모 클래스의 속성과 기능을 그대로 물려 받는 것이다.상속에서의 생성자 호출 방식과 왜 상속을 사용해야하는지, 상속을 사용할 때 주의해야할 점은 무엇이 있는지 알아보려고 한다.상속 관계에서의 생성자 호출자식 클래스의 어떠한 생성자도 명시적으로 선언되어있지 않다면 컴파일러는 자식클래스에 기본 생성자를 생성한다.public HybridCar { public HybridCar() { super(); }}super()는 부모의 기본 생성자를 호출한다. 이때, 부모 클래스의 생성자가 아무것도 선언되어있지 않다면 컴파일러가 자동으로 기본 생성자를 생성하기 때문에 문제가 되지 않지만 매개변수를 포함하는 생성자가 있는 경우에는 기본 생성자..
인터페이스는 객체의 사용 방법을 정의하는 데 사용되는 추상 타입이다.그럼 왜 인터페이스를 사용해야하고, 이점은 무엇이 있는지에 대해 알아보려고 한다.인터페이스의 다중 구현과 다중 상속클래스의 상속 관계에서는 다중 상속이 불가능하다.자식 클래스가 둘 이상의 부모 클래스로부터 동일한 시그니처를 갖는 메서드를 상속 받는다고 했을 때, 자식 클래스는 어떤 부모의 메서드를 상속 받아야 할 지 모르기 때문이다.반면에, 인터페이스는 다중 상속과 다중 구현이 가능하다. 다중 구현클래스는 여러 인터페이스를 구현할 수 있다.클래스는 구현하고자 하는 각 인터페이스에 정의된 메서드를 구현해야 한다.public interface Drivable { void forward(); void reverse();}public..
스프링부트의 자동 구성(auto-configuration) 기능은 개발자가 수동으로 필요한 설정을 하는 하는 번거로움을 줄여준다. 때문에 개발자는 복잡한 설정 과정을 하지 않고 비즈니스 로직에만 집중할 수 있다. 이 글에서 스프링부트에서 자동구성의 원리와 그 작동 방식에 대해 알아보려고 한다. auto-configuration 정의스프링부트에서 애플리케이션을 시작할 때 필요한 설정을 자동으로 구성해주는 기능을 제공한다. 즉, 개발자가 수동으로 필요한 설정을 하지 않아도 기본적인 설정이 자동으로 적용된다는 것이다. 예를들어, mysql 드라이버가 클래스패스에 존재하고 데이터베이스 연결과 관련된 설정을 하지 않더라도 application.properties에 관련 설정 정보만 작성해준다면 스프링부트는 자동으..
추상 클래스와 인터페이스는 클래스의 기본 구조를 정의하는 공통점이 있지만 차이점이 있다.본 글에서는 추상 클래스와 인터페이스의 차이를 알아보려고한다. 추상클래스와 목적추상 클래스는 클래스들의 공통적인 필드와 메서드를 추출해서 선언한 클래스로, 실체 클래스와 상속의 관계를 가진다.공통된 속성과 행동을 통일할 목적으로 사용하는데, 실체 클래스가 여러개이고 설계하는 사람도 여러명이라고 가정했을 때 실체 클래스마다 속성과 행동이 다를 수 있다.예를 들어 전기차, 하이브리드차, 내연기관차는 자동차라는 공통점이 있다. 바퀴, 창문, 라이트와 같이 공통된 속성이 있고 전진과 후진이라는 행동을 가진다. 하지만 전기차, 하이브리드차, 내연기관차에 대한 클래스를 생성할 때 동일한 속성과 행동을 가짐에도 불구하고 다른 이름..
싱글톤이 무엇이고 메모리 관점에서 어떻게 동작하는지에 대해 알아보려고 한다.싱글톤 패턴클래스에서 오직 한 개의 객체만 갖도록 보장하고, 객체에 대한 전역적인 접근점을 제공하는 패턴이다. 싱글톤프로그램 내에서 단 한번만 생성된 객체이다. 왜 그리고 언제 사용할까싱글톤을 사용하는 목적은 하나의 객체가 반복적으로 생성되지 않도록 보장하기 위한 것이다.즉 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근점으로 모든 사용자가 접근할 수 있도록 해야할 때 사용한다.예로 데이터베이스 연결(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(); 클래..
- Total
- Today
- Yesterday
- Caching
- object
- 인터페이스
- nginx
- HashMap
- Spring
- 다중화
- fail-safe
- 자동구성
- Load Balancer
- nosql
- 고정 세션
- Hash
- Red-Black Tree
- 추상클래스
- Sticky Session
- 정적변수
- JPA
- syncronized
- 티스토리챌린지
- fail-fast
- 로드 밸런서
- 인스턴스변수
- HashSet
- Security
- @conditional
- 오블완
- spring boot
- java
- AutoConfiguration
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |