반응형

안녕들 하시죠!

이번시간에는 Java 언어를 사용해 링크드리스트(이중 연결 리스트)를 구현해보겠습니다.

아래에는 제가 사용할 클래스와 메소드입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class LinkedList {
    
        Node head;
        Node rear;
        int size = 0;
    
        void firstNode(int data) {} // 첫번째 Node 생성
        void addRearNode(int data) {} // 뒷단에 Node 삽입
        void addHeadNode(int data) {} // 앞단에 Node 삽입
        int readData(int index) {} // 특정 데이터 읽기
        void printData() {} // 전체 데이터 출력
        boolean removeNode(int index) {} // 특정 노드 삭제
        boolean removeAllNode() {} // 전체 노드 삭제
        
        class Node {
            Node(int data) {
                this.data = data;
            }
            int data;
            Node front = null;
            Node back = null;
        }
}
cs

 

기본적인 Node의 구성입니다.

값이 들어있는 data, 앞에있는 Node를 가리키고 있는 front, 뒤에있는 Node를 가리키고 있는 back

 

앞에있는 Node를 head, 뒤에있는 Node를 rear라고 구성합니다.

 

- void firstNode

 

1
2
3
4
5
6
7
void firstNode(int data) {
        Node newNode = new Node(data);
        head = newNode;
        rear = newNode;
        size++;
        System.out.println("firstNode(int data) 실행");
    }
cs

 

Node가 한개도 없는 상황에서 첫번째 Node를 생성하는 메소드입니다.

앞,뒤에 어떤 Node도 존재하지 않기 때문에 head와 rear 둘다 첫번째 Node를 가리키게 됩니다.

Node가 생성되었으니 size를 증가시켜줍니다.

 

 

- void addRearNode

1
2
3
4
5
6
7
8
9
10
11
12
void addRearNode(int data) {
        if (size != 0) {
            Node newNode = new Node(data);
            rear.back = newNode; // ①
            newNode.front = rear; // ②
            rear = newNode; // ③
            size++;
            System.out.println("addRearNode(int data) 실행");
        } else {
            System.out.println("firstNode(int data) 실행시켜주세요");
        }
    }
cs

 

맨뒤에 Node를 삽입하는 메소드입니다.

 

간단하게 생각하면,

현재 맨뒤를 가리키고 있는 rear의 뒷자리에 새로운 Node를 삽입하고 서로 가리키고있는 화살표를 바꿔주고 맨뒤에 새로 삽입된 Node를 rear로 만들어주는 과정입니다.

 

 

① : rear의 back의 뒤로 향하는 화살표를 새로 삽입될 newNode를 가리키게 만든다. ( rear.back = newNode )

② : 새로 삽입될 newNode의 앞으로 향하는 화살표를 현재 rear를 가리키게 만든다. ( newNode.front = rear )

③ : 화살표를 바꿔 서로 가리키게 만들었으니 새로 삽입될 newNode를 맨뒤(rear)로 만들어준다. ( rear = newNode )

 

- void addHeadNode

앞에서 설명한 addRearNode와 비슷하게 이번엔 맨앞단에 Node를 삽입하는 메소드입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
void addHeadNode(int data) {
        if (size != 0) {
            Node newNode = new Node(data);
            head.front = newNode; // 현재 가장 앞에있는 head Node의 앞으로 향하는 화살표가 새로 삽입될 newNode를 가리키게 만든다.
            newNode.back = head; // 새로 삽입될 newNode의 뒤로 향하는 화살표가 현재 head인 Node를 가리키게 만든다.
            head = newNode; // 새로 삽입될 newNode를 맨앞(head)로 만들어준다. 
            size++;
            System.out.println("맨앞에 " + data + " 들어감");
        } else {
            firstNode(data); // 현재 삽입되어있는 Node가 없다면 새로 추가.
        }
    }
cs

 

 

 

- int readData

특정 Node의 data 읽기.

1
2
3
4
5
6
7
8
9
10
11
12
13
int readData(int index) {
        int result = 0;
        try {
            Node node = head; // 맨앞 Node 부터 시작.
            for (int i = 1; i < index; i++) {
                node = node.back; // 한칸씩 뒤로 이동하며 특정위치(index)를 찾고, 값을 result에 저장.
            }
            result = node.data;
        } catch (Exception e) {
            System.out.println("Exception 발생");
        }
        return result;
    }
cs

 

- void printData

