_

Always be tactful

728x90

전체 글 72

[Java] MVC 패턴: 로또 애플리케이션 만들기 2편

이번에 만드는 로또 애플리케이션은 다음 기능을 포함한다. 1. 로또 게임 구매    ㄴ 사용자로부터 금액을 입력받는다.    ㄴ 입력받은 금액이 유효한지 검증한다.    ㄴ 제공할 로또 게임 수를 계산하고 자동으로 출력한다. 2. 로또 게임 비교    ㄴ 사용자로부터 당첨번호를 입력받는다.    ㄴ 당첨번호가 유효한지 검증한다.    ㄴ 앞서 자동으로 생성한 로또 게임들과 당첨번호를 비교한다. 3. 당첨 결과 확인    ㄴ 당첨 결과를 출력한다.    ㄴ 수익률을 계산하여 출력한다.자가점검 InputView는 사용자입력만을 담당한다. 입력받은 값이 유효한 금액으로 처리될 수 있는지는 controller에서 판단한다. 예외가 발생하면 다시 InputView로부터 입력을 받는다. 입력값이 숫자로 파싱 되는가..

[Java] BOJ 1550: Integer.parseInt()

BufferedReader를 쓰면서 문자열을 숫자 값으로 전환하는 일이 많았다. 그래서 Integer.parseInt()가 자연히 몸에 배어있었는데, 이게 특정 진법으로 해석해 숫자 값을 뱉는 친구라는 건 오늘에서야 알았다. (지능 이슈) 변명이지만 지금까지 진법 자체를 다룰 일이 딱히 없었기도 하고, 아무튼 단순히 Int로 파싱 하는 거라 생각했는데, 아래와 같이 기수를 입력하면 해당 진법으로 해석해 값을 뱉어낸다.Integer.parseInt(Stirng, base)// 2진법Integer.parseInt("1010", 2); // -> 10 반환// 8진법Integer.parseInt("12", 8); // -> 10 반환// 16진법Integer.parseInt("A", 16); // -> 10 ..

[Java] BOJ 13909: 창문 닫기와 힙 메모리 한도

요즘 변수명을 의미 있게 작성하려고 노력하는 중이다. 물론 알고리즘을 풀 때는 편의상 내가 알 수 있을 정도로만 작명한다. 동시에 메서드는 최대한 빼서 구현하는 편인데, 특별한 이유는 없고 메서드를 만드는 것에 익숙해지고 싶어서다.창문 닫기 문제는 9단계에 위치했지만 앞선 단계들보다 쉽다. 그래서 크게 생각할 점 없이 코드를 짤 수 있었다.// https://www.acmicpc.net/problem/13909import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Problem13909 { public static void main(String[] args) throws ..

[Java] MVC 패턴: 로또 애플리케이션 만들기 1편

백엔드 개발자를 희망한다면서 지금까지 잘못된 방법으로 공부하고 있었던 것 같다. 알고리즘이나 조금 건드리고, 인프런 강의를 챙겨 들으며 문법을 배우는 것만으로도 충분히 잘하고 있다고 생각했다.  현실은 JONNA 부족하다. 한 블록에 모든 내용을 담다가, 메서드로 분리하는 것을 적용해 보기까지도 엄청 오랜 기간이 걸렸다. 일부러 메서드로 빼는 연습을 계속하고 있다만 솔직히 지금도 잘 모르겠고 어렵다.  자바의 메모리 영역이라던가 객체 지향이라던가, 아무튼 자세히 파고들면 머리 아픈 개념들이 참 많은데, 지금 당장 필요한 건 디자인 패턴이다. 진작에 스프링까지 공부했으면 조금 더 나았을까 싶기도 한데, 이제 와서 어쩌겠나. 나는 지금까지 패키지 구조조차 명확하게 나누고 시작한 적이 없었다. 그런데 최근 느..

[GitHub] Commit & Push Changes to GitHub via Terminal

