728x90

 

상수(Constant)

한번만 저장할 수 있는 변수

변하지 않는 변수

상수명 네이밍시, 전부 대문자 and 단어 사이는 언더바( _ )

final boolean **IS_FALSE** - false;

예약어(reserverd word) final 추가

public class B_Constant {
public static void finalConstant() {
	int age = 10;
	final int AGE = 10;
	
	System.out.println("age : " + age);
	System.out.println("AGE : " + AGE);
	
	age = 20;
//		AGE = 20; // 상수라 값 변경불가
	// error : The final local variable AGE cannot be assigned. 
	// It must be blank and not using a compound assignment
	
	System.out.println("age : " + age);
	System.out.println("AGE : " + AGE);
}
}

 


 

형변환(Casting)

자료형을 바꾸는 것

(boolean은 형변환 불가)

1)자동 형변환

2)강제 형변환

 

 

 

8byte long에서 4btye float로 변환될까?

가능. 정수보다 실수가 범위가 더 넓어서 가능.

바이트에 대한 상자크기

int a = 10;

int b = 10L; error

8byte인 long을 4byte인 int에 넣을려고 해서 에러

 

 

문자인 char를 숫자로 casting?

아스키코드에 char에 대한 숫자 변환 값이 나와있다.

숫자에서 char로도 변환가능

유니코드 : 아스키코드 확장형

 

1)자동형변환

int a = 12;

double d = 3.3;

데이터타입이 다른 int와 double의 계산?

일단가능

 

a+d의 데이터 타입은

자료형이 맞지 않으면

작은 크기 의 데이터값이 자동으로 형변환이 됨

 

short result = s + c ;

char result = s +c ;

 

float to long 형변환? 가능

작은거에서 큰거

큰거에서 작은거 둘 다 가능하나

// 1.자동 형변환
public void cast1() {
// 	 1)정수끼리 자동 형변환
	byte bNum = 3;
	int iNum = bNum; // 자동 형변환
//	 2)정수와 실수끼리의 자동 형변환
	long lNum = 100;// long으로 int로 자동 형변환
	byte b1 = 10;	// 4byte 정수 10 // byte 크기가 안맞는데, no error? byte저장 가능범위 : -128~127
//		byte b2 = 10L;  // 8byte 정수 10 // 1byte인 b2에 8byte짜리를 넣을려해서 error
					// byte의 저장 가능 범위(-128~127)를 넘어섰기에 에러
					// 리터럴. 값 유동적일 수 있음. int가 4byte이긴 하지만 리터럴이기 때문에 
					// 내가 받을 수 있는 범위 안에 들어오느냐를 먼저 확인해 볼 수 있음. 변수가 아니기에 각 데이터별 범위 안에만 있으면 허용가능
					// 각 데이터타입이 받을 수 있는 범위(변수 저장가능범위)부터 체크 데이터 타입 체크
//   3)정수와 문자끼리의 자동 형변환
	int num = 'A';
	char ch = 97;
	System.out.println("num : " + num);
	System.out.println("ch : " + ch);
	
//		char ch2 = num; // error :Type mismatch: cannot convert from int to char
	char ch2 = (char)num; // 강제 형변환 
	// 위에서 int num = 'A'는 잘run되고 결과값65를 얻었는데 왜 안될까?
	// 'A'는 리터럴이고 num은 변수. 리터럴이기에 변수저장 가능범위가 맞으면 형변환이 가능했던 것
	System.out.println("ch2 : " + ch2);
	
	int num1 = -10;
	char ch3 = (char)num1;
	System.out.println("ch3 : " + ch3); // 아스키코드 변환 ?가 아닌 어떤 문자로 매치될지 진짜 몰라서 나오는 ?

}

 

 

2)강제 형변환

크기가 큰 자료형이 크기가 작은 자료형으로 변환

강제 형변환시 데이터 손실이 발생할 수 있음

1btye = 8bit

8비트에서 16비트로 변환하면 남는 메모리 값(칸)을 0으로 채우면 되지만, 반대로 16비트에서 8비트로 줄어 들 때는 못집어 넣는 값이 생기면서 데이터 손실이 발생할 수 있음

강제 형변환은 자동으로 데이터 손실 가능성 때문에 잘 형변환 시키지 않는다.

