no image
[Java] 객체 지향과 디자인 패턴
객체 지향의 4대 특성 1. 캡슐화 객체의 속성을 보호하기 위해 사용 Method 설계 속성이 선언되었다면 해당 속성을 변경하는 method는 반드시 선언해야한다. Getter / Setter Method CRUD Method Business Logic Method 인스턴스 생명 주기 처리 Method 인스턴스 영구성 관리 Method 무결성 캡슐화 코딩 : 변수는 private 로 선언하고 메서드는 public으로 선언한다. Getter / Setter 를 제외하고는 매개변수를 Validation 한 후에 메서드를 수행한다. 2. 상속 속성의 상속이 아닌 하위 개체로 내려갈수록 구체화된다. 프로그램 구조 이해도 최상위 클래스의 구조를 통해 하위 클래스의 동작을 이해할 수 있다. 재사용성 및 유지보수성 ..
2022.05.09
no image
[Mac/Linux] Mac에서 SSH 접속 편하게 하기
Mac에서 ssh 접속 방법 일반적인 명령어 형식 ssh -i {키 파일 경로} ec2-user@{ec2 퍼블릭 IPv4 주소 or 퍼블릭 IPv4 DNS} ssh 명령어의 옵션들 ssh [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-..
2022.05.04
[Spring] DI(Dependency Injection)
💡 클린코드 작성 원칙 응집도는 높이고 결합도는 낮춘다. 응집도(Cohesion) : 모듈 내부) 구성요소 간의 연관도 응집도가 낮다? → 각 모듈이 모두 따로 놀고 있으며 단순히 모두 다른 역할을 수행하는 모듈들을 한데 모아놓기만 함 결합도(Coupling ) : 모듈 외부) 모듈간의 상호의존성 결합도가 높다? → 각 모듈이 비슷한 기능을 수행할 가능성이 높음 DI(Dependency Injection) 의존성 주입 class Feed() { ... } class Meet extends Feed { ... } class Bone extends Feed { ... } class Puppy { private Feed feed; public Puppy() { this.feed = new Meet(); // ..
2022.05.04
no image
[Java] 자료 구조
자료구조(Data Structure) 효율적인 로직을 짜기 위한 기본 토대 개발하려는 시스템에 가장 효율적인 자료구조를 선택하는게 중요하다. 선형 자료구조 배열(Array) 자료의 물리적 위치와 논리적 위치가 같다. 인덱스 연산에 의해 배열 내 요소를 바로 꺼낼 수 있다. 산술적 연산이 빠르다. 배열의 개수에 의존성을 갖는다. 연결 리스트(Linked List) 노드가 필요할 때마다 메모리를 할당 받고 자료는 링크를 통해 연결된다. 자료의 물리적 위치와 논리적 위치가 다를 수 있다. 자료뿐만 아니라 다음 요소를 가리킬 링크를 가진다. Ex. C, C++ 의 포인터 데이터 수정에 따라 링크 연결만 생성 또는 해제해주면 되기 때문에 배열에 비해 수행속도가 적게 든다. 스택(Stack) Last In Firs..
2022.05.03
no image
[Java] 객체 지향 프로그래밍(3)
상속 (extends) 이미 구현된 클래스보다 더 구체적인 기능을 구현할 때 사용 protected 접근제어자를 이용하여 하위 클래스에서도 상위 클래스의 멤버 변수에 접근이 가능하도록 한다. 하위 클래스에서 상위 클래스를 상속받으면 하위 클래스 생성자에서 먼저 상위 클래스 생성자를 호출한다. 상속을 이용한 멤버십 시나리오 구현 | 📄 Customer.java /** * 일반 고객 클래스 */ public class Customer { // protected : 하위 클래스 접근가능 protected int customerId; protected String customerName; protected String customerGrade; int bonusPoint; double bonusRatio; pu..
2022.04.26
no image
[Java] 객체 지향 프로그래밍(2)
Static 변수 힙 메모리 : 필요할 때마다 allocation 받아서 처리하는 동적 메모리 영역 스택 메모리 : 함수가 호출될 때마다 함수 내에서 사용하는 지역 변수 메모리 영역 데이터 메모리(constant) : 프로그램이 로드 될 때부터 공유되어 사용되는 메모리 영역 | 📄 Employee.java public class Employee { public static int serialNum = 1000; private int employeeId; private String employeeName; private String department; // 사원이 한명 추가될 때마다 사번 증가 public Employee() { serialNum++; employeeId = serialNum; } pub..
2022.04.19
no image
[알고리즘 일기 - 파이썬] 235. 곱셈
1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net Baekjoon 1629. 곱셈 [파이썬(python) - 분할정복] 자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. 출력 첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다. 입력 예시 10 11 12 출력 예시 4 ❧ 정답 🔎IDEA) 분할정복 완전탐색 풀이 : 시간초과 발생 짝수 일 경우..
2022.04.17
no image
[알고리즘 일기 - 파이썬] 234. 2xn 타일링 2
11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net Baekjoon 11727. 2xn 타일링 2 [파이썬(python) - DP] 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 입력 예시 2 출력 예시 3 ❧ 정답
2022.04.17
no image
[알고리즘 일기 - 파이썬] 233. 게임
1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시 www.acmicpc.net Baekjoon 1072. 게임 [파이썬(python) - 이분 탐색] 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시작했다. 의심을 피했다고 생각한 형택이는 다시 게임을 켰다. 그 때 형택이는 잠시 코딩을 하는 사이에 자신의 게임 실력이 눈에 띄게 향상된 것을 알았다. 이제 형택이는 앞으로의 모든..
2022.04.17