일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spring
- #크랙미 5번
- #크랙미2번
- #크랙미 9번
- #심플즈
- #크랙미
- java
- #심플즈 크랙미
- #abex크랙미
- #보안이슈
- #파밍
- leetcode
- #크랙미 10번
- #크랙미3번
- #크랙미4번
- #abex
- #리버싱
- Easy
- java8
- GraphQL
- #고클린
- #abex크랙미4번
- springframework
- #보안뉴스
- 리버싱
- Today
- Total
목록전체 글 (120)
Halo World
https://www.acmicpc.net/problem/14500 백준의 테트로미노 문제를 풀어보았습니다. DFS를 이용해서 푸는 문제였고, DFS로 처리하지 못하는 ㅗ,ㅏ,ㅜ,ㅓ 모양만 잘 처리하면 되는 문제였습니다. import java.util.Scanner; import java.io.FileInputStream; public class Main { static int n,m; static int[][] arr; static int[][] visit; static int max_result; static int max; public static void main(String args[]) throws Exception{ Scanner scan=new Scanner(System.in); n=sca..
import java.util.Stack; public class StackTest2{ public static void main(String args[]){ Stack stack = new Stack(); int arr[] = {10,20,30,40,50}; System.out.println(stack.empty()); // 비어있으면 true, 안 비어있으면 false를 리턴 for(int i : arr){ stack.push(i); //배열 arr의 값을 차례대로 stack에 push } System.out.println(stack); // 현재 Stack의 상태 확인 stack.push(7); //스택에 7 삽입 System.out.println(stack); //스택에 7이 삽입되었는지 확인 s..
라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메소드를 설계하는 것이 바람직하다. 객체 생성을 막기위해 생성자를 호출하지 못하게 하거나, 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 그리고 특정 메소드를 호출할 수 없도록 제한할 필요가 있다. 자바는 이를 구현하기 위해 접근 제한자(Access Modifier)를 제공한다. 접근 제한 적용 대상 접근할 수 없는 클래스 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 없음 default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스 private 필드, 생성자, 메소드 모든 외부 클래스 출처..
| 싱글톤(Singleton) 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤(Singleton)이라고 한다. 싱글톤을 만들기 위해서는 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다. 그리고 이를 위해 생성자 앞에 Private 접근 제한자를 붙여준다. > 싱글톤을 만드는 코드 Public class Singleton{ // 정적 필드private static Singleton A = new Singleton(); // 생성자private Singleton() {} // 정적 메소드static Singleton getInstance(){return A;}} 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 ..
| 정렬 데이터를 특정한 조건에 따라 일정한 순서가 되도록 다시 배열하는 일 | 1. 선택 정렬(Selection Sort) 제자리 정렬 알고리즘의 하나로, 다음과 같은 순서로 이루어진다. 1) 주어진 리스트 중에 최솟값을 찾는다. 2) 그 값을 맨 앞에 위치한 값과 교체한다. 3) 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. 선택 정렬 알고리즘은 n-1개, n-2개, ...., 1개씩 비교를 반복하고, 이에 따른 시간복잡도는 O(n^2)이고 공간복잡도는 O(n)이다. [선택 정렬 애니메이션] > C에서의 선택 정렬 구현 > JAVA에서의 선택 정렬 구현 | 2. 삽입 정렬(Insertion Sort) 현재 위치에서, 그 이하의 배열들을 비교하여 자신이 들어갈 위치를 찾아, 그 위치에 삽..
| 1. 리팩토링할 대상을 선정한다. 처음부터 모든 프로그램을 리팩토링 할 수는 없다. 가장 중요한, 자주 추가 및 변경되는 프로그램을 선정한다. > 반복되는 코드 > 긴 메소드 > 큰 클래스 > 긴 매개변수 목록 > 확산을 위한 변경 : 한 클래스의 목적이 여러 부분에서 사용되고, 각각의 목적에 따라서 수정이 이루어져야 하는 경우 분리하는 것이 좋음 > 샷건(산탄총) 수술 : 확산을 위한 변경과 같아보이지만, 하나의 수정을 위해서 여러 클래스를 건드려야 할 경우가 발생된다면 차후 하나의 클래스만 수정하는 것이 가능하도록 만듬 > 기능에 대한 욕심 : 어떤 메소드가 같은 클래스의 메소드보다, 다른 클래스의 메소드를 더 많이 사용한다면 그 메소드는 많이 사용하는 클래스로 옮기는 것이 차라리 낫다. > 큰 ..
| 리팩토링이란? 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법 > 외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스 > 소프트웨어의 기능은 바꾸지 않음 | 리팩토링의 특징 - 소프트웨어의 디자인을 개선시킴 - 소프트웨어를 더 이해하기 쉽게 함 - 프로그램의 구조를 명확히 함으로써 버그를 잡도록 도와줌 - 소프트웨어의 개발 속도를 향상시킴 | 리팩토링을 언제 해야하는가? 리팩토링 자체를 목적으로 삼기 보다는, 다른 것에 대한 수단으로 리팩토링을 함 - 삼진 규칙 : 스트라이트 세 개면 리팩토링을 함 (어떠한 것을 처음 할 때는 그냥하고, 두 번째에도 중복되도록 그냥 하고, 세 번째로 비슷한 것을 하게 되면 그때 리팩토링을 한다) - 기능을 추가할 때 리팩..
| 무결성 제약조건 주요 목적은 데이터베이스에 저장된 데이터의 무결성을 보장하고, 데이터베이스의 상태를 일관되게 유지하는 것 어느 시점에 데이터베이스에 저장된 데이터를 의미하는 데이터베이스 상태 또는 데이터베이스 인스턴스가 항상 지켜야하는 중요한 규칙 | 개체 무결성 제약조건 - 기본키를 구성하는 모든 속성은 널 값을 가지면 안 된다는 규칙 - 개체 무결성 제약조건을 만족시키려면 새로운 투플이 삽입되는 연산과 기존 투플의 기본키 속성 값이 변경되는 연산이 발생하 때 기본키에 널 값이 포함되는 상황에서는 연상의 수행을 거부하면 됨 | 참조 무결성 제약조건 - 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙 - 개채 무결성 제약조건이 기본키에 대한 규칙으로 각 릴레이션마다 적용되었다면, 참조 무결성 제약..
| 스택(Stack) 영역 - 프로그램이 자동으로 사용하는 임시 메모리 영역 - 지역(local)변수, 매개변수, 리턴 값과 같은 임시로 사용하는 것들에 대한 영역 - 매개변수와 리턴 값은 함수 호출 시 생성, 함수 수행이 끝나면 반환 - 스택 사이즈는 각 프로세스마다 할당되지만, 프로세스가 메모리에 로드될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없음 - 명령 실행 시 자동으로 증가/감소하기 때문에 보통 메모리의 마지막 번지를 지정 | 힙(Heap) 영역 - new(), malloc() 등을 이용하는 동적 할당 객체에 대한 영역 - 메모리 주소 값에 의해서만 참조되고 사용되는 영역 - 대개 포인터 변수를 통해 동적으로 할당받고 돌려줌 | BSS 영역 - 초기화되지 않은 데..
| 캡슐화(Encapsulation) 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용 가능 > 캡슐화의 목적 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위해 접근제한자 (public, private)를 사용하여 설정함 > 캡슐화를 통한 정보 은폐의 장점 - 객체에 포함된 정보의 손상과 오용을 막을 수 있음 - 객체 내부의 조작 방법이 바뀌어도 사용방법을 바뀌지 않음 - 데이터가 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지됨 | 상속(Inheritance) 상위 객체의 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용하 수 있도록 하는 것 > 장점 - 하위 객체를 쉽고 ..