과정평가형 정보처리산업기사

DAY - 12

Webdeveloper_kim 2022. 1. 17. 19:10
728x90

어제의 수업에 이어 배열을 이어서 나갔다.

위의 예제는 순차탐색의 예시이다. 값을 하나하나 보면서 비교해 최대값과 최소값을 찾는 것인데 이는 제일 비효율적인 방법이다.

뒤에서 좀더 효율적인, 다양한 정렬방법등을 배울 예정이나 기본이 되는 순차탐색은 알아두어야 한다.

 

위의 예제는 numArr이라는 10칸짜리 배열에 0~9의 숫자를 값으로 넣고, 무작위 난수를 가져오는  Math.random()을 이용해 랜덤하게 위치를 섞은것이다.

3개의 for문이 나와 있는데 맨처음은 값을 넣고, 마지막은 섞은 후 배열안의 값을 확인하는 과정이다.

이전의 수업에서 배웠듯이 두 변수의 값을 교환 할 때, 새로운 저장공간으로 쓸 변수가 필요하듯이 배열의 값을 바꿀 때에도 두번째 for문에서 tmp라는 변수를 이용한 것 처럼 새로운 저장공간을 통해 바꿔주어야 한다.

 

 

위의 예제는 로또번호를 생성하는 예제이다.

길이가 45인 배열에 1~45의 값을 넣고 반복문과 난수를 이용한 index로 사용해, 그 위치의 값을 i번째값과 바꾼다.

이 과정을 6번 반복해 0번째 index부터 5번째index까지의 값을 출력하면 중복되지 않은 6개의 값이 출력되게 된다.

 

위의 예제는 버블정렬을 예제로 만든 것이다.

버블정렬이란 앞에서부터 두 값을 비교해 앞의 값이 크면 뒤의 값과 바꿈을 반복함으로써 큰 값을 맨 뒤로 보내 오름차순으로 정렬하는 것을 말한다.

과정을 주석으로 정리를 해두었는데 처음 버블정렬을 접할 땐 위와같이 직접 해보면서 그 의미를 확실히 이해하고 넘어가야한다.

그러므로 직접 해봄과 동시에 line 44처럼 반복문의 중간에 현재 어디까지 정렬되었는지 직접 확인해보는 것도 좋다.

 

오늘 과제로 삽입 정렬과 선택 정렬에 대해 직접 알아보고 코딩을 해보라고 하셨다.

배우는 입장에서 직접 짜보는 것은 실력 향상에 있어서 너무나도 중요한 것이기에 코딩을 배우고 있는 사람이라면 코드 자체를 검색하는 것은 지양해야한다.

우선 선택정렬부터 코딩해보았다.

선택정렬

선택정렬이란 가장 작은 값을 하나씩 선택해 맨 왼쪽으로 정렬하는 정렬방법이다.

필자가 한 방법에는 최소값을 구하는 과정이 없다. 원래는 최소값을 변수에 저장한 후, 비교를 통해 교환, 정렬을 해나가야 한다.

 

삽입정렬

삽입정렬은 배열 내 모든 요소를 앞에서부터 차폐대로 이미 정렬된 배열 부분과 비교하여 자신의 위치를 찾아 삽입하는 정렬방식이다.

하나하나 체크하기 때문에 자료가 커지면 효율이 떨어진다.

이 방법은 최소값이라는 변수를 따로 이용하지 않고 0번 index의 값을 최소값이라는 변수처럼 이용해 값을 교환해나가는 방법으로 코딩했다.

필자 개인적으로는 삽입정렬이 선택정렬보다 코딩하기가 수월했다.

 

막간 팁

System.exit(0);

이 명령어는 JVM의 실행을 중지하는 강력한 명령어이다. 여기에서의 0은 순수한 의미의 종료, 즉 강제종료를 의미한다.

 

String 배열

String타입의 값을 갖는 배열일 뿐 int배열과 그 방법이 크게 다르지 않다.

위의 예제에서 결과값을 유추할수 있다면 큰 문제는 없을 것이다.

배열의 변수에는 생성된 배열의 주소값이 저장된다는 것을 꼭 기억하자.

 