IDE가 제공하는 커밋 기능만 사용하던 사람들이 분명히 있을 겁니다. 저도 그랬던 기억이 있어서 이참에 정리해 봤어요. 1일 1포스팅이 지치기도 하고요. 아무튼 오늘은 이걸로 넘어가겠습니다. (⌐■_■)1. Git 설치 확인git --version* Git 버전이 출력되면 설치된 것입니다.* 출력되지 않은 경우, Git을 설치해 주세요. [깃 설치하기]2. 로컬 리포지토리 준비git clone https://github.com/username/repository* 작업할 리포지토리의 URL을 복사한 후, 명령어를 통해 클론합니다.* 이미 준비된 상태라면 4번으로 넘어가 주세요.3. 리포지토리로 이동cd repository* cd는 change directory의 약자이며, 명령어를 통해 경로를 변경합니다..

[GitHub] Conventional Commits / 커밋 유형 정리

커밋 메시지를 유의미하게 작성하자. 커밋 유형을 통해 각 커밋이 어떤 종류의 변경을 포함하는지 설명할 수 있다. 커밋 메시지를 잘 작성하면, 나중에 프로젝트의 변경 이력을 살펴볼 때 쉽게 이해할 수 있다. 다음은 일반적으로 구분되는 커밋 유형이다. feat (새로운 기능 추가)  feat: 로그인 기능 추가fix (버그 수정)  fix: 로그인 화면에서 발생하는 오류 수정docs (문서 수정)  docs: README.md 파일 업데이트style (스타일 변경)  style: 코드 들여쓰기 정리refactor (리팩토링)  refactor:  함수 구조 개선perf (성능 개선)  perf: 이미지 로딩 속도 개선test (테스트 추가/수정)  test: 유닛 테스트 추가chore (기타 작업)  cho..

[Java] 나를 위해 정리한! 피드백 모음!

개발은 혼자 하는 것이 아니다. 다른 개발자와의 원활한 소통을 위해서 좋은 이름을 짓는 것은 아주 중요하다. 변수 이름, 메서드 이름, 클래스 이름을 짓는데 시간을 투자하자. 이름을 통해 의도를 드러내자. [❗] 변수 이름에 자료형을 사용하지 말자.  변수명에 자료구조 이름을 포함시키면, 나중에 그 자료구조를 변경할 때 변수명을 변경해야 할 수 있다. 변수명을 자료구조에 의존하지 않도록 짓자.  자료형을 드러내는 것보다 의도를 드러내는 것이 중요하다. 예를 들어 carNameList는 해당 변수의 자료형인 리스트에 초점을 맞추고 있다. 차라리 carModels와 같이 구체적인 변수명을 사용하면 해당 변수가 차 모델을 담고 있다는 의도가 명확하게 전달된다.String carNameList = Console..

[Java] BOJ 11723: 비트마스크 (BitMask)

