분류 전체보기

    학교 외박 신청 어플 - 리팩토링

    학교 외박 신청 어플 - 리팩토링

    시작하며 벌써 외박신청 어플을 만든지 약 7개월이 지났다. 현재(2022/04/24)에 내가 작년에 작성했던 후기를 읽어봤는데 조금 부끄럽기도 하고, 뿌듯하기도 하다. 작년 9월부터 현재 4월까지 함수 호출 횟수다. 출시일이 제일 피크고 이후로는 평범한 수를 유지하고 있다. 이번 3월에 홍보를 한번 더 해서인지 횟수가 조금 올라왔다. 에러는 거의 없지만(보통 에러가 나는 경우는 비밀번호를 틀리는 경우다) 3월에 엄청난 에러가 찍혔는데, 이는 교명 변경으로 인해 도메인이 바뀌어서이다. 해당 사항을 인지하자마자 업데이트를 진행해서 다행히 괜찮았다. 다른 함수들을 두고, 로그인 함수만 본 그래프다. 보통 어플을 키면 먼저 로그인을 하기 때문에 로그인 수와 하루 이용자 수는 비슷하다. 물론 똑같다고는 말할 수 ..

    java [7] Collections-2

    java [7] Collections-2

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 Arrays Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. 배열의 복사 - copyOf(), copyOfRange() 배열 채우기 - fill(), setAll() 배열의 정렬과 탐색 - sort(), binarySearch() 배열의 비교와 출력 - equals(), toString() 배열을 List로 변환 - asList(Object... a) Comparator와 Comparable Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. 예를 들어, Arrays.sort()에서는 Character클래스의 Comparable의 구현에 의해 정렬된다. Comp..

    java [7] Collections-1

    java [7] Collections-1

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 Collections Framework 컬렉션 프레임워크는 데이터들을 저장하는 클래스들을 표준화한 설계를 뜻한다. 컬렉션 프레임워크는 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공하고 있다. JDK1.2 이전까지는 Vector, Hashtable, Properties와 같은 클래스들을 이용해 서로 다른 각자의 방식으로 처리해야 했으나 JDK1.2부터 컬레션 프레임워크가 등장하고 다양한 종류의 컬렉션 클래스가 추가되었고, 모든 클련 클래스를 표준화된 방식으로 다룰 수 있게 체계화되었다. 컬렉션 프레임워크의 핵심 인터페이스 컬렉션 프레임워크는 크게 3가지 타입이 존재한다고 인식하고 List, Set, Map 인터페이스들로 정의..

    java [6] 예외처리

    java [6] 예외처리

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 프로그램 오류 프로그램이 실행 중에 어떤 원인에 의해서 오작동 하거나 비정상적으로 종료되는 경우가 있다. 이것을 프로그램의 오류 또는 에러라고 하는데, 그것들의 종류에는 세 가지가 있다. 1. 컴파일 에러 : 컴파일 시에 발생하는 에러 2. 런타임 에러 : 실행 시에 발생하는 에러 3. 논리적 에러 : 실행은 하지만 의도와 다르게 동작하는 것 또 여기서, 자바에서 런타임 에러는 두 가지 종류가 있다. 에러 - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 - 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 에러가 발생하면 프로그램의 종료를 막을 수 없지만 예외가 발생하면 프로그래머가 적절한 코드를 작성해놓았다면 프로그램의 ..

    java [5] 객체지향 프로그래밍-3

    java [5] 객체지향 프로그래밍-3

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 추상 클래스 클래스가 설계도라면 추상 클래스는 미완성 설계도이다. 추상 클래스는 미완성 메서드를 포함하고 있다. 추상 클래스는 인스턴스를 생성하지 못하며, 상속을 통해 자손 클래스를 통해서만 완성될 수 있다. 추상클래스는 클래스 선언 앞에 abstract 키워드를 붙이면 된다. 참고로, 추상 메서드를 포함하고 있지 않은 클래스에도 abstract를 붙여 추상 클래스로 만들 수 있다. 추상 클래스로 지정되면 추상 메서드가 없어도 인스턴스 생성이 불가능해진다. 추상 메서드 설계만 해놓고 실제 수행될 내용을 작성하지 않은 것을 추상 메서드라고 한다. 메서드를 미완성으로 남겨 놓는 이유는, 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문..

    java [5] 객체지향 프로그래밍-2

    java [5] 객체지향 프로그래밍-2

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 상속 클래스는 다른 클래스를 상속 받을 수 있다. 이를 부모-자식 관계라고 표현하는데 자식 클래스는 부모 클래스의 멤버를 가진다. 주의해야할 것은 멤버만 상속받고, 생성자와 초기화 블럭은 상속되지 않는다는 것이다. class Parent { int age; } class Child extends Parent { void play() { System.out.println("놀자~"); } } Parent 클래스는 age 멤버를 가지고 있고 Child 클래스는 age 멤버와 play() 메서드를 갖게 된다. 또한, 클래스들은 오직 하나의 클래스만 상속받을 수 있으며 2개 이상의 클래스를 상속받을 수 없다. (단일상속) Object 클래스 Obje..

    java [5] 객체지향 프로그래밍-1

    java [5] 객체지향 프로그래밍-1

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 인스턴스 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며 그 과정에서 만들어진 객체를 인스턴스라고 한다. 인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수와 인스턴스의 타입은 일치해야 한다. Person p = new Person(); 객체 배열 많은 수의 객체를 다뤄야할 때, 객체 배열을 생성하여 편리하게 다룰 수 있다. Person[] pArr = new Person[3]; # 초기화 방법1 Person[] pArr = { new Person(), new Person(), new Person()}; # 초기화 방법2 Person[0] = new Person(); Person[1] = new Person(); Person..

    java [4] 배열

    java [4] 배열

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 배열의 길이 자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다. 또한 아래 코드처럼 길이가 0인 배열도 생성이 가능하다. int[] arr = new int[0]; int[] arr2 = {}; 배열의 출력 int[] arr = {100, 200, 300}; // [100, 200, 300] System.out.println(Arrays.toString(arr)); Arrays.toString()을 이용하면 주석처럼 출력할 수 있다. char[] arr = {'a', 'b', 'c'}; // abc System.out.println(arr); char 배열은 출..

    java [3] 조건문과 반복문

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 향상된 for문(enhanced for statement) JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 편리하게 할 수 있도록 새로운 문법이 추가되었다. for ( 타입 변수명 : 배열 또는 컬렉션 ) { // 반복할 문장 } 위와 같은 형태를 지닌다. int [] arr = { 10, 20, 30, 40, 50 }; for(int i=0; i < arr.length; i++) { System.out.println(arr[i]); } for (int tmp : arr) { System.out.println(tmp); } 향상된 for문은 매 반복마다 arr에서 하나씩 순서대로 읽어서 선언한 변수(tmp)에 저장한다. 기존 for문..

    java [2] 연산자

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 연산자의 우선순위와 결합규칙 1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다. 2. 단항(1) > 이항(2) >삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다. 3. 단항 연산자와 대입 연산자를 제외한 모든 연상의 진행방향은 왼쪽에서 오른쪽이다. 리터럴 계산 다음 코드는 컴파일해도 오류가 나지 않는다. char c2 = 'a' + 1; System.out.println(c2); 왜냐하면, 'a' + 1은 리터럴끼리의 연산이기 때문에 런타임에 값이 변하지 않는다. 그래서 컴파일러가 컴파일할 때 계산해서 그 결과로 c2를 대체한다. char c2 = 'b' System.out.println(c2); 따라서 두 코드..