Language

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

    📌 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..

    🛋️ 자바에서 꼭 필요한 예외처리(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..

    📜 인터페이스 너.. 이 부분에서 유용하지

    📌 인터페이스의 유용성을 다시 생각해보기(객체 호출 규칙) ✔️ 만약 ArrayList 사용법과 LinkedList 사용법이 다르다면? ArrayList vs LinkedList append() add() delete() remove() update() set() 메서드 이름을 개발자에 따라 다르게 지으면 어떤 문제점이 있을까요? ✔️ 클래스의 사용법이 달라져서 프로그래밍의 일관성이 없게 됩니다. 이를 해결하기 위해 나온 인터페이스!! ✔️ 인터페이스를 사용한다면 개발자가 클래스를 정의할 때, 인터페이스에서 정한 규칙에 따라 메서드를 만들어야합니다. List (규칙 즉 객체 사용법을 정의) add() remove() set() List / \ ArrayList LinkedList ArrayList와 Li..

    🧲 Collection : ArrayList 맛보기

    📌 ArrayList의 특징 기본 배열 크기는 10개로 정해져있다. ArrayList list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); System.out.println(list); // [aaa, bbb, ccc, ddd] // ArrayList는 null을 추가하는 것을 허용한다. list.add(null); list.add("eee"); System.out.println(list); // [aaa, bbb, ccc, ddd, null, eee] // ArrayList는 같은 인스턴스를 중복해서 추가할 수 있다. list.add(null); list.add("aaa"); list.add(..