char배열과 String클래스

char배열이란 당연하게도 char타입인 '문자'로 이루어진 배열이다. 여기서, String은 "문자열", 즉 문자를 연이어 늘어놓은 것을 의미하므로 뜻 자체는 같아진다.

그럼에도 불구하고 자바에서 char배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는 String클래스로 처리했을 경우 코드자체가 엄청나게 간단해진다.

배열로 처리해버리면 그 코드가 길어질 뿐 아니라 가독성자체도 좋지 않다.

즉, String클래스는 char배열에 기능(메서드)을 추가한 것이다.

하지만 char배열과 String클래스의 한가지 중요한 차이가 있다.

바로 String은 읽을수만 있을 뿐 내용을 변경할 수 없다는 것이다.

String클래스와 char 배열은 상호 변환이 가능하다.

   char[] chArr = { 'A', 'B', 'C' };

   String str = new String(chArr); // char배열 -> String

   char[] tmp = str.toCharArray(); // String -> char배열

 

 

다차원 배열은 나중에 다시 돌아와서 수업할것이다.

 

객체지향

객체지향 이론은 상속, 캡슐화, 추상화 개념을 중심으로 발전되었다.

원래, 개발보다 유지보수가 돈이 많이 들어가는데 객체지향언어는 이 유지보수면에서 훨씬 이득이기 때문에 객체지향언어가 프로그래밍에서 주를 이루게 되었다.

여기서부턴 용어에 대한 개념정리가 확실해야한다.

프로그래밍에서의 객체메모리에 생성된 것을 뜻한다.

클래스란 그 객체를 정의해 놓은 것을 의미하며 쉽게 생각하면 설계도 정도 되겠다.

즉 제품설계도와 제품의 관계이다.

설계도를 한번 만들어 놓으면 제품을 만들 때 참고할 뿐, 매번 설계도를 만들지 않는다.

여기서 제품을 만드는 것을 인스턴스화 한다고 한다.

즉, 프로그래밍에서는 클래스를 인스턴스화 하면 객체가 된다.

 

여기까지 보면, 책상은 객체지만 책상은 책상 클래스의 인스턴스이다.

이 뉘앙스를 잘 이해해야 나중에 헷갈리지 않는다.

 

객체의 구성요소로는 속성과 기능이 있다.

속성에는 멤버변수, 특성, 필드, 상태 등이 포함되는데 주로 멤버변수, 필드 를 많이 사용한다.

기능에는 메서드, 함수, 행위 등이 포함되는데 메서드를 주로 사용한다.

이 속성과 기능을 쉽게 예로 들면, 객체를 TV라 했을 때, 속성에는 크기, 길이, 높이, 색상, 볼륨, 채널 등이 포함되고

기능에는 채널변경하기, 볼륨올리기, 켜기, 끄기 등이 포함된다.

객체의 데이터타입은 클래스와 같다.

위의 예제처럼 직접 클래스를 만들어 사용할 수 있다.

위의 예제에는 class가 두개 등장하는데, main메서드가 있는 class로 이름을 만들어야 한다.

사실 같은 코드에 class를 두개나 두지는 않고 다른곳에 만들어 사용하는것이 일반적이다.

위의 예제에서 보면 Tv라는 클래스의 객체를 생성 후 생성된 객체의 주소를 t라는 참조변수에 저장하였다.

위의 예제에 주석을 잘 읽고 확실히 기억해두어야 후에 편하게 수업을 들을 수 있다.

 

 

 

오늘은 여기까지!!!

통곡의 벽이라는 chap6에 도달하였다. 도달하자마자 엄청나게 많은 새로운 개념들이 밀고들어온다..

진도는 더욱 빨라질것이다. 매일 새로운 용어를 확실히 해두고 넘어가자.

728x90

'과정평가형 정보처리산업기사' 카테고리의 다른 글

DAY - 14  (0) 2022.01.23
DAY - 13  (0) 2022.01.17
DAY - 11  (0) 2022.01.14
DAY - 10  (0) 2022.01.13
DAY - 9  (0) 2022.01.11