날아라쩡글이의 블로그입니다.

배열 본문

중앙 HTA (2106기) story/java story

배열

날아라쩡글이 2021. 9. 3. 18:52
반응형

자바는 객체 단위로 많이 사용함, 머리속에 그려져야한다. 

객체들이 어떻게 조립되어있는지 파악하는 것이 중요

절차지향 ---> 그 기능이 있는 메소드만 기억하여 사용, 메뉴판을 선택

객체지향 ---> 그 서비스를 만들기 위한 그 기능이 있는 객체를 만들어서 사용함, 그 메뉴판을 사서 직접 만들어서 사용

객체 생성시에는 index의 번호가 자동으로 부여된다

대입연산자를 이용하여 값을 입력한다 ---> 대입연산자를 이용하여 값을 변경한다. 

값을 사용한다. System.out.println(score[0])---> 값을 불러와서 사용하는 것 

int [] a = new int[4];를 for문에 넣을때 for (int i = 0; i <5; i++)일때 왜 4가 아닌 5일까??

배열을 저장하는 객체 영역을 보면 이렇게 생겼다. 

항상 객체영역에서 변수영역으로 주소값을 불러온다고 생각을 해야함.

index는 0 ~ 4의 숫자가 있지만 length라는 기능을 가진 index가 하나가 숨겨져 있다고 생각 하면됨, 그렇기 때문에 a안에 있는 length의 길이가 몇인지 조회를 해보면 5라는 값이 나오게 됨. 

향상된 for문 : 배열의 각요소에 저장된 값을 향상된 for문으로 조회하는방법은 자바 5부터 지원하기 시작했다. 

  • for (데이터 타입 새변수명 : 배열 변수명) {           // : ->클론 , ; -> 세미클론
  •           System.out.println(새변수명);
  •  
  • }
  • 데이터 타입은 꺼낼 변수의 데이터 타입과 같은 데이터 타입이여야한다.
  • 배열 변수명은 정보를 가지고 있는 주소값이다. 
  • 배열과 collection에서 한개씩 추출한다. 
  • 값을 담는 배열에 맞춰서 알아서 for문이 시행되고, 한번 실행될 때마다 각각의 요소가 순서대로 출력이 된다. 
  • 증감식까지 전부 작성하지 않아도 전체적으로 다 출력이 가능하다. 데이터 조회할 때 많은 사용을 함
  • 데이터 조회시 사용하기 때문에 향상된 for문은 collection에서 엄청 사용할 예정이다. 

다른 언어의 프로그래밍 언어의 반복문도 향상된 for문으로 진화하고 있다. 처음부터 끝까지 꺼내는 방향으로 진화하는 중으로 섞어서 사용하거나 추출해서 사용하지 못하고 그냥 데이터를 출력하고, 담을 때부터 불필요한 값은 담지 않고, 오른차순과 내림차순으로 순서대로 담고, 표현할 때에는 단순동작으로 작성되도록 한다. 

지정된 값을 포함하고 있는 배열 객체 생성하기 

  • 참조변수는 S를 붙이는 복수 형태로 작성해주어야 한다. 그렇게 하면 향상된 for문 때 단수로 작성할 수 있다. 
  • 데이터 타입[] 참조변수명 = { 값, 값, 값, 값, ...}
  •  

