반응형

개발 & 데이터베이스 103

주소창에 구글, 네이버 등을 검색하면 어떤일이 벌어질까?

안녕하세요. N년차 웹 개발자입니다. 저는 웹 개발을 하면서 이 페이지가 어떻게 동작하는지에 대해서 알아야 된다고 생각합니다. 그렇다면 사용자가 주소창에 www.google.com 혹은 www.naver.com 을 입력하면 무슨 일이 발생할까요? 우리가 사는 집 주소가 존재하듯이 웹 브라우저도 주소가 있다. 모든 사람에게 '수원역 1번 출구'로 오세요. 라고 한다면 한 명도 빠짐없이 수원역 1번 출구로 올 것이다. 웹 브라우저도 google.com 혹은 naver.com 처럼 고유 주소가 존재하고 이것을 URL이라고 부른다. 웹 브라우저 동작 방식 1. 사용자가 google.com 을 검색 2. 웹브라우저는 캐싱된 DNS 기록들을 해당 도메인 주소와 대응하는 IP 주소를 확인 DNS는 웹사이트 이름과 I..

자바 카운팅 정렬 Counting Sort 계수 정렬 완벽 이해하기

카운팅 정렬 Counting Sort 카운팅 정렬은 시간 복잡도 O(n) 을 가지고 있기 때문에 많은 정렬 알고리즘 중에서 좋은 성능을 갖고 있다. 빠른 정렬 알고리즘에 속하는 퀵 정렬 (Quick Sort), 힙 정렬 (Heap Sort), 합병 정렬 (Merge Sort) 등의 평균 시간 복잡도가O(nlogn) 인 것을 보면 엄청난 속도를 가지고 있다는 것을 알 수 있다. 이처럼 빠른 속도를 가졌음에도 정렬이 필요한 상황에서는 퀵 정렬을 주로 사용한다. 그 이유에 대해서 알아보자. 정렬 과정 카운팅 정렬은 데이터 값이 몇 번 나왔는지 세주는 것이다. 정렬의 이름처럼 수를 counting 해주는 것. 다음과 같은 배열이 있다고 가정해보자. 1. 배열을 쭉 돌면서 해당 값을 index로 하는 새로운 배열..

좋은 객체 지향 설계의 5원칙 SOLID 정의

객체 지향 언어에는 Java, C++, 파이썬 등이 있다. 이 언어들로 설계를 할 때 지켜줘야 할 소프트웨어 개발 원칙 5개를 SOLID 원칙이라고 부른다. SRP (Single Responsibility Principle) 단일 책임 원칙 OCP (Open Closed Priciple) 개방 폐쇄 원칙 LSP (Listov Substitution Priciple) 리스코프 치환 원칙 ISP (Interface Segregation Principle) 인터페이스 분리 원칙 DIP (Dependency Inversion Principle) 의존 역전 원칙 좋은 설계란 시스템에 변화가 생겼을 때 영향을 받는 범위가 적은 것을 말한다. 즉, SOLID 설계 원칙을 적용한다면 코드를 확장하고 유지 보수 관리하기..

자바 Comparable과 Comparator 차이점