전체 Node의 data 출력.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void printData() { 
        if (size > 0) {
            try {
                Node node = head; // 맨앞 Node부터 시작.
                for (int i = 0; i < size; i++) {
                    System.out.print(node.data + " ");
                    node = node.back; // 한칸씩 뒤로 이동하며 모든 Node의 data 출력.
                }
            } catch (Exception e) {
                System.out.println("Exception 발생");
            }
        } else {
            System.out.println("출력데이터가 없습니다.");
        }
    }
cs

 

- boolean removeNode

특정위치의 Node 삭제.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
boolean removeNode(int index) {
        if ((index <= size && index > 0&& size > 0) {
            if (index == 1) {// head를 지울때
                head = head.back; // head를 뒤로 한칸 옮긴다.
                head.front = null;
            } else if (index == size) {// rear를 지울때
                rear = rear.front; // rear를 한칸 앞으로 옮긴다.
                rear.back = null;
            } else { // head나 rear가 아닌 중간에 있는 Node를 지울때
                Node node = head;
                for (int i = 1; i < index; i++) {
                    node = node.back;
                }
                node.front.back = node.back; // ①
                node.back.front = node.front;
            }
            size--;
            return true;
        } else {
            System.out.println("index 범위X");
            return false;
        }
    }
cs

 

 

① : 중간에 있는 Node를 삭제했으니, 앞 뒤의 Node들을 화살표로 연결해 주는 과정입니다.

 

- boolean removeAllNode

전체 Node 삭제.

1
2
3
4
5
6
boolean removeAllNode() {
        head = null;
        rear = null;
        size = 0;
        return true;
    }
cs

 

LinkedList 전체 코드

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
public class Linkedlist {
 
    Node head;
    Node rear;
    int size = 0;
    
    // 아무것도 없는 상태에서 새로운 Node 추가
    void firstNode(int data) {
        Node newNode = new Node(data);
        head = newNode;
        rear = newNode;
        size++;
        System.out.println("firstNode(int data) 실행");
    }
 
    // 뒷단에 Node 추가
    void addRearNode(int data) {
        if (size != 0) {
            Node newNode = new Node(data);
            rear.back = newNode; // ①
            newNode.front = rear; // ②
            rear = newNode; // ③
            size++;
            System.out.println("addRearNode(int data) 실행");
        } else {
            System.out.println("firstNode(int data) 실행시켜주세요");
        }
    }
 
    // 맨앞단에 Node 추가
    void addHeadNode(int data) {
        if (size != 0) {
            Node newNode = new Node(data);
            head.front = newNode; // 현재 가장 앞에있는 head Node의 앞으로 향하는 화살표가 새로 삽입될 newNode를 가리키게 만든다.
            newNode.back = head; // 새로 삽입될 newNode의 뒤로 향하는 화살표가 현재 head인 Node를 가리키게 만든다.
            head = newNode; // 새로 삽입될 newNode를 맨앞(head)로 만들어준다. 
            size++;
            System.out.println("맨앞에 " + data + " 들어감");
        } else {
            firstNode(data); // 현재 삽입되어있는 Node가 없다면 새로 추가.
        }
    }
 
    // 특정 위치(index) Node Data 읽기
    int readData(int index) { // 특정 노드의 data 읽기
        int result = 0;
        try {
            Node node = head; // 맨앞 Node 부터 시작.
            for (int i = 1; i < index; i++) {
                node = node.back; // 한칸씩 뒤로 이동하며 특정위치(index)를 찾고, 값을 result에 저장.
            }
            result = node.data;
        } catch (Exception e) {
            System.out.println("Exception 발생");
        }
        return result;
    }
 
    // 전체 노드의 data 출력
    void printData() { 
        if (size > 0) {
            try {
                Node node = head; // 맨앞 Node부터 시작.
                for (int i = 0; i < size; i++) {
                    System.out.print(node.data + " ");
                    node = node.back; // 한칸씩 뒤로 이동하며 모든 Node의 data 출력.
                }
            } catch (Exception e) {
                System.out.println("Exception 발생");
            }
        } else {
            System.out.println("출력데이터가 없습니다.");
        }
    }
 
    // 특정 위치(index) Node 삭제
    boolean removeNode(int index) {
        if ((index <= size && index > 0&& size > 0) {
            if (index == 1) {// head를 지울때
                head = head.back; // head를 뒤로 한칸 옮긴다.
                head.front = null;
            } else if (index == size) {// rear를 지울때
                rear = rear.front; // rear를 한칸 앞으로 옮긴다.
                rear.back = null;
            } else { // head나 rear가 아닌 중간에 있는 Node를 지울때
                Node node = head;
                for (int i = 1; i < index; i++) {
                    node = node.back;
                }
                node.front.back = node.back; // ①
                node.back.front = node.front; // ②
            }
            size--;
            return true;
        } else {
            System.out.println("index 범위X");
            return false;
        }
    }
 
    // 전체 Node 삭제
    boolean removeAllNode() {
        head = null;
        rear = null;
        size = 0;
        return true;
    }
 
    class Node {
        Node(int data) {
            this.data = data;
        }
 
        int data;
        Node front = null;
        Node back = null;
    }
}
cs

 

오늘은 여기까지입니다 감사합니다 !

'알고리즘' 카테고리의 다른 글

Java) 입력받은 숫자 n까지의 소수갯수 구하기 + 최적 알고리즘  (0) 2019.09.27
Java 원형큐 구현  (0) 2019.06.23
백준 10828번 (스택)  (0) 2019.05.10
백준 2750번 (버블정렬)  (0) 2019.05.01
백준 1000번  (0) 2019.04.16
반응형

안녕들 하시죠!

이번시간에는 오라클 11g 설치에 대해 알아보겠습니다.

 

먼저 아래의 URL을 통해 Oracle 홈페이지로 들어갑니다.

https://www.oracle.com/kr/index.html

 

 

다운로드로 들어가보겠습니다.

 

 

Database 11g Express Edition 버전으로 설치해보겠습니다.

 

 

Windows x64 버전으로 다운받겠습니다.

 

 

로그인을 하게되면 바로 다운로드가 됩니다.

 

 

setup.exe 를 실행해주세요.

 

다음

 

 

 

아래의 비밀번호는 중요하니 기억해둬야 합니다.

 

 

 

 

이제 시작화면에서 SQL PLUS를 찾습니다.

 

사용자명 : system

비밀번호 : 위에서 설정한 비밀번호

 

다음에 접속됨:

이 나오게 되면 설치가 끝납니다.

 

오늘은 여기까지입니다 감사합니다 !

반응형

안녕들 하시죠!

이번시간에는 Java의 Math 클래스에 대해 알아보겠습니다.

 

Math 클래스

 

기본적인 산술 연산을 제공하는 클래스로서 java.lang 패키지에 속해있다.

 

Math 클래스의 주요 메소드

 

static double abs(double a) - 실수 a의 절대값 리턴

1
2
double a = -10.2;
System.out.println(Math.abs(a));
cs

 

 

static double exp(double n) - 자연로그 밑(2.718281828459045)의 n승 값 리턴 (eⁿ)

1
2
double n = 3;
System.out.println(Math.exp(n));
cs

 

 

static ceil(double a) - 실수 a보다 크거나 같은 수 중에서 가장 작은 정수를 실수형으로 리턴

1
2
double a = 10.2;
System.out.println(Math.ceil(a));
cs

 

 

static double floor(double a) - 실수 a보다 작거나 같은 수 중에서 가장 큰 정수를 실수 타입으로 리턴

1
2
double a = 10.3;
System.out.println(Math.floor(a));
cs

 

 

 

 

static double max(double a, double b) - a,b 중 큰 수 리턴

static double min(double a, double b) - a,b 중 작은 수 리턴

1
2
3
4
double a = 10.3;
double b = 13.3;
System.out.println("큰 수는 : " + Math.max(a,b));
System.out.println("작은 수는 : " + Math.min(a,b));
cs

 

 

static long round(double a) - 실수 a를 소수 첫째 자리에서 반올림한 정수를 long 타입으로 리턴

1
2
double a = 10.6;
System.out.println(Math.round(a));
cs

 

 

static double sqrt(double a) - 실수 a의 제곱근 리턴

1
2
double a = 9;
System.out.println(Math.sqrt(a));
cs

 

 

static double random() - 0.0 ~ 1.0 사이 임의의 double값을 리턴한다

1
2
3
4
5
double a = Math.random();
System.out.println(a);
 
int b = (int) (Math.random() * 10 + 1);
System.out.println(b);
cs

변수 b는 0.0 ~ 9.999... 사이의 실수이다.

여기에 +1을 하면 1.0 ~ 10.999... 사이의 실수가 되고 (int)로 강제 형 변환을 해주면 1~10 사이의 정수가 된다.

 

 

java.util.Random 클래스를 이용한 난수 생성

1
2
3
4
5
6
Random random = new Random();
int a = random.nextInt(); // 자바의 정수 범위 (-2^31 ~ 2^31-1)의 난수 발생
System.out.println(a);
 
int b = random.nextInt(101); // 1~100 사이의 정수 난수 발생
System.out.println(b);
cs

 

 

오늘은 여기까지입니다 감사합니다!

'Java' 카테고리의 다른 글

Java) 가장 큰 수 ( 정렬 )  (0) 2019.10.02
Java의 문자열 분리 (StringTokenizer)  (0) 2019.05.16
Java의 == 연산자와 equals 메소드  (0) 2019.05.13
Java의 추상 클래스  (0) 2019.05.11
Java의 생성자  (0) 2019.04.29
반응형

