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

Array문 본문

중앙 HTA (2106기) story/java story

Array문

날아라쩡글이 2021. 9. 2. 21:49
반응형

배열을 사용할 때에는 

  1. 한번에 쭉 처리한다. 
  2. 한개씩 꺼내서 처리한다. 

일단, 첨부터 끝까지 꺼내서 사용을 한다. 중간에 건너뛰는 작업은 하지 않는데 ---> 그 이유는 애초에 사용할 값은 따로 담지 않기 때문이다. 

우리의 목적은 담아둔 데이터를 처음부터 끝까지 뽑아내는게 목적이다. 나중에는 for문의 (초기, 증감식)은 사용하지 않는다. 

값을 저장하는 방법

  1. 변수를 만들어서 변수에 저장한다. 변수에는 1개밖에 저장을 못한다. 
  2. 변수를 저장하는 저장소를 만들어서 그 저장소를 이용하여 대용량의 정보를 이용한다.(배열)

배열(Array)

  • 배열은 여러 개의 데이터를 저장할 수 있다. 
  • 배열을 이용하면 하나의 변수명으로 여러개의 데이터를 관리할 수 있다. 
  • 배열은 순서대로 번호(인덱스) 가 붙은 요소들이 연속적인 형태로 저장된다. 
  • 각 요소에 부여되는 번호(인덱스)는 0부터 시작하며, 각 요소마다 순서대로 번호(인덱스)가 부여된다. 
  • 인덱스의 범위는  0 <= 인덱스번호 < 배열의 크기 
  • 배열에 저장된 데이터는 번호(인덱스)로 각 요소에 접근할 수 있다. 
  • 자바의 배열은 일정한 크기를 가진다
  • 그렇기 때문에 제일 처음부터 크기를 생성해야 함.
  • 자바의 배열은 한 번 정해진 크기를 변경할 수 없다.-->늘리거나 줄일 수 없다. 
  • 자바의 배열은 동일한 타입의 값만 저장할 수 있다. --->정수와 실수로  mix해서 담을 경우 0의 값을 추출할 때 정수가 나올지 실수가 나올지 모른다.  저장공간에 담을 때는 서로 다른 값을 담을 수 있어도!!!! 그렇게 하지 않는다.  
  • 내가 원하는 값을 꺼내고 싶은 것처럼 꺼낼 때마다 타입이 무엇인지 확인하는 경우 절차의 요소때문에 프로그램이 복잡해진다. 
  • 다른 타입으로 만들고 싶으면 배열을 다른 배열을 만들어야 한다. 
  • 자바의 경우 다른 언어에 비해 배열 부분이 빈약하다. collection?이라는 자바의 배열 프레임 워크를 이용한다. 

배열 만드는 법

  • 배열 만드는 법 ==[ ] == 여러개를 저장하는 배열을 나타내는 표시이다. 
  • int e; e = 54; --> 정수 하나의 저장소를 만든다. 그 저장소의 이름은 E이며 54의 값을 갖는다.
  • int[] a;  --> 정수 값 여러개를 저장하고 있는 배열을 담는 저장소를 만든다. 그 저장소의 이름은 A이다. 
  • String[] d -->문자열 여러개를 저장하고 있는 배열을 담는 저장소를 만든다. 그 저장소의 이름은 D이다.
  • a = new int[10]; --> 정수 10개를 저장할 수 있는 배열 생성하고, A에 대입한다. 
  • a = { 10, 20, 30, 40, 50 }; --> 정수 10, 20, 30, 40, 50를 이 순서대로 저장되어 있는 배열 생성하고 A에 대입한다.
  • a = new int[] { 1, 5, 8, 0, 6, 10, 21}; --> 정수 1, 5, 8, 0, 6, 10, 21이 순서대로 저장되어 있는 배열을 생성해서 A에 대입한다. 

 

그러면 main메소드로 JVM 진입문인 public static void main(String[]args)을 생각해보면 String[]args는 배열이라는 사실을 확인 할 수 있다. 

