싱글톤 Singleton
application을 통틀어 한 클래스에 대한 객체는 단 하나만 만드는 것.
→ 때문에 new를 이용해서 객체를 생성하지 않는다. (클래스의 생성자가 private으로 설정되기 때문)
→ 그렇다면? public 메소드를 만들어서(getInstance())이를 통해 객체를 생성하게 되는데 크게 3가지 방법이 있다.
1. 변수에 private 생성자에 new로 접근해서 객체를 먼저 넣고 return
private static Logger Logger = new Logger();
- 이건 객체를 사용하기도 전에 미리 만드는 거라 객체가 클 경우 메모리 부담이 있음
2. 변수 선언만 하고 getInstance에서 객체 생성을 확인 후 생성
private static Logger Logger;
...
public static Logger getInstance() {
if(Logger == null) {
Logger = new Logger();
}
return Logger;
}
이건 getInstance를 실행할 때마다 if문을 거치므로 과정이 추가된다
3. static block에서 객체 생성
static {
// 미리 선작업
logger = new Logger();
}
Methodchain
여러 메서드 호출을 하나의 표현식으로 연결하는 방식.
→ 이를 통해 코드가 더 간결, 읽기 쉬워짐
calc.setFirst(3).setSecond(5).showAdd().setSecond(1).showSub();
calc.setFirst(3).setFirst(3)
.setSecond(5)
.showAdd()
.setSecond(1)
.showSub();
이렇게 한줄로 표현 하거나, 줄바꿈으로 나타낼 수 있다.
Factory
어떤 클래스의 객체를 만들고 메소드를 사용할 때 해당 클래스를 몰라도 사용할 수 있다. → 인터페이스를 이용해서!
// 기존
Car car = new Car();
car.move();
// factory pattern
Transportation t = TransportationFactory.getTransportation("Car");
t.move();
기존과 다르게 main함수에서는 Car라는 클래스를 몰라도 Car안에 있는 메소드 move를 사용할 수 있다.
Car 클래스 ↤ Transportation 인터페이스, TransportationFactory의 메소드 getTransportation의 타입 : Transportation
Builder
메소드 체인을 이용한 팩토리 패턴
필드가 많으면, 생성자가 길어져서 생성자를 사용하려면 파라미터의 순서를 다 기억해야함 -> 불편
명시적으로 사용하기 위해서 builder패턴을 사용한다.
// 기존
public NormalBook(String isbn, String title, String author, String description, int price) {}
// builder pattern
private BuilderBook() {}
public static BuilderBook builder() {
return new BuilderBook();
}
...
public BuilderBook author(String author) {
this.author = author;
return this;
}
...
main{
BuilderBook bBook = BuilderBook.builder()
.author("이름3");
}
builder패턴은 각각의 필드마다 메소드를 만들고, return 값으로 본인을 넣는다.
main함수에서 사용할 때는 public으로 선언된 BuilderBook으로 Methodcahin 패턴을 이용해서 사용할 수 있다.
Adapter
A객체를 삭제하고 A`를 새롭게 구성하기보다
A객체 + A` adaper (has a 관계)⇒ A` 로 만든다. (c to usd 어댑터 이런거)
'하고싶은거 > Java' 카테고리의 다른 글
강제 타입 변환 feat. 유레카 (0) | 2024.06.13 |
---|---|
객체 상속 feat. 유레카 (0) | 2024.06.12 |
객체지향 프로그래밍 feat. 유레카 (0) | 2024.06.11 |
java 기초 + eclipse 관련 내용 feat. 유레카 (0) | 2024.06.10 |
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!