본문 바로가기

전체 글

[Java]System.out.println \n와 \r\n 흔히 자바는 JVM 덕분에 운영체제에 독립적으로 동작된다고 알려져 있습니다. 각 운영체제에 맞는 JVM만 설치하면, 프로그래머 입장에서는 운영체제에 상관 없이 개발할 수 있기 때문입니다. 하지만, 운영체제에 따라 같은 코드라도 다르게 동작하는 것이 몇 개 있습니다. 그 중 하나가 System.out.println()입니다. 흔히 줄바꿈(띄어쓰기, 개행)의 목적으로 println을 사용합니다. 문장을 출력하고 자동으로 줄바꿈을 하기 때문입니다. 이 줄바꿈는 운영체제 마다 하는 방식이 달라집니다.(운영체제 마다 줄바꿈 문자가 다르기 때문입니다.) 제 삽질을 통해 예시를 보여드리겠습니다. 저는 출력을 비교하는 테스트 코드를 작성하고 있었습니다. 이 출력을 으로 출력이 정상적으로 이뤄지는지 확인을 하는 코드입니.. 더보기
디자인 패턴 - 비지터 패턴(Visitor Pattern) 1. 정의 다양한 객체에 새로운 기능을 추가한다. 단, 캡슐화가 깨지게 된다. 2. 예시 메뉴 복합 객체를 탐색하면서 깊이(Depth) 출력 기능을 추가한다. 💡 컴포지트 패턴 참고 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Visitor visitor = new Visitor(); MenuComponent breakfast = new Menu("아침 메뉴", "08:00~11:00", visitor); MenuComponent lunch = new Menu("점심 메뉴", "12:00~17:00", visitor); MenuComponent dinner = new Menu("저녁 메뉴", ".. 더보기
디자인 패턴 - 프로토타입 패턴(Prototype Pattern) 1. 정의 인스턴스를 깊은 복사하여, 인스턴스 생성의 자원 소모를 줄일다. 💡 매번 DB의 데이터를 가져와서 인스턴스를 만드는 경우 자원 소모가 심하기 때문에, 깊은 복사를 통해 자원 소모를 줄인다. 2. 예시 몬스터의 종류를 복사하여 사용한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args) throws CloneNotSupportedException { Monsters monsters = new Monsters(); monsters.loadData(); Monsters upMonster = (Monsters) monsters.clone(); Monsters downMonster = (Monster.. 더보기
디자인 패턴 - 메멘토 패턴(Memento Pattern) 1. 정의 객체의 상태를 캡슐화한다. 2. 예시 임시적으로 게임 머니를 200 추가하고, 복구한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Game game = new Game(); System.out.println(game.tmpAddMoney(200)); System.out.println(game.restore().money); } } public class Game { GameMemento memento; public Game() { memento = new GameMemento(100, 100, 0); } public int tmpAddMoney(int money){ return m.. 더보기
디자인 패턴 - 중재자 패턴(Mediator Pattern) 1. 정의 서로 관련된 객체 사이의 복잡한 통신과 제어를 한 곳으로 집중한다. 2. 예시 중재자를 통해 아침에는 스트레칭하고, 저녁에는 걷는다는 것을 알린다. 3. 그림 5. 코드 public class Client { public static void main(String[] args){ Mediator mediator = new Mediator(); Alarm morning = new MorningAlarm(); morning.setMediator(mediator); Alarm night = new NightAlarm(); night.setMediator(mediator); mediator.addBehavior(new Walking()); mediator.addBehavior(new Stretchin.. 더보기
디자인 패턴 - 플라이웨이트 패턴(Flyweight Pattern) 1. 정의 인스턴스 하나로 여러 개의 가상 인스턴스를 제공할 때 사용한다. 💡 인스턴스가 하나이기 때문에 모두 똑같은 방식으로 처리할 수 있다. 2. 예시 조경 설계 애플리케이션에서 나무를 객체 형태로 추가한다. 단, 많이 추가해도 실행이 느려지지 않아야 한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ TreeManager treeManager = new TreeManager(); treeManager.displayTree(); } } /* 출력 ------ x좌표 : 1 y좌표 : 2 ------ x좌표 : 2 y좌표 : 3 ------ x좌표 : 3 y좌표 : 4 ------ x좌표 : .. 더보기
디자인 패턴 - 책임 연쇄 패턴(Chain of Responsibility Pattern) 1. 정의 한 가지의 요청을 여러 단계에서 처리해야 할 때 사용한다. 2. 예시 메일을 스팸, 불편, 기본 메일로 구분한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Mail[] mail = new Mail[]{ new Mail("광고", "디자인 패턴 60초 광고를 요청합니다."), new Mail("불편", "이 패턴 너무 불편하네요."), new Mail("문의사항", "요청한 패턴이 동작하지 않습니다."), new Mail("건의사항", "다른 패턴이 있을까요?"), }; MailChain spam = new SpamMailChainImpl(); MailChain complaint =.. 더보기
디자인 패턴 - 빌더 패턴(Builder Pattern) 1. 정의 객체 생성 과정를 캡슐화한다. 2. 예시 휴가 계획 일정표를 만든다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ AbstractBuilder vacation = new VacationBuilder() .builder() .addHotel("j hotel") .addAirPlane("e air") .addTicket("j ticket") .addEvent("u event") .build(); System.out.println(vacation.hotel); System.out.println(vacation.airPlane); System.out.println(vacation.ticket.. 더보기