public class FileCopy라는 class가 있으면 c:\> java FileCopy 원본파일명 대상폴더 --> 어디에 복사 저장할지에 대한 경로가 있는데, 원본파일명과 대상폴더를 명령형인자라고 부른다. 그리고 FileCopy 클래스의 main()메소드 인자로 전달된다. 프로그램이 시작되기전 JVM은 이 인자들은 원본파일명 대상폴더를 모두 하나의 문자열(String)배열에 저장한다. 그리고 문자열 배열에 대한 참조값(레퍼런스)가 main()메소드의 인자 args에(메인 베열) 복사 전달된다. 문자열 배열이 통째로 복사되는 것은 아니며, 문자열 배열의 참조만이 args에 복사된다. 이렇게 함으로써 main()메소드에서 인자 args를 이용하여 명령행 인자들을 전달 받을 수 있다

위에 작성한 것처럼 배열의 변수는 항상 왼쪽 먼저 실행된다. 

  1. 정수값을 여러개 저장하는 배열객체의 주소값을 저장하는 변수를 생성하기 
  2. 정수를 5개 저장하는 배열객체를 생성하고, 그 객체의 주소값을 scores에 대입

int[] numbers(정수가 들어있는 배열이라는 뜻: int[]==배열객체) = new int[5];(먼저실행)

  • 변수 객체는 변수의 memory 특정 영역에 위치해 있는데 위치하는 곳을 주소값, 참조값 (Reference Value-->레퍼런스벨류) 라고 한다. 
  • 기본 자료형이 아닌건 전부 변수에 주소가 있다. ---> 기본형인 정수, 실수, boolean타입을 의미한다. 그외에는 전부 변수에 주소값이 입력이 되어있다. numbers의 객체에 직접 자료가 들어간 것이 아닌 주소값이 들어가 있다. 
  • int a = 10; --->이건 숫자가 직접적으로 들어간 것이며, 기본 8개 외에는 전부 주소가 들어가 있다. 
  • 주소값을 전달 받은 순간, 주소쪽으로 연결, 참조하고 있다. 그렇기 때문에 꺼내올 때는 변수 이름을 통해서만 꺼낼 수 있다. 
  • 주소참조시 ---> 배열에는 0이 들어가있다. String의 경우 null이 들어가있다. 불린의 경우 false가 기본값으로 입력이 되어있다. 
  •   
    •  
      객체는 값과 기능을 가지고 있다. 위에 String처럼 
  • 객체는 생성되자마자 생긴 주소값을 바로 변수에 대입한다. 
  •  null이란 객체를 바라보지 못하게 만드는 값이다. 즉, B가 0x1234를 참조하는 주소값이 삭제되어 연결이 끊겼다는 것을 의미한다. double[] B = new double[4];를 확인해보면 null이라는 값을 입력전에 double[] F에 대입하고 null값을 확인 할 수 있다. F에 입력하는 순간 0x1234를 이용할 수 있던 리모컨은 2개가 되었고, B의 값이 연결이 끊겼어도 0x1234의 값은 보존할 수 있다. 
  • 그러나 F가 없다고 생각해보자. 그러면 하나밖에 없는 리모컨이 연결이 끊겼다는 것이다. 그렇게 되면 double[] 인 0x1234는 쓰레기 값이 된다. JVM에는 가비지 컬렉터라는 데이터를 청소해주는 기능이 있다. 
    • 가비지 컬렉터란 객체영역에 있는 참조 되지 않은 쓰레기는 삭제된다. 
    • 참조해제된 값은 다시 연결할 수 없다. 
    • 그렇기 때문에 쓰레기 값은 영원한 쓰레기 값이 된다. 
  • 그렇기 때문에 데이터를 관리하고 싶으면 리모컨을 2개를 만들어서 다른 변수이름으로 주소를 등록시키고 null값을 주는 것이 좋다. 
  • 기본자료형을 제외한 모든 자료형은 주소값을 담고있는 참조자료형이다. 참조자료형에는 1. 주소값 과 2.null 값밖에 담지 못 한다. 

