본문 바로가기

JAVA

(133)
상태패턴 상태 패턴 예)단일 상품을 판매하는 자판기에 들어갈 소프트웨어를 개발 요청 동전을 넣음 -> 동전없으면 -> 금액을 증가 -> 제품선택가능동전을 넣음 -> 제품선택 가능이면 -> 금액을 증가 -> 제품선택 가능제품선택 -> 동전없으면 -> 아무동작하지 않음 -> 동전없음 유지제품선택 -> 제품선택가능이면 -> 제품주고 잔액감소 -> 잔액있으면 제품선택가능 잔액없으면 동전없음 public class VendingMachine {public static enum State { NOCOIN, SELECTABLE }private State state = State.NOCOIN;public void insertCoin(int coin) {switch(state) {case NOCOIN :increaseCoin(c..
전략패턴 전략패턴 예)상황에 따라 다른 가격 할인 정책- 첫손님 할인- 저녁 시간대 할인 계산하는 모듈에 가격 할인 정책public class Calculator {public int calculate(boolean firstGuest, List items) {int sum = 0;for(Item item : items) {if(firstGuest)sum += (int)(item.getPrice() * 0.9 ) ;//첫손님else if (! item.isFresh())sum += (int)(item.getPrice() * 0.8 ) ;// 덜신선한 상품elsesum += item.getPrice();}return sum;}} 문제점)1. 서로 다른 계산 정책들이 한 코드에 섞여 있다.2. 추가될수록 코드 분석이..
의존역전원칙 의존역전원칙(Dependency inversion principle)- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다. 저수준 모듈이 고수준 모듈에서 정의한 추상타입에 의존해야 한다. 고수준모듈?-> 어떤 의미있는 단일 기능을 제공하는 모듈저수준모듈?-> 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현 예) 암호화고수준모듈- 바이트 데이터를 읽어와- 암호화하고- 결과 바이트 데이터를 쓴다. 저수준모듈-파일에서 바이트 데이터를 읽어온다.-AES 알고리즘으로 암호화 한다.-파일에서 바이트 데이터를 쓴다. 바이트 데이터를 암호화한다는 것이 이 프로그램의 의미 있는 단일 기능으로서 고수준 모듈에 해당한다.고수준 모듈은 데이터읽기, 암호화, 데이터 쓰기라는 하위 기능으로 구성되는데, 저수..
단일책임원칙 단일책임원칙(Single responsibility principle)객체지향의 기본은 책임을 객체에게 할당하는데 있다.객체를 객체로 존재하게 하는 이유가 책임인데, 단일책임원칙은 이 책임과 관려된 원칙이다. - 클래스는 단 한개의 책임을 가져야한다. 클래스가 여러 책임을 갖게되면 그 클래스는 각 책임마다 변경되는 이유가 발생하기 때문이다.클래스가 한 개의 이유로만 변경되로면 클래스는 한 개의 책임만 가져야한다.다른말로 클래스를 변경하는 이유는 단 한 개여야 한다. 객체에게 책임을 할당하는 것이 객체 설계의 기본인 만큼, 단일 책임 원칙은 가장 중요한 원칙 중의 하나이다.단일책임원칙이 잘 지켜지지 않으면 다른 원칙들도 그 효과가 반감되기 때문에 최대한 지켜야하는 원칙이다.하지만 가장 어려운 원칙이기도 하..
객체의 라이프 사이클 객체의 라이프 사이클자바의 객체의 생존 기간을 라이프 사이클이라고 한다.객체가 생성된 후부터 폐기될 때 까지의 기간을 뜻한다. 1) 로컬변수로컬변수는 처리 블록 내에서만 사용할 수 있는 변수변수를 선언한 곳에서 생성되어 블록이 종료한 시점에서 폐기된다. 2)인스턴스 변수클래스의 필드로 선언하는 변수 부모 객체를 생성할 때 생성되어 부모 객체가 가비지 컬렉션될 때 함께 삭제된다. 3)클래스 변수클래스의 static 필드로 선언한 변수자바의 변수 중 가장 긴 라이프 사이클클래스 로드시에 생성되어 클래스가 언로드되면 소멸된다.대부분의 경우 자바의 프로세스 시작시에 생성되어 프로세스 종료시 삭제된다.또한, 인스턴스 변수와 클래스변수에는 가시성을 지정할 수 있다. public class LifeCycleSampl..
가시성 자바의 변수와 메서드를 사용할 수 있는 범위를 가시성이라고 한다.public - 모든 클래스로부터 이용할 수 있다.protected - 서브 클래스, 동일패키지의 클래스가 이용할 수 있다.package private (지정없음)- 동일 패키지의 클래스로부터 이용할 수 있다.private - 자신의 클래스만 이용할 수 있다. 사용가능범위가 좁여진다. 클래스나 인터페이스에 대해서는 public, package private 중 하나만을 사용할 수 있다.메서드와 필드는 public, protected, package private, private 사용할 수 있다. protected 메서드는 '파생 클래스라면 다른 패키지에 속해도 참조가 가능'하다는 의미다. 또한 클래스 자신도 접근 제한자를 가질 수 있어 멤버..
값 전달 방법(callByValue callByReference)과 불변객체 기본형과 참조형 기본형의 값 전달방법 public class CallByValueSample {public static void main(String[] args) {int value =1;callByValue(value);System.out.println("호출자" + value);}public void callByValue(int value) {vaule++;System.out.println("수신자" + value);}} 수신자:2호출자:1 기본형의 값을 전달하는 경우는 수신자에서 값을 변경해도 호출자에 영향을 주지 못한다. 참조형값 전달 방법 public class Entiry {public int value;} public class CallByReferenceSample {public stat..
문자열관련 문자열 String 클래스String은 문자열의 정보를 내부에서 char타입의 배열로 유지하고 있다.char는 단일문자를 보관하는 타입인데, String은 char를 배열로 유지함으로써 여러문자을 모아서 처리할 수 있다. String 객체는 한번 만들면 변경할 수 없다.String originalText = "ABC";String lowerText = originalText.toLowerCase(); String 클래스는 어떠한 가공메서드를 호출해도 원래 문자열은 변경되지 않는다.불변객체(Immutable) 문자열 합치기 1.StringBuilder 클래스가변 문자열을 유지하는 클래스로 문자열의 결합이나 삭제 등을 반복할때 사용.StringBuilder bulider = new StringBuilder(..