int a = 12;
double d = 3.3;
int result = a + (int)d; // 강제 형변환

int i = (int)d; 

System.out.println(i);       // 결과값 3
System.out.println(result);  // 결과값 15
// 2.강제 형변환
public void cast2() {
	int iNum = 10;
	long lNum = 100L;
	
//		int result = iNum + lNum;	// 작은게 큰거를 따라감. int가 long으로 자동변환 되는데 담기는 그릇이 int라 error
	// iNum이 long으로 자동 형변환이 되어 계산 결과가 long타입이 되는데 그 값을 int에 넣으려하기 때문
	
	
	// 방법1. 수행 결과를 int로 강제 형변환
	int result1 = (int)(iNum + lNum);	// 계산순서 1. (iNum + lNum) 2. (int) 형변환
	
	// 방법2. long형 값을 int로 강제 형변환
	int result2 = iNum + (int)lNum;
	
	// 방법3. 결과값을 long형의 자료형으로 받기
	long result3 = iNum + lNum;
}

 

 

※ 컴퓨터의 연산의 원칙

  1. 같은 종류의 자료형 대입 가능
  2. 같은 종류의 자료형 계산 가능
  3. 같은 종류의 자료형 결과 도출

 

 

728x90
반응형
728x90

 

전역변수 지역변수

    지역변수 : 함수 내부에서 'var 변수명;'
    전역변수 : 함수 내부에서 '변수명;'
    전역변수 : 함수 밖에서 '변수명;' 혹은 'var 변수명;'
 

자료형

typeof연산자 : 값의 자료형을 확인하는 연산자
        }
문자열과 숫자의 +연산
문자열과 숫자가 연산하면 str화된다

 

데이터 형변환

Number(), parseInt(), parseFloat()

for in문

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<title>02_BasicGrammar_prac</title>

</head>
<body>

    <h2>변수 선언</h2>
    <script>
        // 함수 외부
        str1 = '전역변수';      // var 안붙은건 죄다 전역변수
        var str2 = '전역변수';  // var 붙었는데 함수 밖이면 전역변수

        window.onload = function(){
            // 함수 내부
            var str1 = "지역변수1"; // 함수 내부라 var변수명이라도 지역변수
            var str3 = "지역변수2";

            console.log('str1 :' + str1);       // 지역변수
            console.log('this.str1 :' + this.str1);   // 전역변수 : 함수 내부에서는 전역변수를 this.나 window.을 찍어서 구분해줘야한다
            console.log('window.str1 : '+ window.str1); // // 전역변수 : 함수 내부에서는 전역변수를 this.나 window.을 찍어서 구분해줘야한다
            
            what = '난 뭘까?';  // 전역변수
            showWhat(); 

        }
        function showWhat(){    
            console.log(typeof what);          //                
            console.log(typeof this.what);     // 
            console.log(window.what);   // 
        }

    </script>
        

    <h3>자료형</h3>
    <p>자바스크립트에서는 자료형 별로 변수 타입이 지정되지 않고 리터럴에 의해서 자료형 결정</p>
    <button onclick="typeTest();">자료형 테스트ㄱㄱ</button>     
    <script>
        function typeTest(){
            var name = "강건강";                         // 문자열
            var age = 20;                           // 숫자
            var check = true;                       // 논리값        
            var hobby = ['축구', '야구', '농구'];    // 배열
            var user = {                            // 객체   
                name: '강건강',
                age: 20,
                id: 'user01'              
            };
            var testFunction = function(num1, num2){
                var sum = num1 + num2;
                alert(sum);
            };
                        // 콘솔창에서 '값' 확인
                        console.log(name);
            console.log(age);
            console.log(check);
            console.log(hobby);
            console.log(user);
            console.log(testFunction);


            // 콘솔창에서 '타입' 확인
            console.log(typeof(name));
            console.log(typeof(age));
            console.log(typeof(check));
            console.log(typeof(hobby));
            console.log(typeof(user));
            console.log(typeof(testFunction));    
        }


    </script>



    <h2>데이터 형변환</h2>
    <h3>문자열과 숫자의 +연산</h3>
    <!-- 문자열과 숫자가 연산하면 str화된다 -->
    <p>문자열과 숫자가 연산하면 str화된다</p>
    <button onclick="testPlus();">문자열과 숫자의 +연산</button>
    <script>
        function testPlus(){
            var test1 = 7 + 7;          // 14
            var test2 = 7 + '7';        // 77
            var test3 = '7' + 7;        // 77
            var test4 = '7' + '7';      // 77
            var test5 = 7 + 7 + '7';    // 147
            var test6 = 7 + '7' + 7;    // 777
            var test7 = '7' + 7 + 7;    // 777

            console.log(test1);
            console.log(test2);
            console.log(test3);
            console.log(test4);
            console.log(test5);
            console.log(test6);
            console.log(test7);

            // console.log(test2 + 1);
            // console.log(test3+1);
            console.log(Number(test3)+1);       
            console.log(parseFloat(test3)+2); // 79
            console.log(parseInt(test7)+3); 780

        }
        </script>        

        
    <h4>for in문</h4>
    <button onclick="forInTest();">for in문</button>
    <!-- 자바 foreach랑 비슷함 -->
    <script>
        function forInTest(){
           var rst = "";
           var arr = ['a','b','c','d'];
            
            for(var i in arr){
                console.log(i)      // 0123
                // rst = arr[i] + " "; // 값 자체는 0~3까지 다 들어감. 마지막 들어간게 3이라 덮어씌워지면서 3의 자료인 d가 출력
                rst += arr[i] + " "; // += 변경해야 추가됨
           }
           alert(rst);
        }
    </script>