안녕들 하시죠 !

이번시간에는 StringTokenizer를 이용한 문자열 분리에 대해 알아보겠습니다.

 

StringTokenizer

 

java.util 패키지에 속해 있으며, 하나의 문자열을 여러 개의 문자열로 분리하기 위해 사용한다.

문자열을 분리하기 위해 사용되는 기준 문자를 구분 문자 라고 한다.

구분 문자로 분리된 문자열을 토큰이라고 한다.

 

StringTokenizer 클래스의 주요 메소드

 

메소드 설명
int countTokens() 분리한 토큰의 개수
boolean hasMoreTokens() 토큰이 존재하면 True 리턴
String nextToken() 존재하는 토큰 리턴

 

 

 

countTokens(), nextToken 사용 예)

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.StringTokenizer;
 
public class stringEx {
 
    public static void main(String[] args) {
 
        String a = "성=hong&이름=possible&키=큼";
        StringTokenizer st = new StringTokenizer(a, "&"); // '&'는 구분문자
 
        int count = st.countTokens(); // 구분 문자(&)로 구분된 문자열(토큰)의 개수를 count
        System.out.println("토큰의 개수는 :" + count);
 
        for (int i = 0; i < count; i++) {
            String token = st.nextToken(); // 각 토큰 출력
            System.out.println(token);
        }
    }
}
cs

 

 

