2-5. 기본형, 참조형 변수 (배열, Wrapper(랩퍼), Class)

29432 단어 22/4/1322/4/13

데이터가 어디에 있는가

사용자 입력 <-->처리(JAVA) <--> 데이터 베이스에 저장되어 있는 데이터

데이터 처리 : java

데이터 저장 관리 (DBMS) : oracle - 데이터 수집

데이터 표시(UI) : (HTML, CSS, JS) + 웹 표준처럼 모든 브라우저에서 실행시킬 수 있게 (jQuery, bootstrap) //HTML= 태그로 표현 // CSS = 스타일 // JS = 브라우저에서 동작 실행시키는 언어

JAVA_HOME : 자바 위치 정보 환경 변수

시작 : public static void main(String[] args) { ~~~ } --(프로젝트에 하나만 )

-현재 보이는 main 먼저 실행해 준다. -> 없다면 실행에 성공한 main 을 실행한다

public - 일반, 공공의, 대중적인 // 다른쪽의 프로그램에서도 끌어쓸수있음

static - 고정된 // class 에 안붙임(정적 필드, 정적 메소드 에 붙인다)

// 변수 또는 메서드에 사용 -> class를 접근하는 순간 자동으로 올려준다

// 메모리가부족해도 자동으로 삭제시키지 않아 주소가 계속 유지된다

//PrintName.main() 으로 사용

cmd 에서 java printName a b c 입력 -> String[] args 에 a b c 가 들어간다

메인메모리(RAM)로 올리는 키워드 - static(자동으로 올라감 계속 유지), new(수동 블럭을 빠져나가면 사라짐)

데이터 특성 - > 변수 선언 -> 메인메모리에 자리가 잡힌다

void : 비우다, 배설하다 ( 아무것도 없는 상태로 만든다) // void 는 메소드 앞에만 붙는다 = return 타입이다.

cf) 현재 입력이 없는 상태라 void 씀 -> 만약 더하기 커맨드창에 입력한다면 int 라고 넣어야 함

args : argument : 논쟁들 ~~ // 처리에 결정적인 요인을주는 값

  • CPU 처리는 레지스터로 가져온 데이터만 소통함 - 결국 RAM 에서 레지스터가 데이터를 가져와야 CPU 에서 하나씩 처리한다

변수 선언 = 변수타입 + 변수명

  1. 기본형 변수 - 길이 고정, 값(리터럴), 변수명(소문자시작)
  • 숫자

    정수 : byte -> short -> [int] -> long(L 붙여야함) -- 부호(1bit) + 유효숫자(가수)양수, 2의 보수 음수

        - 0123 : 8 진수 앞에 0 붙임 // 0x123 : 16 진수 앞에 0x 붙임
    
        -연산시 int 값으로 반환됨
    
        - 캐스팅(현변환- 관련있는 데이터만 가능)
    
            큰-> 작 = 강제 캐스팅 (int) long -> int 데이터손실 있음 
    
             작->큰 자동 캐스팅 int -> long //손실없음

    실수 : float - [double] -- 소수점이 있으면 double이 기본 //

      저장 : 부호 + 가수(유효숫자)  + 지수 

1234.56 -> + 1.23456 *10**3

0.000156 -> + 1.56*10**-4

  • 문자 : char = 'A' 2byte -> int 숫자로 운영 가능 산술연산 가능 -> 연산시 int 로 자동타입변환됨

  • 논리 : boolean = true/false -> 1byte --조건문과 함께 자주 쓰임

  1. 참조형 변수 - 길이 가변, 주소(고정) 를 찾아가서 참조 // 종류 : 배열, Class, Connection

-배열 - [] - 같은 타입의 변수를 여러개 지정 // int[]기본형 , String[] 참조형

int [] scores === int scores[] 대괄호 위치 바뀔수있음

new = 메인메모리에 공백을 만들고 새로 넣을때 / 참조형 변수에 해당하는 데이터 만들때 사용

