자바

    [TIL] Java 인터페이스, 내부클래스, 예외처리

    ✍ Today I Learned [클래스 다시 짚고 넘어가기] 클래스는 개념을 코드로 작성한 것이다. 개념은 정적인 것과 동적인 것으로 구분된다. 정적인 것은 특정 시점의 상태 값이다. 동적인 것은 상태 값을 변경하는 기능이다. 생성자는 클래스를 사용하기 위한 출입구이다. 생성자를 통해서 클래스가 보유한 모든 리소스에 접근한다. 클래스의 변수와 메서드는 특정 목적을 위해 설계된 리소스이다. 클래스는 new 연산자와 생성자를 통해 물리적으로 인스턴스가 된다. 인스턴스란 메모리상에 주소 값을 갖는 데이터이다. 모든 리소스의 접근은 인스턴스의 주소 값으로부터 시작한다. 데이터의 인풋(파라미터)과 아웃풋(리턴)의 이해를 해보자! 클래스를 생성할 땐 어떤 값이 필요하고, 무엇을 위해 변경할 건지 생각하자! [추상..

    [TIL] Java 빌트인 패키지, 접근제어자, 상속, 오버라이딩, 다형성, 추상 클래스

    ✍ Today I Learned [java.time] 1.8 이전에는 new Date()로 구현했으나, 1.8 이후에는 calendar 혹은 LocalDate, LocalDateTime을 사용을 권장한다. immutable이기 때문에 한 번 생성되면 연산에도 변하지 않고 now는 끝까지 처음 시간을 유지한다. java.time 패키지의 클래스들은 여러 직관적인 이름의 메서드를 제공해준다. LocalDate - 날짜(ex. 발송일로부터 며칠) LocalTime - 시간 LocalDateTime - 날짜&시간(ex. 게시글 업로드 시간) DateTimeFormatter - 원하는 형식으로 지정 가능 LocalDate today = LocalDate.now(); System.out.println(today);..

    [TIL] Java 뱅킹, 호텔, 메모리구조, 캡슐화

    ✍ Today I Learned [뱅킹 시스템] 유효성 검사 로직을 추가했다. 고객번호를 받는 경우에는 최대 고객 수보다 많지 않아야 하고, 미개설 계좌(null)가 아니어야 한다. 이 부분이 아주 헷갈렸는데, 고객번호 대신 고객 이름을 받는 경우에는 findUser() 메서드 내에서 null 값 처리를 해주어야 연산이 가능하다!! 계속 NullPointerException 에러가 나서 한참을 머리 쥐어뜯었다.. 찾는 고객 이름이 없는 경우 에러 메시지를 출력한다. main 메서드를 최소한으로 줄이고 컨트롤러 클래스를 생성하여 각 메뉴의 작업을 메서드로 분리한다. 중요한 포인트! 개별적 클래스를 객체화 클래스 내부 데이터에 접근 접근할 때의 데이터 전달 static을 붙이면 메서드 영역에 할당된다. [호..

    [TIL] Java 뱅킹 시스템, 호텔 객실 관리 프로그램

    ✍ Today I Learned [뱅킹 시스템 고객 특정하기] 지금까지 만든 뱅킹 시스템은 한 명의 고객만을 취급했다. 여러 고객을 입력받아 다음과 같이 고객을 특정해보자. Bank 클래스의 멤버 변수로 User객체의 배열인 users를 추가한다. 시스템의 시작 부분에서 최대 고객 수를 입력받고, 생성자 메서드를 이용하여 최대 고객 수만큼의 길이를 가진 users 배열을 생성한다. 계좌 개설 메뉴에서 고객의 정보를 입력받고, User객체를 생성함과 동시에 users배열에 할당한다. (현재 고객 수의 인덱스로 접근) 계좌 개설이 완료되면 현재 고객 수 변수를 증가시켜준다. Bank 클래스에서 고객이 입력한 이름을 파라미터로 전달받아 일치하는 이름의 User 객체를 리턴하는 findUser() 메서드를 생성..

    [TIL] Java 뱅킹 시스템, 은닉화

    ✍ Today I Learned Making with tools for web! 최대한 많이 만들어보면서 체득하자! [클래스를 분리하여 뱅킹 시스템 만들기 2] 소속 관계를 보면 고객이 계좌를 가지고 있다. 객체 관계성 설정에 대해 고민하자. 착각했던 부분은 고객이 가진 현금 보유액을 계좌 객체를 생성하면서 내 맘대로 입금시켜버린 것. 고객에게 입금의 자유를.. 객체의 getter와 setter를 로직에 맞게 수정하였는데 추후 단일 값이 필요한 상황이 생길 수 있기 때문에 차라리 새로운 메서드를 생성하는 것이 나을 듯. Banker의 지속성을 위해 메뉴 부분을 while문으로 설정한다. 클래스의 정보 값을 알려주는 toString() 메서드 이클립스 단축키 alt+shift+s > s 주로 필드를 생성하..

    [TIL] Java 퀴즈파티, 생성자, 뱅킹 시스템

    ✍ Today I Learned 오늘은 여러 퀴즈 문제를 풀었다. 확실히 자바스크립트로 한 번 풀어봤던 문제들이라 자바로도 어렵지 않게 풀 수 있었다. 가장 어려웠던 부분은 각 클래스를 연결하여 하나의 큰 개념을 만들어내는 것이었는데 클래스를 분석하는 작업이 선행되어야 한다는 걸 깨달았다. 클래스를 분석하는 작업은 추상화를 의미한다. 생성하려는 객체가 무엇이고, 어떤 것들이 포함되어야 할지 항상 생각하자. System.out.printf("%.2f"); - DecimalFormat 외에 소수점을 조정할 수 있는 방법. (추천 방식은 아님) 하나의 패키지 안에 같은 이름의 클래스를 둘 이상 정의할 수 없다. (패키지가 다르면 같은 이름 가능) [생성자 Constructor] 생성자란? 객체의 생성과 동시에..

    [TIL] Java 메서드, 오버로딩, 재귀호출, 클래스

    ✍ Today I Learned [계산기 만들기] switch문에서 string을 이퀄 연산하는 건 자바 1.7 버전부터 가능하다. 연산을 한 첫 번째 숫자와 두 번째 숫자를 사용자에게 입력받고 연산자를 switch문으로 돌려서 간단하게 구현하였다. 여기서 로직이 추가된다면? case 절의 연산이 다른 곳에서도 필요하다면? 답은 메서드! [메서드 Method] 메서드(method)란? 어떠한 특정 작업을 수행하기 위한 명령문의 집합이다. 메서드를 사용하면 중복되는 코드를 줄일 수 있고, 모듈화로 인해 가독성도 좋아지고, 손쉽게 유지 보수할 수 있다. 메서드는 되도록 하나의 기능만 수행하는 것이 좋다. 메서드를 생성할 때는 항상 2가지를 생각한다. 1) 어떤 데이터를 파라미터로 전달할 건지 2) 어떤 데이..

    [TIL] Java 버블정렬, 선택정렬, 퀴즈파티

    ✍ Today I Learned [버블 정렬 Bubble Sort] 버블 정렬이란? 서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘이다. 시간 복잡도는 O(n^2), 공간 복잡도는 O(n)이다. 교환 연산(swap)이 많이 일어나기 때문에 비효율적이지만 구현이 매우 간단하고 직관적이다. 안정 정렬(Stable Sort)이다. 버블 정렬 참고자료 // 버블 정렬 int temp = 0; for (int i = 0; i intArr[j]) { // 왼쪽이 더 크다면 자리를 바꿔줌(swap) temp = intA..