hasMoreTokens() 사용 예)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.StringTokenizer;
 
public class stringEx {
 
    public static void main(String[] args) {
 
        String a = "성=hong&이름=possible&키=큼";
        StringTokenizer st = new StringTokenizer(a, "&"); // '&'는 구분문자
 
        while (st.hasMoreTokens()) { // 토큰이 존재하지 않을 때 루프 탈출
            System.out.println(st.nextToken());
        }
    }
}
cs

 

 

오늘은 여기까지입니다 감사합니다 !

참고서적 황기태,김효수 「명품 JAVA Programming」

'Java' 카테고리의 다른 글

Java) 가장 큰 수 ( 정렬 )  (0) 2019.10.02
Java의 Math 클래스  (0) 2019.05.17
Java의 == 연산자와 equals 메소드  (0) 2019.05.13
Java의 추상 클래스  (0) 2019.05.11
Java의 생성자  (0) 2019.04.29
반응형

안녕들 하시죠!

얼마전 5.5 마프대란에 임팩트 웨이 프로틴과 골든 메탈 쉐이커를 구매했습니다.

 

할인코드를 넣어 40% 할인을 받아 5월5일 저녁에 주문을 결제를 했고 5월 13일에 도착했습니다.

약 8일정도 걸렸습니다.

 

 

Date / Time Activity Event Code
13/05/2019 13:55:00 DELIVERED  
13/05/2019 09:09:00 ARRIVED AT DELIVERY DEPOT 201
10/05/2019 20:40:00 IN TRANSIT - HUB SCAN 202
10/05/2019 14:56:00 IN TRANSIT - HUB SCAN 202
10/05/2019 13:41:00 RECEIVED INTO CUSTOMS 432
10/05/2019 13:40:00 INTERNATIONAL HUB 246
08/05/2019 05:28:08 ROUTED TO DESTINATION 299
07/05/2019 22:38:33 TRAKPAK PROCESS CENTRE 198
06/05/2019 00:02:16 DEPARTED The Hut Group 218

 

10/05/2019 20:40:00 IN TRANSIT - HUB SCAN 까지 뜬 상태에서 5월 13일 2시정도에 배송이 왔습니다.

재수없으면 2주도 넘게 걸린다고 들었는데 다행이네요...

 

도착 !

 

프로틴 5kg를 처음 구매해보는데 개밥포대처럼 엄청 크네요.

솔티드 카라멜 맛으로 구매했습니다.

스쿱당 25g 정도의 프로틴이 들어있다고하는데 효과는 꾸준히 먹어봐야 할 것 같고 맛은 카라멜 밀크티 같은 맛입니다.

자극적이지 않고 몬스터밀크에 비하면 덜 달아서 먹기 부담스럽지 않습니다.

 

 

 

 

아래에는 마이프로틴 골든 메탈 쉐이커입니다.