*static으로 한것은 알아서 메인메모리에 올라감 class 이름으로 사용 (new 안씀) ​

배열 선언 o 초기값 x =참조할 주소가 없다. 사용할수없다 (초기화 해줘야한다)

타입[] + 변수명 == 타입 + 변수명[]

int[] scores; ===== int scores[];

null 의 뜻 - 올라온 데이터가 없어서 참조할 주소가없음

scores = null;

scores = new int[3]; // 저장할수있는 공간을 할당한다 - scores[0, 1, 2]

scores[0] = 100; -값 할당

System.out.println(scores); //(scores.toString());와 출력값이 같다

//[I@15db9742

//[ = 배열 i = int @ = 주소 db=16진수 <= 해쉬코드 (hashCode) 형식 //할당되었다

index - scores[0] // scores.length = 최대 인덱스 길이 = 최대 인덱스 + 1

주로 사용 하는 조건 형식 - > i < scores.length

//이미 데이터가 있는경우

//초기화시키는 것이 아니라 new int 생략 불가

scores = new int[] {100, 90, 80};

//참조형 변수라 new 를 사용해야함

//이미 가지고 있는 데이터를 배열 변수에 넣을 때 초기값이라면 new int[] 생략가능하다.

//처음 배열 만들때 생략 가능

int[] ages = {50, 20, 19, 40};

배열 출력 방법

System.out.println(Arrays.toString(ages));

import java.util.Arrays;

/**
 * 배열 처리 클래스<p>
 * 같은 타입의 여러개의 데이터 저장하기 위해 <br>
 * 여러개의 점수를 더하는 처리
 */


public class ArrayExample {

	static int ss[];   // == int[] ss //기본값이 초기화 된상태 null 로 초기화
	//참조형 변수는 null <-> 기본형 변수는 0
	
	//메인 밖에있는것은 작성과 동시에 메모리에 올라가는 동시에 같이 올라가는 것이라 바로 초기화 시킴
	//메인 밖에있는 변수는 전역변수 : 어떤메소드에서도 가져다 쓸수있다 class 생성과 동시에 살아이쓴상태
	
	//static 없이 ss 쓰면 main 이 실행되었을때 ss 가 메인 메모리에 안올라가있어서 에러가남
	//new 로도 가능한가????
	
	//메인 안에 있는것은 호출해야만 생기는것이라 초기값을 마음대로 설정하지않음 
	//메인 안에 있는것은 지역변수 : 실행 후 사라짐
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//데이터의 개수만큼 배열 만들어서 처리한다.
		//배열 선언 o 초기값 x =참조할 주소가 없다. 사용할수없다
		int[] scores;  
		scores = null; //null 의 뜻 - 올라온 데이터가 없어서 참조할 주소가없음 
		System.out.println(scores); //main()메소드 안에서 사용하거나 출력하려면 반드시 메소드 안에서 초기화 시켜야 한다.
		
		System.out.println(ss);  // main메소드 밖에 있어서 초기화 시키지 않아도 작동 됨
		
		//점수들 100,90,80
		// 배열 데이터 한개씩 입력 -> 데이터가 정해져 있지 않은경우 사용
		
		scores = new int[3]; // 저장할수있는 공간을 할당한다 - scores[0, 1, 2]
		scores[0] = 100;
		scores[1] = 90;
		scores[2] = 80;

		//scores[3] = 80;  // java.lang.ArrayIndexOutOfBoundsException: 3 -> bounds 범위 벗어남 : 원인 3
		
		System.out.println(scores);  //(scores.toString());와  출력값이 같다           
		//[I@15db9742
		//[ = 배열 i = int @ = 주소 db=16진수  <= 해쉬코드 (hashCode) 형식 //할당되었다
		
		//배열의 길이 출력
		System.out.println(scores.length);
		
		// 값 출력 - for와 배열의 길이를 이용한 처리 
		for (int i = 0; i < scores.length; i++) 
			System.out.println(scores[i]);
			
