전체 글

전체 글

    🚿 Decorator design pattern와 stream

    Decorator 패턴을 이용해서 파일 I/O를 더 쉽게 출력해보자 📌 DataOutputStream을 사용해보자 게시글 출력 // 게시글 데이터를 파일로 내보내기(저장하기, 쓰기) try ( // 파일에 바이트를 출력하는 객체 FileOutputStream out = new FileOutputStream("board.data"); DataOutputStream out2 = new DataOutputStream(out)) { // 출력할 게시글 개수를 먼저 저장한다. out2.writeInt(boardList.size()); for (Board board : boardList) { // 1) 게시글 번호 4바이트 출력 out2.writeInt(board.getNo()); // 2) 게시글 제목 출력 ou..

    📁 자바에서는 어떻게 파일 입출력을 할까?

    📌 Streaming API 유래와 파일 I/O 과거에는 장비를 사용할 때 각각의 장비에 맞는 I/O API를 사용해야 했다. 각 디바이스에 따라 데이터 I/O를 할 수 있는 함수가 달랐다. 그래서 개발자는 각 장비별로 데이터 I/O의 사용법을 학습하고 물어봐야하는 문제가 있었다. 이를 해결하기 위해서 나온것이 있었으니.. 장비제어를 하기위해 Device Driver(장비 드라이브 : H/W 제조사에서 제공 / 자기네 장비 제어할 때 호출할 function이 들어있는 app 제공 (.dll)) 설치해서 제어한다. [drive(이끌다) - 장비 진단 통제 제어하기 위함] 덕분에 개발자는 장비에 상관없이 일관된 방법으로 데이터 I/O를 할 수 있게 되었다. 📌 Binary file vs Text file 이..

    🔒 권한(Authorization)은 어떻게 설정할까요?

    비트 연산자를 활용한 사용자 메뉴 접근권한 통제 비트 연산자 - 사용자 권한 관리에 적용 public class Exam0480 { public static void main(String[] args) { // 1) 사용자 권한을 값으로 정의 final int LOGOUT = 0x01; // 0000 0001 - 로그아웃 final int GENERAL = 0x02; // 0000 0010 - 일반 로그인 final int ADMIN = 0x04; // 0000 0100 - 관리자 로그인 // 2) 메뉴의 접근 범위 설정 int menu1 = LOGOUT; // 로그아웃 상태에서만 접근 가능한 메뉴 int menu2 = GENERAL; // 일반으로 로그인 된 접근 가능한 메뉴 int menu3 = AD..

    📯 자바 : Command design pattern

    Command 디자인 패턴 새로운 코드를 추가할 때 기존코드를 손 대지 않는 것이 깔끔하다. 손 대더라도 최소한으로 대야한다. 버그가 생길 가능성이 있기 때문이다. 이를 해결하기 위해서 나온게 Command 디자인 패턴이다. Command 디자인 패턴은 하나의 명령 처리를 하나의 메서드가 담당하고 있다면 메서드를 별도의 클래스로 분리한다. 즉 기존의 클래스에 손 안대면서 추가할 수 있으며 유지보수에 용이하다. Q. 클래스가 늘어나는데요? A. 클래스 파일이 늘어나서 불편한거보다 Command 패턴을 적용시킴으로써 얻는 이점이 더 크다. (클래스가 늘어나는 것은 감수해야한다) 서블릿이 전형적인 커멘드 패턴의 한 예라고 할 수 있다. 공통분모가 없다면 generalization 할 필요없다 그리고 abstr..

    🚀 bitcamp TIL (21.09.01)

    📌 알게 된 점 로그인 정보가 저장되있으면 로그인 된 것 로그인 정보가 저장되어 있지 않으면 로그인이 되지 않는다. 직접 사용하던지 게터로 사용하던지 하지만 유지보수에는 게터로 꺼내는게 좋다. 인스턴스 필드를 직접 사용하지말고 게터로 쓰는게 유지보수에 좋다. 회원관리를 하는 핸들러와 dto를 따로 만들어서 거기에서만 멤버를 관리한다. 등록된 멤버를 확인하는 핸들러이다. 로그아웃 로그인 된 것을 null로 하면됨 기존코드를 손 대지 않는 것이 깔끔하다 손 대더라도 최소한으로 대야함 버그가 생길 가능성이 있다. 이를 해결하기 위해서 나온게 command 디자인 패턴 메서드를 먼저 만들고 코드를 작성해도되고 코드를 완성하고 메서드를 호출해도 된다. 게시글을 삭제했다고 게시글 번호가 당겨지지 않는다. 주민번호 ..

    🛋️ 자바에서 꼭 필요한 예외처리(Exception )

    1 .예외 처리 문법을 적용하기 전 - 리턴 값으로 오류 여부를 알릴 때의 문제점 public class Calculator { public static int compute(String op, int a, int b) { switch (op) { case "+": return a + b; case "-": return a - b; case "*": return a * b; case "/": return a / b; case "%": return a % b; default: // 만약 유효한 연산자가 아닐 경우 계산 결과는? // => 보통 리턴 값으로 알린다. return -1; } } } public class Exception1 { public static void main(String[] args..

    🛎️ 람다(lambda) : 스태틱 메서드 레퍼런스

    📌 스태틱 메서드 레퍼런스란? 인터페이스 구현한다는건 쉬운 일이 아니다. 기존 메서드와 같은 일을 하는 코드가 있다면 인터페이스 구현하는데 재활용한다면 편하다. 메서드 레퍼런스를 지정할 때 리턴 타입의 규칙: // 1) 같은 리턴 타입 // 2) 암시적 형변환 가능한 타입 // 3) auto-boxing 가능한 타입 // 4) void 클래스명::메서드명 📌 메서드 한 개짜리 인터페이스의 구현체를 만드는 방법 0. 기존 코드 public class Exam0510 { static class MyCalculator { public static int plus(int a, int b) {return a + b;} } interface Calculator { int compute(int x, int y); }..

    🧧 자바 컬렉션 : hashSet , hashMap , hashTable

    hashSet , hashMap , hashTable ArrayList vs HashSet ✔️ ArrayList 한 줄에서 쫙 관리, 순서 o 중복 o ✔️ HashSet 여러 줄에서 관리, 순서 x 중복 x 1. hashSet public class Exam0310 { // 사용자 정의 데이터 타입 static class Member { String name; int age; public Member(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Member [name=" + name + ", age=" + age + "]"; } } public static v..