JAVA 소개


미국의 선마이크로시스템즈가 개발한 객체 지향 프로그래밍 언어


특징


1. JRE이 설치되어 있으면 컴퓨터와 운영체제 상관없이 작동 - 운영체제에 독립적

2. 기본 자료형 이외에 모든 요소들이 객체로 표현

3. 캡슐화, 상속, 다형성이 잘 적용된 언어

4. GC(garbage collector)를 통한 자동 메모리 관리

5. 멀티 쓰레드 지원



객체지향프로그래밍(OOP)의 특징


1. 추상화

공통의 속성이나 기능을 묶어 이름을 붙이는 것

클래스를 정의하는 것 자체가 추상화라고 볼 수 있음


2. 캡슐화

데이터 구조와 데이터를 다루는 방법을 묶는 것

클래스 내부를 외부에서는 볼 수 없도록 하는 것 - 은닉화


3. 상속성

상위 클래스를 하위 클래스가 물려받는 것

상속을 이용해 재사용성을 증대시킬 수 있다.


4. 다형성

같은 메세지에 따라 클래스가 다른 행위를 하게 하는 것

이름은 같지만 파라미터에 따라 다른 동작을 하는 메소드들을 만듬


Atom 에디터


github에서 만든 오픈소스 에디터




git-plus 패키지


git 명령어를 손쉽게 칠 수 있는 에디터 플러그인



git-plus 장점


git bash를 열고 매번 해당 프로젝트 폴더로 이동하여 명령어를 입력해야했지만,

git plus를 이용하면 ctrl + shift + h 단축키로 쉽게 git 명령어창을 띄우고,

자동완성 기능으로 원하는 명령어를 손쉽게 입력가능!


이전에 ecilpse에서 제공하는 git 플러그인을 이용하다가 git bash로 갈아 탔을 때도 신세계였지만,

atom 에디터에서 이용하는 git-plus는 단연 최고!



실제 사용 예시


1. git-plus 설치






2. ctrl + shift + h로 git console창 열기



*한번에 add, commit, push까지 가능



삽입정렬이란?


Key값과 정렬된 리스트가 주어졌을 때,

Key값을 정렬된 리스트의 알맞은 위치에 삽입하여 하나의 정렬된 리스트를 만드는 것



동작 원리


다음과 같이 숫자 4개가 주어지고 이를 삽입정렬을 이용해 정렬한다면



 5

 4

 2


1. key값을 두번째 숫자 4로 지정


5

 4

3

 2



2. 키값과 그 앞에 있는 값을 비교 후 키값이 작으면 자리를 바꾼다.


4

 5

3

 2



3. 더 이상 비교할 값이 없으므로 정렬 1회전이 끝난 것



4. 세번째 값을 key값으로 지정


4

 5

3

 2



5. 앞의 값과 비교 및 위치 이동


4

 3

5

 2


3

 4

 2



6. 이를 반복하면 모든 값이 정렬된다.


2

 3

 5



예제코드)


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
31
32
33
34
35
36
37
38
39
import java.util.Scanner;
 
public class InsertionSort {
    
    /*
     * 삽입정렬
     * Key값과 정렬된 배열이 주어졌을 때,
     * Key값을 정렬된 배열의 알맞는 자리에 삽입하여 정렬하는 방법
     */
    
    public static void main(String[] args) {
        //값을 입력받고 출력하는 부
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] array = new int[n];
        for(int i=0;i<n;i++) {
            array[i] = scan.nextInt();
        }
        
        InsertSort(array);
        
        for(int i:array) System.out.print(i);
        
        scan.close();
    }
    
    public static void InsertSort(int[] array) {
        for(int i=1;i<array.length;i++) { //주어진 값들 중에서 2번째 값부터 Key값으로 선정
            int key = array[i];           //i번째 수를 Key값으로 설정
            int j = i-1;                   //Key값을 기준으로 왼쪽에 있는 수부터 비교
            while(j>=0 && array[j]>key) { //맨앞까지 비교했거나 key값이 왼쪽수보다 작으면 순회를 멈춤
                array[j+1= array[j];    //비교한 값을 오른쪽으로 한칸 이동
                --j; 
            }
            array[j+1= key;               //알맞는 key값의 위치에 저장
        }
    }
}
 
cs



시간 복잡도 분석


최선의 경우는 모든 수가 이미 정렬된 상태로 수가 들어올 때이다.

이때는 수의 개수인 n의 복잡도를 가진다.


하지만 최악의 경우인 반대 순서로 정렬되어 들어온 경우에는

Key값을 옮기고 그 안에서 전부다 값들을 비교해야 하기에 n제곱을 수행 복잡도를 가진다.



+ Recent posts