		// 값 출력 - Arrays 클래스를 이용한 출력 
		System.out.println(Arrays.toString(scores));
		
		//이미 데이터가 있는경우
		//초기화시키는 것이 아니라 new int 생략 불가 
		scores = new int[] {100, 90, 80};
	
		System.out.println(Arrays.toString(scores));
		
		//참조형 변수라 new 를 사용해야함 
		//이미 가지고 있는 데이터를 배열 변수에 넣을 때 초기값이라면 new int[] 생략가능하다.
		//처음 배열 만들때 생략 가능 
		int[] ages = {50, 20, 19, 40};
		System.out.println(Arrays.toString(ages));
		
		
		
	}

}

-배열 이 늘어나면 새로 배열 만들어 내용 복붙후 새로운 내용 추가


  • Class -> class 클래스명 { 변수, 메서드(처리 동작)} //길이 정해져있지 않다

    회원 클래스 { 이름(문자열 String), 나이(int), 연락처(문자열 String) } = 타입(Class) + 변수명(회원) = 참조형 변수 선언 = 다양한 타입의(String,int....) 변수를 쓸수있다

Class 안에 Class 를 만들수있다

//위의 경우는 데이터 저장용 클래스 - 대부분 저장용 으로 쓰임 / 처리하는 클래스도 있을수있다


public class ClassExample { // ClassExample 클래스 라고 하지만 ->ClassExample 타입으로 활용할수있다
	
	//ClassExample ce = null;   자신의 모양을 갖고있다는 의미  //아래 Member에 예시 써있음

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//같은 값을 2번 이상 사용하면 변수에 저장한다. (퍼포먼스 상승) 메소드호출이 적을수록~성능 향상
		//한번만 사용하는경우 바로 넣는것을 추천, but 길고 복잡한 결과값이면 변수사용을 추천
		String name = "이름";
		System.out.println(name);
		
		//new 로 클래스를 생성 name 변수명은 String의 주소를 저장한다 /String은 메모리에 올려둔다
		name = new String("Hyun");
		System.out.println(name);
		
		//회원 정보를 저장하고 출력하자.  //같은폴더 에있는것 눈으로 보인다~ //Member = 대문자 클래스다~
		//member.name 에서 member 는 객체라고 한다 <- Class 로 지정 해서 타입으로 활용가능 (int..String..등과같이)
		Member member = new Member();
		member.name = "이름";
		member.age = 20;
		member.tel = "010-xxxx-xxxx";
		//실제로는 getter,setter을 같이 사용
		
		
	}//main() 끝

	/* 여기에 넣는것도 가능
	class Member { 
		
		String name;
		int age;
		String tel;
		*/
		
	}//end of ClassExample class  //클래스 끝내도 다른 클래스 더넣을수있음
	
//데이터 저장을 하려면 new 해야하한다 // static 이 아니니까 ~ 자동으로 메인메모리에 올라가지않음
//참조형 메인메모리로 올리는 키워드는 static, new 밖에없음
	// 컴파일 하면 class 파일 따로 생김
	// 대부분 밖에 씀 
	class Member { //public은 못넣음 // Member class 이지만 -> member 타입 으로 가능 
		
		String name;
		int age;
		String tel;
	}

new 로 생성된 member객체는 class 로 이미 선언된 Member를 바탕으로 생성되었지만 새로운 member 객체 로서 사용된다 --p.195 이것이 자바다



Wrapper(포장) 랩퍼 클래스 (Class 종류)

  • 기본형 변수를 기반으로 처리되는 코드를 작성해 놓은 클래스 - 기본형 변수를 기반하지만 참조형 변수로 사용됨 (결론 참조형 변수다)

기본형 변수에는 그에 해당하는 랩퍼 클래스가 적어도 1개씩은 있다

int 는 숫자만 가능

