2-5. 기본형, 참조형 변수 (배열, Wrapper(랩퍼), Class)
데이터가 어디에 있는가
사용자 입력 <-->처리(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 에서 하나씩 처리한다
변수 선언 = 변수타입 + 변수명
- 기본형 변수 - 길이 고정, 값(리터럴), 변수명(소문자시작)
-
숫자
정수 : 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 --조건문과 함께 자주 쓰임
- 참조형 변수 - 길이 가변, 주소(고정) 를 찾아가서 참조 // 종류 : 배열, 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에서 처리해줌 천천히 알아가자~
Author And Source
이 문제에 관하여(2-5. 기본형, 참조형 변수 (배열, Wrapper(랩퍼), Class)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hoan0418/2-5.-기본형-참조형-변수-배열-Wrapper랩퍼-Class저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)