new --> 주소값을 붙이는 키워드다. String a = "홍길동"의 경우 원래는 new를 붙여서 만들어야 하지만 문법적 설탕으로 붙이지 않게 되었다. (문법적 설탕은 단항연산자에서 나왔었다. )

  • 앞으로는 객체는 제품으로 부를 것이다. 
  • 기본형 ( 정수, 실수, 불린) 외에는 객체이다. 
  • String에 null값이 들어간 이유는 다른 값들과 다르게 String은 참조자료형에서 참조자료String의 주소값을 나타내야하기 때문에 String에 값을 넣지 않았고, String의 객체의 변수는 앞에 참조자료형의 경우 1.주소값 과 2. null 값밖에 들어갈 수 없는 것처럼 문자열이 적힌 주소값과 null밖에 넣지 못 하고, 아무 주소값을 넣을 수 없기 때문에 null값을적어 비어 있다는 표시를 넣은 것이다.  
  •  
  • null의 경우 초기값이다. 주소값을 담고있는 변수는 참조변수라고 불린다.
  • null이란
    1. 참조변수의 주소값 대신 넣을 수 있는 값
    2.  참조변수에 null을 넣으면 더이상 객체를 바라볼 수 없게 만드는 값
  • 객체 는 제품이라는 말을 앞에 작성하였다. 제품은 설계도가 필요하다. 즉, 객체도 설계도가 필요한데, 객체의 설계도는 class이다. 
  • 객체는 이세상의 모든 사물을 객체라고 한다. 형 이상학등도 ---> 계좌정보, 주문정보, 이체정보, 책정보 등 실제로 존제하지 않는 것이지만 실존해있다는 사실을 알고 있다. 이것이 객체이다. 즉, 설계도가 필요하며, class라고 불린다는 것이다. 
  • 이제까지 작성한 것이 모두 설계도이며, class이다 . 
  • class는 객체를 만들고 사용할 수 있다. 
    1. 객체 생성후 사용 할 수 있는 기능이 있다.
    2. 객체 없이 사용할 수 있는 기능이 있다. 
    3. class의 경우 import값이 로딩이 되는 것이 아닌 실제로 설계도를 가지고 객체를 만드는 순간 클래스 영역에 loding된다. String의 경우 String[]args가 사용되자마자 바로 클래스 영역에 불러와진다. 
    4. c:\>javac Main.java ---> c:\>java Main--->이렇게 설계도 이름이 등장하자마자 바로 클래스영역에 로딩된다
    5. 그리고 내부로 들어가서 static void main()을 찾아서 진입점을 찾아 바로 들어가고,main()메소드는 진입점으로 객체를 만들 시간이 없어서 JVM에서 객체생성하지 않고 실행하는 자격을 부여했다. ---> 객체영역에 main()이라는 주소값을 가진 객체가 따로 생성이 되지않는다는 말이다. 
  • 변수의 이름은 2가지로 나뉜다. 1.기본자료형 변수 2.참조자료형 변수 이다. 
    • 참조자료형 변수의 경우 해당객체의 주소값을 담고 있다. 
  • 기본형의 경우 변수영역에 있기 때문에 객체 생성이 되지않고 클래스 생성이 되지 않고 실행된다. 
  • 그 외에는 참조자료형이기 때문에 객체 영역에 생성이 되고 설계도가 존재한다. 
반응형

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

객체 지향 언어  (0) 2021.09.06
배열  (0) 2021.09.03
내포된 if 문, switch문,Scanner, Break, Continue  (0) 2021.09.02
제어문/ 반복문(if)문  (0) 2021.09.01
대입, 비교, 조건, 삼항 연산자 (Operator)  (0) 2021.09.01
Comments