생각보다 싸이즈가 크고 색은 어두운 금색입니다.

 

 

한번 사용해 봤는데 뚜껑은 닦기가 참 애매하게 만들어져있네요.

그래도 이쁘고 마음에 들어서 자주 사용할 것 같습니다.

 

구매할 의향이 있으신 분들은 아래의 링크로 들어가서 구매하시면 저에게도 소정의 포인트가 들어옵니다.

 

https://www.myprotein.co.kr/referrals.list?applyCode=CKT7-R1

 

Myprotein South Korea

단백질 보충제를 비롯한 다양한 건강보조제품, 프리미엄 스포츠웨어, 프로틴/다이어트 간식까지! 첫구매 할인혜택과 함께 나만의 제품을 선택해 보세요.

www.myprotein.co.kr

추천인 코드가 없으시다면 CKT7-R1를 입력하고 구매해주세요.

 

오늘은 여기까지입니다 득근하세요 !

'꿀팁' 카테고리의 다른 글

현대차 투싼 출시 ! 이걸 사 말아  (0) 2020.09.20
eclipse 프로젝트 war파일로 import, export 하기  (0) 2019.09.01
단기간 토익 700 꿀팁  (0) 2019.05.11
티스토리 ZUM 노출  (0) 2019.04.21
티스토리 구글 노출  (0) 2019.04.21
반응형

안녕들 하시죠!

이번시간에는 Java의 equals 메소드에 대해 알아보겠습니다.

 

ㆍ boolean equals(Object obj)

 

equals 메소드는 인자로 건네진 obj가 가리키는 객체와 현재 객체를 비교하여 같으면 true를 리턴한다.

java.lang 패키지의 Object 클래스에 속해있는 메소드이다.

 

 우리가 흔히 알고있는 == 연산자와 equals는 어떻게 다를까?

 

==은 비교 연산자로서 두 개의 피연산자를 비교하여 true 또는 false의 논리 값을 내는 연산자 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
 
    int a = 5;
    int b = 7;
        
    if (a == b) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }
}
cs

 

위의 코드에서 보면 변수 a,b에 있는 값을 비교하여 논리 값을 내는 연산자입니다.

 

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
public class numberEx {
    int x;
    int y;
 
    public numberEx(int x, int y) {
        this.x = x;
        this.y = y;
    }
 
    public static void main(String[] args) {
 
        numberEx a = new numberEx(12);
        numberEx b = new numberEx(12);
        numberEx c = a;
        
        if (a == b) {
            System.out.println("a==b // true");
        }
        if (a.equals(b)) {
            System.out.println("a.euqals(b) // true");
        }
        if (a.equals(c)) {
            System.out.println("a.equals(c) // true");
        }
        if (a == c) {
            System.out.println("a==c // true");
        }
    }
}
cs

 

위에있는 코드에선 numberEx의 객체 2개를 생성하고 레퍼런스 a와 b는 이들을 각각 가리킵니다.

 

a와 b의 레퍼런스 값이 다르기 때문에 a == b의 결과값은 false입니다.

c에는 a의 레퍼런스가 대입되었기 때문에, a == c의 결과는 true입니다.

 

이것으로 보아 == 연산자는 두 레퍼런스가 동일한 객체를 가리키는지 비교한다는 것을 알 수 있습니다.

 

 

ㆍ String 클래스의 객체비교

 

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
 
    String a = new String("hongpossible");        
    String b = new String("hongpossible");
        
    if(a==b) {
        System.out.println("a==b");
    }
    if(a.equals(b)){
        System.out.println("a.equals(b) // true");
    }
}
cs

 

 

위에있는 코드를 보시면 a와 b는 다른 객체를 가리키고 있으므로 a==b의 결과는 false입니다.

a와 b가 다른 객체를 가리키고 있지만 a.equals(b) 가 true가 나온것은,

 

java.lang에 속한 Object 클래스의 equals(Object object) 메소드는 obj와 this(자기자신)의 레퍼런스를 ==로 단순 비교하여 결과를 리턴하도록 만들어져 있으며, 내용에 대해서는 비교하지 않습니다.

하지만, String클래스는 두 문자열이 같은지를 비교하도록 equals() 메소드를 오버라이딩하여 가지고 있습니다. 

 

ㆍ equals() 오버라이딩

 

참고서적의 예제를 통해 알아보겠습니다.

 

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
public class Rect {
    int width;
    int height;
 
    public Rect(int width, int height) {
        this.width = width;
        this.height = height;
    }
 