들어가기에 앞서  비트마스크란 컴퓨터의 비트를 이용해, 이진 데이터로 상태를 저장하고 처리하는 기법이다. 작은 메모리 공간으로 다양한 연산을 수행할 수 있기에 효율적인 알고리즘을 설계할 수 있다. 주로 플래그 설정, 집합의 요소 추적, 특정 비트에 대한 연산 등에 사용된다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashSet;import java.util.StringTokenizer;public class Problem11723 { public static void main(String[] args) throws IOException { ..

[Java] BOJ 1654: 이진 탐색, 이분 탐색 (Binary Search)

들어가기에 앞서  이진 탐색이나 이분 탐색이나 영어로는 Binary Search로 같은 말이다.  결국 데이터를 반으로 나누어가며 목푯값을 찾는 알고리즘이다. 여기서 말하는 데이터는 정렬된 배열을 말한다.  정렬된 배열로 진행해야 하는 이유는 이진 탐색 원리에 있다.  우선 시작점과 끝점을 가지고 중간점을 만든다. 중간값을 기준으로 원하는 값과 비교하여 탐색할 구간을 좁혀나간다. 원하는 값이 중간값보다 작으면 왼쪽 절반을 탐색하고, 더 크면 오른쪽 절반을 탐색한다.  위 작업을 반복하다가 원하는 값을 찾거나 구간이 사라지면 종료한다. 이진 탐색을 왜 사용할까?  배열을 처음부터 끝까지 차례대로 탐색하는 방법을 선형 탐색이라고 한다. 배열의 길이가 N이라고 할 때, 최악의 경우 시간복잡도는 O(N)이다. ..

[IntelliJ] Git Clone / Clone failed: repository not found

GitHub 조직 초대를 받았다. GitHub에서 따로 알림이 오지 않아, 처음에는 초대받은 줄도 몰랐다. 어느 순간 GitHub에 연동된 이메일로 들어가 보니 초대장이 있었다.  일단 작업하기 위해 조직 리포지토리를 내 개인 계정에 포크 했다. 그리고 평소와 같이 인텔리제이로 Git Clone을 시도했는데, 해당 리포지토리가 private이라 그런지 접근을 위한 로그인 요청을 받았다. 문제는, 요청에 따라 제대로 로그인을 했음에도 계속해서 리포지토리를 찾을 수 없다며 클론에 실패했다.  아직도 왜인지는 잘 모르겠다. 아무튼 기존 로그인 방식을 선택하지 않고 토큰을 생성해 인증하는 방식을 취하니 클론에 성공했다. (사용 권한이고 뭐고 인터넷에서 나온 방식들 전부 아니었고 토큰을 사용하니 해결됐다.)토근 ..

[Java] BOJ 4134: 에라토스테네스의 체

소수 검증static boolean isPrimeNumber(int n) { if (n ▶ 특정 숫자가 소수인지를 판단할 때, 우리는 해당 숫자의 제곱근까지만 약수 여부를 검증하면 된다. 그런데 만약, 범위 내의 소수를 모두 알고 싶다면 어떻게 해야 할까?범위 내 소수 검증public static void main(String[] args) { Scanner sc = new Scanner(System.in); int start = sc.nextInt(); int end = sc.nextInt(); for (int i = start; i ▶ 앞서 제시한 메서드를 사용하면, 당연히 반복문을 통해 범위 내 소수를 나열할 수 있다. 하지만 입력된 범위가 커지면 커질수록 더 많은..

[Java] OCP (Open-Closed Principle) / 개방-폐쇄 원칙

좋은 객체 지향 설계 원칙에는 여러 가지가 있지만, 그중 하나가 바로 OCP다.Open for extentionClosed for modification 즉, 기존 코드는 수정하지 않으면서 새로운 기능을 위해 확장할 수 있어야 한다. *기존 코드: 시스템의 핵심 동작 코드*확장된 부분: 요구사항 추가 구현Strategy Pattern  전략 패턴이란 다양한 객체 지향 디자인 패턴 중 하나로, 알고리즘을 클래스로 캡슐화하여 동적으로 변경할 수 있게 해주는 패턴이다. 이 패턴은 알고리즘을 사용하는 코드와 알고리즘 자체를 분리하여, 새로 추가된 알고리즘이 기존 코드에 영향을 주지 않도록 한다.[전략 패턴의 기본 구조]클라이언트 코드 (Context)전략 인터페이스 (Strategy)구체적인 전략 (Concre..

README

모든 과정을 기록하는 블로그입니다.2024년 10월 4일 - 11월 16일: 점프 투 파이썬 10월 5일 - 11월 16일: 백준 온라인 저지 (파이썬) 11월 14일 - 11월 17일: SQLD 11월 17일 - 11월 28일: 김영한의 자바 입문 11월 19일: 알고리즘 언어 변경 (파이썬 → 자바) 11월 27일 - 12월 6일: 한국재정정보원 데이터 분석 미니 프로젝트 (최우수) 12월 1일 - 1월 13일: 김영한의 실전 자바 - 기본편2025년 1월 7일 - 1월 11일: 컴퓨터활용능력 2급 1월 14일 - : 김영한의 실전 자바 - 중급 1편 2월 19일 - 2월 22일: ADsP - * 스프링 기본* 정보처리기사 / OPIc* GSAT / 에세이 / PT 면접 마지막 편집: 25-01-13

카테고리 없음 2025.01.31

[Java] 인터페이스의 다중 구현

일단, 자바에서 다중 상속이 안 되는 이유가 무엇인가?특정 클래스를 상속받는다고 할 때, 자식 클래스에서 오버라이딩 하지 않은 부모 클래스의 메서드가 있다고 치자. 그런데 하필이면 A라는 부모에게도 m이라는 메서드가 있고, B라는 부모에게도 m이라는 메서드가 있다. 이 상황에서 m이라는 메서드를 호출할 때, A 클래스와 B 클래스 중 어느 부모 클래스의 메서드를 호출해야 하는가? 명확한 답이 없을 뿐더러 심각한 문제를 발생시킬 여지가 있다. 때문에, 자바에서는 다이아몬드 문제를 막고자 클래스의 다중 상속을 금지시킨다. 관련 게시물: 다이아몬드 문제 반면, 인터페이스는 다중 구현을 허용한다. 그 이유는 무엇인가? 인터페이스는 인터페이스를 구현하는 곳에서 해당 기능을 모두 구현해야만 한다. 각기 다른 인터페..

[Service] 2025 컴퓨터활용능력 4일 합격 수기

기풍쌤 유튜브를 참고하였습니다.컴퓨터활용능력 신청하기2025 개정 정보Day 1F4: 절대참조COUNT: 문자 인식 불가범위에 대한 조건 부여 시, "" 사용할 것: 같지 않음 (엑셀에서는 != 아님)&: 결합 (엑셀에서는 + 아님)인덱스의 시작은 1부터 (엑셀에서는 0 아님)NOW/TODAY: 파라미터 불필요Ctrl + ;: 날짜 반환Ctrl + Shift + ;: 시간 반환데이터베이스 함수: (표 범위, 열 제목 또는 열 번호, 조건)큰 범위의 표를 선택 시, Ctrl + Shift + 방향키 사용할 것Day 2VLOOKUP/HLOOKUP: (기준 셀, 참조 범위, 열 번호, 0 또는 1)MATCH: 행 또는 열 반환INDEX: (범위, 행, 열)RANK.EQ 함수 사용 결과 N/A 나오면 유사한 값..

[Java] 객체 지향 프로그램과 다형성

자바는 객체 지향 언어다! 객체 지향 프로그램의 대표적인 특징은 아래와 같다.캡슐화상속다형성▶ 프로그래밍에서 다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 말한다. 다형성 이해를 위한 핵심 이론 두 가지은 아래와 같다.다형적 참조메서드 오버라이딩▶ 다형적 참조는 말 그대로 다양한 형태로 참조될 수 있음을 말한다. (상속 관계 주의: 부모 클래스의 객체를 자식 클래스의 참조 변수에 할당하는 것은 타입 불일치로 간주된다.)상속 예제public class Parent { public void parentMethod() { System.out.println("parent method"); }}public class Child extends Parent { public..

[Java] Getter, Setter 메서드 / 접근 제어자

접근 제어자getter/setter private 필드에 직접 접근할 수 없을 때, 보통 getter 메서드와 setter 메서드를 제공한다. 이렇게 하면 객체를 안전하게 조회하거나 변경할 수 있다.public class TestForInt { private int number; // getter public int getNumber() { return number; } // setter public void setNumber(int number) { if (number != 0) { this.number = number; } }}*get + 변수명 (낙타 표기법)*set + 변수명 (낙타 표기법)public ..

[Java] super 키워드 / 상속과 메모리 구조

자바는 단일 상속만 가능하며, 상속받고자 하는 클래스에 extends 키워드를 사용하면 된다. 아래 예제에서는 Animal 클래스를 Dog와 Cat이 상속받아 기존의 코드를 재사용한다.// 부모 클래스public class Animal { public void eat() { System.out.println("Eat!"); }}// 자식 클래스public class Dog extends Animal { public void bark() { System.out.println("bark!"); }}// 자식 클래스public class Cat extends Animal { public void meow() { System.out.println(..

[Java] static final / 매직 넘버와 상수

매직 넘버 프로그래밍에서 매직 넘버란 코드에서 의미를 명확히 알 수 없는 숫자 값을 말한다. 특정 숫자가 변수 없이 바로 사용되어 이 숫자가 어떤 의미를 가지는지 알기 어려운 경우 매직 넘버라고 부르는 것이다. 매직 넘버는 가독성을 저하시킬 뿐 아니라, 유지보수 측면에서도 매우 비효율적이므로 지양하는 것이 좋다. 그래서 이번에는 매직 넘버 문제를 해결하는 상수에 대해 포스팅하도록 하겠다.상수 관례public class Constant { // 수학 상수 public static final double PI = 3.14159265358979323846; public static final double EPS = 1e-6; // 시간 상수 public static final int..

[Java] 자바의 메모리 구조

멤버 변수 용어 정리public class Data { public String name; // 인스턴스 변수 public static int count; // 클래스 변수, 정적 변수, static 변수 public Data(String name) { this.name = name; count++; }}  위 코드에서 name과 count 모두 멤버 변수이다. 그러나 static 유무에 따라 인스턴스 변수, 클래스 변수로 구분된다. 인스턴스 변수의 경우 인스턴스를 만들 때마다 새로 만들어지지만, 클래스 변수의 경우 일반적으로 자바 프로그램을 시작할 때 딱 1개가 만들어진다. 클래스 변수는 인스턴스 변수와는 달리 여러 곳에서 공유하는 목적으로 주로 사용된다...

[SQL] 비전공자 노베이스 SQLD 3일 합격 수기

자격증은 따기만 하면 된다는 사람만 보시길 추천합니다.사전 준비SQL 자격검정 실전문제> 구매 (필수) * SQLD는 3과목이 포함되지 않기 때문에 실제 분량은 130p 이내 홍쌤의 데이터랩> 전자책 구매 (선택) * 오직 기출문제 5회 분량 때문이므로 선택 사항Day 1▶ 유튜브 SQLD 재생목록 시청 * 전자책을 구매하지 않아도 충분히 이론 공부 가능하나, 기출문제 때문에라도 구매하는 걸 추천 ▶ 노랭이 4p - 27p 참고하면서 문제 풀이 & 오답 점검 * 1과목은 매우 쉬운 파트이므로 가능한 다 맞히고 넘어갈 것 [당시 결과]1과목 1장: 25/33 (개)1과목 2장: 11/17 (개) Day 2▶ 노랭이 32p - 130p 마무리 & 오답 점검 * 단시간 이해하기 어려운 부분 포기할 것 (필..

[IntelliJ] 인텔리제이 단축키 모음

본 게시물은 수시로 업데이트 됩니다.[마지막 수정: 25-01-19] Ctrl + 클릭Go to Definition 기능psvmpublic static void main(String[] args) {} soutSystem.out.println(); soutvSystem.out.println(변수 이름); soutmSystem.out.println(메서드 이름); iter향상된 for 문 생성 setsetter 생성 getgetter 생성Ctrl + P메서드 호출 시 파라미터 표시 Ctrl + O메서드 오버라이딩 Ctrl + W선택 영역 확장 Ctrl + Alt + V변수 선언 자동 생성 Ctrl + Alt + N코드 정리 Ctrl + Alt + M메서드 추출 Ctrl + Alt + Shift + 방향키코..

728x90