</body>
</html>
728x90
반응형
728x90

 

 

728x90
반응형
728x90

 

JAVA1 8.1. 변수의 정의

 

자연수 : 1,2,3,4…

정수 integer

int a = 1;

int a = 1.1; // 에러

 

real number 실수

 double b = 1.1;

 

변수 지정시 데이터 타입 지정해주고 그에 따른 값과 연산법을 지정해주어야 한다

값을 넣을 때는 까다롭지만 지정된 데이터타입이 있기에 그게 아닌 정보가 들어간다면 아예 컴파일이 안되므로, 반대로 안에 들어간 값이 성공했다면 데이터는 타입 확인 필요없이 반드시 정수나 문자열 같은거라는걸 확신가능

 그래서 꺼낼 때마다 확인할 필요가 없는 편리함이 있다

 

 

 

JAVA1 8.2. 변수의 효용

 

System.out.println("Hello, egoing… egoing… bye");

전에 .replace("" ,"")으로 대체하는 법을 배웠지만 변수를 이용하는게 좋다

 

String name = "egoing";

System.out.println("Hello, "+name+"… "+name+"… bye"); // 위의 str name변수가 들어감

 name 변수를 하나 바꾸면 println() 들어가있는 모든 name 같이 바뀌므로 아주아주 효율적으로 변함

코드를 나만 보는게 아닌 협업을 하기에 내가 아닌 다른 사람이 보아도 해당 코드가 뭔지 빠르게 있도록 코드를 짜는 것이 정말 중요

 

System.out.println(10); // 이렇게하면 10 출력되겠지만 이것의 데이터타입이나 세부정보를 다른 사람은 알기 어렵다. 아래처럼 하는걸 추천

     double VAT = 10.0;

     System.out.println(VAT);

 

 

 

 

 

JAVA1 8.2. 데이터 타입의 변환(casting)

 

double a = 1.1;

double b = 1; // 문제없음. 1.0으로 출력

System.out.println(b);

정수integer 1 실수로 컨버팅했지만 에러도 없고 잃어버리는 값이 없다

 

 

※ 에러메시지 확인 & 해결방법 보는  

 

 

위의 스샷에서 double 1.1 int 강제 변환 시켜서 1.0 되기 때문에 손실이 일어난다. 손실이 일어나기에 자동적으로 변환해주지 않음

 

double b=1;              // 자동 캐스팅

double b2 = (double) 1; // 수동 캐스팅. 명시적으로 바꿔준 것

둘은 같은 코드

 

*int to str 캐스팅 검색

String f = Integer.toString(1);  // 정수에서 문자열로 변환

 

.getClass() : 해당 변수가 어떤 타입인지 알려줌(파이썬의 type()함수 역할)

System.out.println(b2.getClass());

 

 

 

 

 

728x90
반응형

+ Recent posts