(처음 대문자)Integer. 로 바이너리형식으로 바꿀수도(박싱Boxing) 있고 거꾸로 원래 int 값을 도출할수도 있다(언박싱 Unboxing)

int intData = Integer.parseInt("123"); // parseInt 는 String 타입으로 들어온 문자열을 int형으로 자동 변환시켜주는 것

static 일경우 Integer.parseInt(String) // static은 변수를 지정할수없이 바로 메인메모리로 올라간다

class 이름을 써서 사용

static 형식임 -> Integer.toString(a); == print("" + a ); 라고 해도 문자열로 자동으로 나옴

/**
 * <h2>랩퍼 클래스(wrapper class)</h2>
 * 기본형 변수 값을 가지고 처리하는 메서드를 추가해 놓은 클래스<br>
 * 맨앞자를 대문자로 처리. 단, int -> Integer.
 * 줄바꿈  br
 * 
 * @author EZEN
 *
 */ 
public class WrapperExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int a = 10;
		
		//참조형 변수 10을 둘러싸는 클래스를만들어 ia 에 넣음
		//int 값을 Integer 로 자동 박싱된다.
		Integer ia = 10;    
		System.out.println("기본형 변수 a : " + a + ", 참조형 변수 ia : " + ia);
		
		ia = a;
		System.out.println("기본형 변수 a : " + a + ", 참조형 변수 ia : " + ia);
		
		//자동 언박싱 ( 값만 풀어서 가져감 )
		a = ia;
		System.out.println("기본형 변수 a : " + a + ", 참조형 변수 ia : " + ia);
		
		ia = new Integer(20);  // new에서 새로 생성해서 메인메모리에 넣는다
		System.out.println("기본형 변수 a : " + a + ", 참조형 변수 ia : " + ia);
		
		a = ia;
		
		//랩퍼 클래스 안에 최대값과 최소값을 가지고있다(int, byte, long....)
		//final 값이 변경되지 않는다 = 상수 // 상수로 쓸수있는것은 리터럴과 상수변수 다
		System.out.println("int 의 최대값 : " + Integer.MAX_VALUE + ", 최소값 : " +Integer.MIN_VALUE);;

		System.out.println("byte 의 최대값 : " + Byte.MAX_VALUE + ", 최소값 : " +Byte.MIN_VALUE);
		
		//문자열로 된 숫자 데이터를 받았을때 -> 그냥저장 안된다  
		// 로직 : "123" -> 1다음 숫자있으면 *10 다시 숫자 있으면 또 *10 + 2 다음 숫자있으면 *10 + 3
		// 네트워크롤 받는 타입은 모두 문자로 받아서 다시저장해야함 // 
		//throws NumberFormatException 숫자 아니면 처리하는 예외 명령
		
		int intData = Integer.parseInt("123");     // 변수 설정
		System.out.println("intData + 10 : " + (intData + 10));// 계산먼저하고 문자열로 만들기
		System.out.println(Long.parseLong("11111111111"));  //문자열을 long 타입으로 변환시
		
		System.out.println(ia.toString()); //문자열 로변경  (ia 는 Integer 랩퍼로 선언했었음)
		
        //왼쪽부터 순차적으로 숫자로 계산되고 문자열과 합해지면서 부터 문자열로 변경 문자열로 변경
		System.out.println(ia + 1 +1 +1 +1 +"???");	
	
		System.out.println(a.toString());  // 기본타입 변수에는 사용 불가 (리터럴로 선언했었음)
		
		System.out.println("" + a); // 처음 문자열 에 이어붙여지면 바로 문자열이 된다
		
	}

}

/* 자동으로 도큐멘트 만들어짐 /

  • Collection(= Class의 일종) - 저장 데이터를 위한 클래스 (만들어져있음 가져다 쓰는것)

DB 배울때 같이 배운다~

다차원 배열은 DB에서 처리해줌 천천히 알아가자~

좋은 웹페이지 즐겨찾기