DB에는 계산하려면 언제든지 얻을 수 있는 값은 따로 내부에 넣지 않는다. 즉, 

  • //학생이름, 국어점수, 영어점수, 수학점수를 각각 입력받아서 해당배열에 순서대로 저장한다. (0부터 시작하는 index를 사용한다. )
  • for (int i = 0; i <= 4;i++) {
  • System.out.print("이름을 입력하세요 :");
  • String name = scan.nextLine();
  • names[i] = name;
  •  
  • System.out.print("국어점수를 입력하세요 :");
  • int korScore = scan.nextInt();
  • korScores[i] = korScore;
  •  
  • System.out.print("영어점수를 입력하세요 :");
  • int engScore = scan.nextInt();
  • engScores[i] = engScore;
  •  
  • System.out.print("수학점수를 입력하세요 :");
  • int mathScore = scan.nextInt();
  • mathScores[i] = mathScore;
  • scan.nextLine();
  • }
  •  
  • int totalScore = 0;
  • int average = 0;
  • //학생이름, 국어점수, 영어점수, 수학점수를 출력한다. 각 점수에 대한 총점과 평균을 계산해서 출력한다. (0부터 시작하는 index를 사용한다. )
  • for (int i = 0; i < 5; i++) {
  •  
  • totalScore = korScores[i] + engScores[i] + mathScores[i];
  • average = totalScore / 3;
  • Scanner--->문자열 출력시 next.Line(); 대신 next();를 사용하면 됨.

이런식의코딩을 진행한다면 총점과 평균은 따로 배열에 담지 않고 출력한다는 것이다. -->프로그램 입장에서는 이렇게 프로그래밍됨

배열의 경우 

  • 타입마다 배열이 다르기 때문에 배열 하나로 응집력있게 관리하기 어려움 --->데이터관리가 어려움 
  •  
    이렇게 모아두고 싶음 --->이렇게 하려면 나중에는 모아서 담아둘 수 있는 성적을 담는 객체를 만들면 됨.
  • 항상 데이터를 가공하고, 데이터 중심으로 프로그램 코딩을 진행하는데, 연관이 있는것끼리 모이는 것이 당연하다. 
  • 과목의 갯수마다 배열의 양이 늘어나는데 배열의 단점 3가지를 말해보자. 
    1. 같은 데이터 밖에 담을 수 없음
    2. 크기가 정해져 있음
    3. 굳이 꺼내본다면 데이터의 인덱스를 알아야 담거나 꺼낼수 있다는 것이다. 
    4. 그리고 중간에 멈췄다가 프로그램 종료후 다시 들어올 때 바로 전작업에서 부터 실행이 안된다. 
  • java에서 이런 배열을 자료구조라고 한다. collection을 많이 사용하는데, 부산으로 여행을 갈 때 array의 경우 자전거이고 collection은 람보르기니로 여행을 간다고 생각하면된다. 아직 배우지 않아서 내부적으로 사용할 수 있는 편리한 배열을 사용하는 것이다. 

다차원 배열

  • 타입[] 변수명  = new 타입[크기];                  -----> 1차원 배열
  • 타입[][] 변수명  = new 타입[크기][크기];        ------->2차원 배열
  • 타입[][][] 변수명 = new 타입[크기][크기][크기]; ------>3차원 배열....n차원 배열까지 가능함
  • 3차원 배열의 경우 입체적으로 만들 떄 많은 사용함 
  • 2차원 배열의 경우 
  •  
    좌측에 있는 것처럼 엑셀과 같은 형태를 가진다. 
  • row = [row위치][column의 위치]의 형태를 가진다. 
  • 향상된 for문으로 출력이 가능하다. String[] contact 의 경우 배열의 주소값만 가지고 있고 안쪽의 value문을 이용하여 주소안에 있는 실제 내용을 출력한다. 

모든 프로그램 로직구현의 경우는 손으로 표를 만들고 규칙을 발견해야한다. 머리보다 손으로 확인해서 논리적인 오류를 확인하고 요구사항을 잘 읽고 도출할 것 --->누구든지 이해가능한 알고리즘이니 손으로 작성후 만들어보자! 

*  2차원 배열의 실제 구조는 행렬모양이 아니다. 

*  지정된 행의 크기에 해당되는 배열이 있고, 그배열에 지정된 컬럼 크기의 배열들이 연결되어있는 구조이다.

 

Scores [0][ ] ---> Score[0]주소값의 해당 객체이며, [ ]뒤에 있는 것은 객체에 연결되어 있는 주소값들이다. 

* Scores [0] = 에 주소값에 Scores [0]에 주소를 넣어줌으로 배열과 배열이 연결되어준다. 

int[][] Scores = new int [3][]  --->주소값만 생성을 해주고, 뒤에 열은 안적으면 따로 입력이 안되기 때문에 만들어서 나중에 가져다가 붙여주면 된다. 

 

이번주까지는 기본적인 프로그래밍의 공통적인 문법을 배웠고, 다음주 부터는 객체 지향 언어의 고유한 특징을 배울 예정이다.  

반응형

'중앙 HTA (2106기) story > java story' 카테고리의 다른 글

메소드  (0) 2021.09.08
객체 지향 언어  (0) 2021.09.06
Array문  (0) 2021.09.02
내포된 if 문, switch문,Scanner, Break, Continue  (0) 2021.09.02
제어문/ 반복문(if)문  (0) 2021.09.01
Comments