#TIL Java 3일차 study

Yimy·2020년 10월 23일
0

Java Study

목록 보기
2/15

변수

( Variable : 변할 수 있는 )
: 저장된 값(데이터)이 변하는 수, 변하는 데이터, 숫자, 문자, ... 외에 다양한 것.

ex) 멤버, 매개, 지역, 전역, 참조, 파라미터, 글로벌(파이썬),
독립, 기본형, 원시데이터, 정적, 동적, 공유, 객체, 클래스, 인스턴스, 상수

1. 변수가 나뉘는 기준.

(1) 유효범위 ( 멤버=전역 / 지역=로컬 (생성자내,메소드내))
(2) 소유 클래스 ( static ) / 객체
(3) 상수 ( final ) / 변수
(4) 기본형( 8가지 ) / 참조형

(1) 유효범위 : 멤버=전역 / 지역=로컬

1) 멤버변수 ( == 전역변수 )

: 반드시 소유의 주체가 있어야 한다. 초기화 안되도 실행 가능.(JVM이 해줌)

ex) 아름다운(형용사) 혼자 쓰일 수 없음, 주체가 있어야 함.
여인.아름다운 ('여인' 소속의 형용사)

<1> 클래스 소속 (가 주체가 될 수 있음.)
<2> 객체 소속 (가 주체가 될 수 있음.)

ex ( day03/A.java

2) 지역변수 ( == 로컬변수 )

: 반드시 초기화 되어야 한다. ( JVM이 해주지 않음. )
( 지역변수는 소속 X )

<1> 선언 초기화
<2> 파라미터 변수 (매개==아규먼트(args))

ex ( day03/B.java

(2) 소유 ( static ) : 클래스 / 객체

1) 클래스 소유 ( static )
(== 정적변수 == 클래스변수 == 공유변수)
( 붕어빵틀은 다양화 되지 않음.)

2) 객체소유( no static )
(== 동적변수 == 객체변수 == 인스턴스변수)
( static 안붙으면 전부. )
( 사용 PC에서는 객체와 같다. )

(3) 변경 ( final ) : 상수 / 변수

1) 상수 ( Consistance )
final int i = 10;
타입 변수 = 값 ==> 이후 변경 불가

2) 변수 ( Variable )
ex) day03/C2.java

(4) : 메모리 저장(할당) 방식

1) 기본형 변수
( 원시데이터 == 프리미티브타입 ) - JAVA 에 8가지 존재.

  • 지정한 값이 메모리에 그대로 들어감.
    int i = 10, 10만큼 메모리에 들어감,
    -> stack 메모리로 잡힘. 가볍고, 찾기 쉬워서 더 빠르다. (효율성이 좋다.)


<1> call by value (호출하면 바로 값이 튀어나온다.)
<2> 형태 : 소문자 (int, long, double, ...)
<3> 종류 :

byte-1
short-2 / char-2
int 4

long-8
float-4
double-8

boolean 1

(char > int변환은 가능 : 양쪽값이 int가 더 크니까.)
(boolean은 변환안됨. 혼자 쓰임)

<4> 담을 수 있는 값의 범위

(1) byte : -128~127 (-2^7 ~2^7-1) : 경우의 수
(2) short : -32,768~32,767 (-2^15 ~ 2^15-1) : 경우의 수 2^16
(3) char :  (0~2^16-1)  : 경우의 수 2^16
(4) int : -2,147,483,648 ~ 2,147,483,647 (-2^31 ~ 2^31-1)  : 경우의 수 2^32
(5) long  : -9,223,372,036,854,775,808~ *807 (-2^63 ~ 2^63-1) : 경우의 수 2^64
(6) float  : -2^31 ~ 2^31-1  : 경우의 수 2^32
(7) double : -2^63 ~ 2^63-1 : 경우의 수 2^64
(8) boolean : 0 | 1 = false / True

ex) day03/D.java, E.java(재미로)

<5> 형변환 (Type Casting)

1> 자동 형변환 ( 암시적 / Implicit ) by JVM
: 범위가 작은 Type > 큰 Type으로 이동이 자동으로 됨.
2> 강제 형변환 ( 명시적 / Explicit ) by 개발자
ex)day03/F.java

<6> 예외 형변환

-> 정수형 타입(byte, short, char, int)끼리의 연산의 결과는 무조건 int!!
ex)day03/G.java

<7> 초기값

ex)day03/H.java
-> 정수(0,0L), 실수(0.0f, 0.0(d)f는생략불가, d가 더 많이 쓰여서 생략 가능) , 불린(false)

<8> 존재이유 (기본 8가지를 따로 빼놓은 이유-Integer말고 int로 쓰는 이유)

  • 실행의 효율성
    int (스택에 존재, 완벽객체 아님.)
    Integer(힙에 존재, 완벽객체, 크기커짐->시간느려짐.)
    : 그래서 간단하게 빨리하기 위해
  • java는 완벽한 객체지향 언어 : 모든타입을 객체화 시킬 수 있다.
    heap이라는 무질서한 메모리에 만들어지는 무엇(객체)으로 만들 수 있음.

2) 참조형변수 ( 레퍼런스 == Reference )

F f = new F( );
>> 에서 F는 내가 만든 타입 = 참조타입, so 무제한 생성 가능.
 String str = "가", 
str라는 저장장소가 잡히고, "가"는 숫자가 아니라 크기가 커서, 
고유의 모양을 가진 객체가 만들어짐. > 번지수를 'str' 라는 스택에 저장
(heap에 객체는 저장, 메모리의 번지수를 참조함. 직접 바로얻는게 아니라, 
번지수를 참조해서 참조형변수라고 한다.)

<1> call by reference (호출하면 주소가 튀어나온다.)
<2> 형태 : 대문자로 시작
<3> 종류 : 기본형 (8가지)를 제외한 모든 타입 ( 무한대 )
<4> 초기값 : null
<5> 형변환

cf) 배열변수 -> 배열을 저장하는 저장소
여러개의 값을 지정하는 변수
ex) day03/I.java

profile
Better version

0개의 댓글