    public boolean equals(Object obj) { // equals 오버라이딩
        Rect r = (Rect) obj;
        if (width * height == r.width * r.height) {
            return true;
        } else {
            return false;
        }
    }
 
    public static void main(String[] args) {
        Rect a = new Rect(1020);
        Rect b = new Rect(2010);
        Rect c = new Rect(3040);
 
        if (a.equals(b)) {
            System.out.println("a와 b의 면적은 같다.");
        }
        if (b.equals(c)) {
            System.out.println("b와 c의 면적은 같다.");
        }
        if (a.equals(c)) {
            System.out.println("a와 c의 면적은 같다.");
        }
    }
}
cs

 

위의 예제와 같이 작성자가 재정의하여 사용 가능합니다.

 

아래는 백준 스택 문제를 풀며 equals를 사용한 제 블로그 자료입니다.

 

2019/05/10 - [백준 .Java] - 백준 10828번 (스택)

 

백준 10828번 (스택)

안녕들 하시죠! 이번시간에는 백준 10828번 스택 문제를 풀어보겠습니다. 스택 이란? 제일 먼저 입력된 데이터가 맨 아래에 쌓이고 가장 최근에 입력된 데이터가 가장 위에 쌓이는 후입 선출(LIFO : Last-in Fir..

hongpossible.tistory.com

 

오늘은 여기까지입니다 감사합니다 !

 

참고서적 황기태,김효수 「명품 JAVA Programming」

'Java' 카테고리의 다른 글

Java의 Math 클래스  (0) 2019.05.17
Java의 문자열 분리 (StringTokenizer)  (0) 2019.05.16
Java의 추상 클래스  (0) 2019.05.11
Java의 생성자  (0) 2019.04.29
Java의 length필드 사용법  (1) 2019.04.29
반응형

안녕들 하시죠!

 

얼마전부터 최소 비용, 최단 시간으로 토익 700을 넘는것을 목표로 공부를 시작했습니다.

실력도 부족하고 내세울만한 점수는 아니지만, 짧은 시간동안 나름 제 목표를 이룬 것 같아 기쁘고 누군가에게 도움이 된다면 좋을것 같아 이 글을 작성하게 되었습니다.

 

혐오스러운 점수라서 조금 민망하네요...

3월 초중순부터 공부를 시작했고 생각보다 점수가 나오질 않아서 시험을 2번이나 보게 되었습니다.

 

앞에서 언급한 최소 비용을 맞추기 위해 최소한의 책만 사고싶었습니다.

알아보니 위에 있는 책을 제일 많이 사용한다 하여 서점에 가서 들춰보고 구매하게 됐습니다.

 

LC

유튜브에서 어떤 강사님이 그러셨습니다.

LC는 주식, RC는 부동산이다.

그 만큼 LC는 빠른시간 내에 고득점을 달성할 수 있다는 뜻이였던 것 같습니다.

그래서 전 토익 공부하는 시간비중을 LC에 좀 더 치중했습니다.

 

해커스토익 중급 LISTENING -> 토익 적중 예상 특강에서 꿀팁 얻기 -> 실전 1000제 1 LISTENING + 무료 매일 실전 LC풀기

 

우선, 처음 해커스 토익 중급 LISTENING 책을 펴고 Part 1,2,3,4에 어떤 문제가 나오는지, 파트별 특성을 파악하려고 했습니다.

파트별 문제 유형을 파악한 후, 해커스 토익 홈페이지에서 제공하는 음원파일을 다운받아 파트별로 한단원씩 풀어봤습니다.

part 3,4 같은 경우 정신없는 대화가 흘러나오고 그 안에서 3문제를 풀어야 한다는게 너무 막막했습니다.

 

꿀팁을 얻기위해 해커스 토익 홈페이지를 들어가보니 무료강의 자료가 너무너무 도움이 많이됐습니다.

 

https://www.hackers.co.kr/?c=s_toeic/toeic_winter/movie_expect_toeic

 

대한민국 1위 영어사이트 :: 해커스영어

토익,토스오픽,기초영어 등 5천여개의 무료학습자료가 있는 1위 영어사이트.토익시험 대비 무료강의와 토익정답 실시간 확인까지!

www.hackers.co.kr

 

위의 URL에 토익 시험 d-7 적중특강에 들어가보면 여러 강사님들의 무료강의와 문제들을 다운받을 수 있게 되어있습니다.

돈 한푼 안들이고 공부하기에는 딱이다 싶어, 강의를 보며 part 1에서 자주 쓰이는 표현들, part 2는 소거법으로 풀고 문제에 언급됐던 단어는 답이 아니다, part 3,4 스키밍 하는 방법 등등 수 많은 꿀팁들을 얻고 해커스 토익 중급 LISTENING 문제를 풀며 적용해보려고 했습니다.

그렇게 매일같이 풀다보니 2주도 안걸려 한권을 다 풀게 되었고, 시험 전날까지 꾸준히 연습해서 긴장감을 놓치고 싶지 않았습니다.

 

그래서 실전 1000제 1 LISTENING을 구매했고, 실제 시험과 똑같이 되어있는 모의고사 형식의 책이였기 때문에 실전 감각을 키우기에 좋았습니다.

난이도는 실제 토익보다는 살짝 높다고 생각이 들었고 실력을 키우기에는 딱 좋다고 생각했습니다.

 

모의고사 1회분을 풀고 part 1,2 틀린 부분은 스크립트를 펴지 않고 음원을 다시 듣고 공책에 직접 써보고 한두번씩 따라 읽고 난 후에 스크립트를 보고 틀린부분을 체크했습니다.

part 3,4 같은 경우 문제도 길고 다 적기에는 시간적으로 무리가 된다 싶어 음원을 틀고 스크립트를 펴 놓은 상태에서 한줄듣고 따라하고 또 한줄듣고 따라해보며 내가 꼭 들었어야 했던 부분을 체크했습니다.

 

또한, 모의고사만 하루종일 풀기에는 지치기 때문에 해커스토익 홈페이지에 있는 무료 매일 실전LC 풀기를 애용했습니다.

 

https://www.hackers.co.kr/?c=s_toeic/toeic_study/dlc 

 

대한민국 1위 영어사이트 :: 해커스영어

토익,토스오픽,기초영어 등 5천여개의 무료학습자료가 있는 1위 영어사이트.토익시험 대비 무료강의와 토익정답 실시간 확인까지!

www.hackers.co.kr

 

매일매일 Part 2 + (Part 3,4) 로 4문제씩 제공되기 때문에 공부하기 싫을때에는 오늘의 문제만 풀고 놀때도 있었습니다.

이러한 방식으로 약 한달 반 정도 매일같이 공부하니 어떤 부분을 집중해서 듣고, 어떻게 주요 포인트를 캐치해서 문제를 풀지에 대해 감이 잡혔던 것 같습니다.

몰라서 들리지 않는 것이라고 생각하여 틀린 부분을 따라 읽고 눈으로 익혀 알려고 노력했고 짧은 시간 내에 꾸준히 많은 문제를 접해보려고 노력했던것 같습니다.

 

 

RC

형편없는 제 RC점수 때문에 신뢰도가 많이 떨어지겠지만 나름 계획을 가지고 조금씩 점수를 올려나갔습니다.

위에서 언급했듯, RC는 천천히 오랜시간에 걸쳐 쌓이고쌓여 점수가 오른다는 얘기를 들었기 때문에 700을 받쳐줄 수 있는 점수만 맞고싶었습니다.

 

토익 스타트 리딩 무료강의 -> 무료 매일 실전 RC풀기 + 유튜브 적중 특강 -> 실전 1000제 1 READING

 

Part 5의 문법, 어휘 문제를 풀기 위해서는 오랫동안 손을 놓고 있었던 문법공부를 하지 않을 수가 없었습니다. 

해커스토익 중급 Reading 문제집도 좋다고 이야기를 들었지만 사놓고 풀지 않을게 분명하여 무료강의로 빠르게 끝내고 싶었습니다.

 

https://www.hackers.co.kr/?c=s_toeic/toeic_movie/toeic_startmovie/start_2016/start_2016_event&mv_p=1

 

대한민국 1위 영어사이트 :: 해커스영어

토익,토스오픽,기초영어 등 5천여개의 무료학습자료가 있는 1위 영어사이트.토익시험 대비 무료강의와 토익정답 실시간 확인까지!

www.hackers.co.kr

 

위에있는 URL은 토익 스타트 리딩 무료강의 입니다.

20개의 강의로 되어있고 마음만 먹으면 빠르게 끝낼 수 있을 것 같아 공책 한권에 필기해가며 빠르게 들었습니다.

기본 이론을 빠르게 익히고 난 뒤, 많은 문제를 풀어보고싶었습니다.

그래서 전 무료 매일실전 RC풀기와 유튜브에서 찾아보시면 토익학원 강사님들이 4월 적중 예상 특강이라고 해서 라이브 방송으로 RC Part 5 문제만 모아놓고 해설해 주는 분들이 계십니다.

그 방송들을 들으며 문제를 공책에 적고 풀어보고 문법적 포인트들을 외울 수 있는 것만 외우고 몇번씩 보고 가려고 노력했습니다.

 

이제는 실전 모의고사를 풀며 시간체크를 해보고 싶어 실전 1000제 1 Reading 문제집으로 시간을 재 가며 문제를 풀어보고 틀린문제와 몰랐던 단어들을 정리했습니다.

역시나 시간 맞추기는 너무나도 어려웠고 전략이 필요하다고 생각했습니다.

LC Part 1,2 디렉션 (문제설명) 하는 동안 RC part 5 약 5문제 정도 풀기 -> LC Part 4가 끝나자 마자 RC로 넘어가서 Part 5문제를 약 10분안에 다 풀기 -> Part 7 이중지문 ~ 삼중지문까지 풀기 (한 문제당 약 1분) -> Part 7 앞부분 부터 나머지 독해문제 다 풀기 -> Part 6 풀기. // Part 5 문제마다 마킹, Part 7 지문에 속해있는 문제 한세트 마다 마킹  

 

이러한 방법으로 연습하다보니 시간 분배에 적절했고 모의고사로는 생각보다 점수가 잘 나왔지만 시험에서는 RC Part 7이 생각보다 어렵게 나와서 만족스러운 결과는 얻지 못했네요ㅠㅠ

허겁지겁 정신이 반쯤 나가서 문제를 풀면 Part 6 한두문제 뺴고는 다풀기는 하지만 저같이 기본이 부족한 사람에게 RC는 시간투자를 오래 해야하는 분야인 것 같습니다.

 

목표했던 점수를 빠르게 달성하길 바라겠습니다 감사합니다 !

반응형

안녕들 하시죠 !

이번시간에는 Java의 추상 클래스에대해 알아보겠습니다.

 

추상 클래스란?

서브 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스 역할.

추상 클래스를 책의 목차에 비유할 수 있고, 서브 클래스는 목차에 따라 작성된 책이라고 표현할 수 있다.

서브 클래스에서 추상 메소드를 목적에 맞게 구현하여 다형성을 실현할 수 있다.

코드를 구현하는 클래스가 아니라 단순히 껍데기만 있는 클래스이다.

 

 

추상 클래스 Language를 상속받아 서브 클래스에서 오버라이딩하여 구현한 모습

 

주의할 점

 

* 추상 클래스는 객체를 생성할 수 없다.

 

* 추상 메소드를 가지고 있으면 반드시 추상 클래스로 선언되어야 한다.

 

* 서브 클래스에서 추상 클래스에 선언된 추상 메소드를 모두 구현해야 한다. 

 

 

 

참고서적의 간단한 예제를 풀어보겠습니다.

 

다음 추상 클래스 Calculator를 상속받은 GoodCalc 클래스를 구현하라.

 

1
2
3
4
5
abstract public class Calculator {
    public abstract int add(int a, int b); // 두 정수의 합을 구하여 리턴
    public abstract int substract(int a, int b); // 두 정수의 차를 구하여 리턴
    public abstract double average(int[] a); // 배열에 저장된 정수의 평균 리턴
}
cs

 

추상 클래스인 Calculator는 add(), subtract(), average() 메소드를 추상 메소드로 선언하였을 뿐 어떻게 구현할지는 지시하지 않는다.

어떤 인자가 전달되고 어떤 타입의 값이 리턴되는지만 지정할 뿐이다.

 

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
public class GoodCalc extends Calculator {
    
    @Override
    public int add(int a, int b) {
        return a + b;
    }
 
    @Override
    public int subtract(int a, int b) {
        return a - b;
    }
 
    @Override
    public double average(int[] a) {
        double sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];    
        }
        return sum/a.length;
    }
    
    public static void main(String[] args) {
        GoodCalc c = new GoodCalc();
        System.out.println(c.add(23));
        System.out.println(c.subtract(23));
        System.out.println(c.average(new int[] {2,3,4}));
    }    
}
cs

 

추상 클래스 Calculator를 상속받은 서브 클래스 GoodCalc에서 추상 메소드인 add(), subtract(), average()를 구현했습니다.

 

오늘은 여기까지입니다 감사합니다 !

 

 

참고서적 황기태,김효수 「명품 JAVA Programming」

'Java' 카테고리의 다른 글

Java의 문자열 분리 (StringTokenizer)  (0) 2019.05.16
Java의 == 연산자와 equals 메소드  (0) 2019.05.13
Java의 생성자  (0) 2019.04.29
Java의 length필드 사용법  (1) 2019.04.29
Java의 변수와 데이터타입 (Data type)  (0) 2019.04.21

+ Recent posts