Comparable과 Comparator 은 인터페이스 (interface) 다. 그렇기 때문에 Comparable 과 Comparator 을 사용하기 위해서는 인터페이스 내에 선언된 메소드를 필수적으로 재정의해야한다. 두 개의 인터페이스는 알고리즘을 풀어보면서 자주 언급했던 부분이다. 실제로 알고리즘과 별개로 꼭 알아두어야하는 인터페이스 중 하나이므로 기억해주는 게 좋다. Comparable 해당 인터페이스에는 compareTo(T o) 메소드 하나가 선언되어있다. 즉, Comparable 인터페이스를 사용하기 위해서는 compareTo(T o) 메소드의 재정의가 필수다. Comparator 해당 인터페이스에는 많은 메소드가 선언되어있다. 하지만 필수로 재정의 해주어야하는 건 compare(T o1, ..

오라클 ORA-06533: 첨자가 개수를 넘었습니다.

오라클 프로시저, 함수를 호출할 때 주로 발생하는 에러로 프로시저 혹은 함수 내에서 Array (배열) 변수를 사용할 때, 주어진 크기를 넘어섰을 경우에 발생한다. DECLARE TYPE ARR_A IS TABLE OF VARCHAR2(5); ARR_B ARR_A; BEGIN ARR_B := ARR_A('A', 'B', 'C', 'D', 'E'); // 맨 마지막 요소 2개 삭제 ARR_B.TRIM(2); DBMS_OUTPUT.PUT_LINE(ARR_B(1)); // A DBMS_OUTPUT.PUT_LINE(ARR_B(2)); // B DBMS_OUTPUT.PUT_LINE(ARR_B(3)); // C DBMS_OUTPUT.PUT_LINE(ARR_B(4)); // 삭제된 데이터 (D) EXCEPTION W..

오라클 cmd에서 사용자 계정 생성 및 권한 부여 방법

안녕하세요. 오늘은 명령 프롬포트 (cmd) 창에서 사용자 계정을 생성하고 권한을 주는 방법에 대해서 알아보겠습니다. 사용자 계정 생성하는 방법 1. 명령 프롬포트 (cmd)에서 sqlplus에 관리자로 접속한다. sqlplus "/as sysdba” 위 명령어로 접속이 되지 않는다면 sqlplus를 입력 후에 user-name에 sys as sysdba 를 입력하고, password는 입력하지 않고 엔터를 입력하면 된다. 2. 계정 생성 CREATE USER [ID] IDENTIFIED BY [PW]; ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다. 그대로 작성했는데 에러가 발생한다. 정상이다. 에러가 발생하지 않는 분들도 오라클 버전의 문제로 오라클 12c 기준으로 아래 버전은 에러가 ..

자바 오류 source release 11 requires target release 11 해결

java: warning: source release 11 requires target release 11 프로젝트를 생성했을뿐인데 발생하는 에러다. Project SDK가 build.gradle에 적힌 버전과 맞지 않아서 발생하는 에러로 쉽게 해결할 수 있다. group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' build.gradle 파일을 보면 sourceCompatibility 를 볼 수 있다. "Java 11 버전을 쓰겠다." 라는 뜻이다. Project SDK 확인하는 방법 1. File > Project Structure에 들어간다. 2. Project Settings > Project 목록에 SDK 를 확인해보면 bui..

[JAVA] 얕은 복사와 깊은 복사에 대해서 알아보기

자바에는 얕은 복사 (Shallow Copy) 와 깊은 복사 (Deep Copy) 가 존재한다. 얕은 복사는 복사하려는 배열의 '주소값'을 복사함 깊은 복사는 '실제값'을 새로운 메모리 공간에 복사함 1차원 배열 - 얕은 복사 복사하려는 배열의 주소값을 가져옴 두 개의 배열 중 하나라도 값을 수정한다면 둘 다 수정됨 int[] A = {1, 2, 3}; int[] B = A; B[0] = 5; A[2] = 10; System.out.println(A[0]); // 5 System.out.println(B[2]); // 10 B[0]을 수정했지만 A[0]의 값도 변경되고, A[2]를 수정했지만 B[2]의 값도 같이 변하는 것을 볼 수 있다. - 깊은 복사 복사하려는 배열의 주소값이 아닌 실제값을 가져와서 ..

오라클 최대값, 최솟값 찾는 GREATEST, LEAST 함수 사용 및 주의사항

오라클에서는 함수 내의 인자값 중에서 최대값, 최솟값을 찾을 수 있는 함수를 제공한다. 최대값과 최솟값을 구하는 함수로 MAX 와 MIN 함수가 생각날텐데 사용 방법이 조금 다르다. MAX, MIN 은 검색 조건에 맞는 값 중에서 최대값, 최솟값을 찾는다. GREATEST, LEAST 는 여러 개의 열(Column)에서 최대값, 최소값을 찾고, 숫자가 아닌 문자열도 비교가 가능하다. GREATEST, LEAST SELECT GREATEST(100, 200, 300) AS GREATEST , LEAST(100, 200, 300) AS LEAST FROM DUAL; // 300, 100 여러 개의 인자값에서 최대값, 최소값을 뽑아올 수 있다. 위 쿼리의 GREATEST에선 300, LEAST에선 100이 출..

자바 String, StringBuffer, StringBuilder 차이

자바에서 문자열을 처리할 때 대표적으로 String, Stringbuffer, StringBuilder 3가지를 사용한다. 위 3가지의 차이점은 무엇일까? String int, long, float, char, boolean과 같은 primitive 타입이 아닌 reference 타입의 참조형 변수로 한 번 할당된 공간이 변하지 않는 immutable 자료형이다. String str = "Hello "; str += "World !!!"; 위의 그림을 보면 본래 가리키고 있던 "Hello" 를 버리고 "Hello World !!!" 라는 값을 가지는 메모리 영역을 가리킨다. immutable 자료형의 특징으로 문자열을 수정하게 되면 기존에 있던 메모리 영역은 Garbage Collection 으로 사라지..

반응형