Language/Java

    🔒 권한(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(..

    📜 제네릭(Generic) : 타입을 미리 결정하다

    📌 제네릭의 등장 📌 제네릭의 특징 Object 타입을 쓰면 Object 자손들은 다 들어올 수 있다. 특정 타입으로 제한할 수 없다. 즉 특정 메서드를 호출할 때 어떤 객체든 다 넘겨줄 수 있다. (장점이자 단점이다) 매번 리턴값을 원래 타입으로 형변환 해야한다. 타입 정보를 받는 "타입 파라미터"의 이름은 일반 변수 이름을 짓는 규칙과 같다. 그러나 타입을 지정하는 자리에 와야하기 때문에 한 두자의 알파벳으로 정의한다. 눈에 띄게 하기 위하여 대문자르 사용한다. 자바에서 제안하는 이름이 있고 대부분의 개발자가 그 이름을 사용한다. // 제네릭 타입 : 객체를 생성하는 시점에 결정된다. T Arrays.copyOf(원래배열, 복사할개수, 새로만들배열의타입) @SuppressWarnings("unchec..