본문 바로가기
카테고리 없음

[3] JAVA_기초특강

by developer_j 2020. 2. 20.
728x90
반응형

* 변수는 선언하는 위치에 따라 종류가 달라진다.

      - 클래스 변수 : 클래스 자체. 자료형 / 추상적인 느낌. 클래스를 사용하려면 클래스형 변수를 만들고 선언해야 한다.

      - 인스턴스 변수 : 실재 느낌. 클래스를 실제로 만든 것. (메모리에 생성하는 것.)

      - 지역 변수 : { ... } 안에 있으면 지역 변수. ( method / 제어문 안의 변수 )

      - 멤버 변수 : 클래스 안에 있고, method 밖에 있는 변수. ( == field)

      - 정적 변수 : static 키워드가 붙어있는 변수. 전역적인 특성을 띤다.

static 키워드는 팀원들이 다 알아야 하는, 내용이 크게 변경 여지가 없는, 공용으로 쓰이는 변수에 붙인다. 설정값 같은 변수에 이용되며, 그 의미가 변질되지 않게 남발해서는 안된다.

 


----------------------- <  수업 POINT  > -----------------------

* 조건식 : if, if-else, 중첩

  ①  if ( 조건식 ) {  처리식  }

      조건식의 결과는 boolean이어야 한다. 참이면 처리식을 실행하고, 거짓이면 생략한다. 조건식이 참일 경우와 아닐 경우를 염두에 둔다면 if - else 문을 사용할 수 있다. if 문은 중첩할 수 있다. 다만, 중첩하려면 각각의 if 문 마다 달리는 조건식들을 잘 고려하여 불필요한 if 문을 만들지 않게 신경써야 한다. 

if ( A ) {
	if ( B ) {
	}   else {
           ... 
        }
    }
}

    여기서  중요한 건, if 의 조건식들이 서로 연결되고 있음을 알아야 한다!   첫번째 if 문은 A 조건이 참인 경우 실행 ㅡ 두번째 if 문은 B 조건이 참이거나 거짓인 경우 실행됨. 즉 , A와 B가 참일 때  혹은  A가 참이고 B가 거짓일 때의 두가지 조건이 있음을 알 것.

if ( A ){
}else if( B ){
}else if( C ){
}else{
}

      이 경우에는 마지막 else가 실행되려면 A, B, C 라는 조건이 모두 거짓이어야 한다. 즉, !( A && B && C )

  switch ( 조건식 ) { 처리식 }  + case , default 

int num = 2;
switch (num) {
	case 1 : 
	...
	case 2 :
    	...
	case 3 : 
    	...
   	default :
    	...
}

      switch의 조건식이 만족하는 case 번호 함수를 실행한다. default는 if-else 문의 else 역할을 한다. 

      **  참고. 조건문에서 나오고 싶을 때는 break;를 사용한다. 꼭 써야하는 건 아니며, 조건이 하나밖에 없다면 쓰지 않는다.

* 반복문

  ①  while ( 조건식 ) {  처리식  }

      조건이 참인 동안 실행한다.

  ②  do{ 처리식 } while ( 조건식 ) ; 

      { 처리식 } 을 일단 먼저 실행시킨 후 while 문의 조건식을 검사하여 반복 여부를 결정한다. 참일때까지만 반복한다. 먼저 입력받아야 할 데이터가 있고, 그 데이터를 검사하기 위한 용도라면 do-while 문을 더 자주 이용한다. 데이터가 잘못 됐으면 다시 입력받아야 하는 번거로움을 덜기 위함이다. 

while 문과 do - while 문을 사용하는 경우는 그 조건의 수가 적을 때이다. 조건식이 하나만 사용되기때문에 문장이 길어 질 수 있다. 따라서 번호나 갯수, 특히 배열일 경우 거의 for 문을 이용한다!

  for ( 초기식 ; 조건식 ; 증감식 ) { 처리식 }  

      () 안은 비워도 괜찮지만, { } 안은 비우면 안된다.  for 문의 경우 보통 횟수 / 줄 수가 정해져있을 때 사용한다. 위의 반복문들을 요약하는 느낌. for 문을 중첩할때는 각각의 지역 변수를 다르게 하는 것이 권장된다. 왜냐하면 각각의 for 문의 용도/목적을 명확하게 하기 위함이다. (제어변수라고도 한다.)

 

  +   배열 

배열선언 -->  (선언하려는 데이터의)자료형 [] 배열명 = new 자료형[갯수]

배열은 데이터와 위치를 가진다 !! 또한 대괄호 [] 안의 숫자는 배열의 "갯수"임을 유의한다. 자바에서 복사는 얕은 복사와 깊은 복사가 있는데, 얕은 복사는 변수명만 복사(전달)받는 것을 말하고, 깊은 복사는 주소를 복사한 것을 말한다. 즉 배열같은 참조형 변수들은 복사하는 것이 실제 데이터인지, 주소인지를 명확하게 파악하고 있어야 한다. 변수 값의 변경을 나만 할 수 있게 할건지, 다 할 수 있게 할건지로 구분한다! 한편 배열은 변수명이 값과 주소를 다 가지므로 그 자체로 참조형 변수이다.

// 배열 선언 
int[] arr = new int[10];
System.out.println(arr);

//결과 = [I@6d06d69c . 분석 = Integer형 / @:어디? / 16진수 주소


 위에서 말했듯, 선언 시 []안의 숫자는 배열의 갯수(길이)다. 배열은 길이에 유의해야 한다. 왜냐하면 한번 선언한 배열의 크기는 후에 변경할 수 없다. 따라서 만약 arr.length = 20;이라는 코드를 실행하면 에러가 나게 된다.

 길이를 변경할 수도 없지만, 길이를 초과해도 에러가 난다. 예를 들어 길이가 10인 arr 배열에 대해 arr[10] = 10; 이라는 코드를 실행하면 오류가 뜨는데, 길이가 10인거지 각각 배열 요소의 순서/번호는 0부터 시작해 10개까지 이므로 arr의 배열 최대 번호는 9다. 참고로 이러한 초과 오류는 디버깅했을 때는 안뜨고 실행시킨 결과에서 뜬다. 따라서 배열을 선언하면 해당 배열의 길이를 제대로 파악하고 있어야 한다. 더불어 add, append같은 함수는 길이나 내용을 추가한다기보다는 지정 공간에 삽입하는 개념이다.


** 난수를 뽑는 random 함수의 라이브러리인 Math 클래스는 대부분 더블을 사용한다. 캐스팅 처리에 유의해야 한다. 랜덤함수로 난수를 뽑으면 0~1사이의 난수가 나온다. 즉, 소수점이 나오므로 * 1000을 해주는 등의 스케일링을 해줘야한다.

+  추가로 자주 쓰이는 함수  Math.pow(a,b); --> a의 b승
                                                   Math.sqrt(a); --> a의 제곱근

 


오늘의 느낀 점 :  코드짜는 것은 직관적으로 접근할 수록 쉬운 것 같다. 먼저 쉬워보이는 코드 / 이렇게 짜야되는 건 확실한 코드는 먼저 써두고, 순서대로 정리하고, 문법에 맞춰 요약 및 수정해나가면 코드 완성률이 높아지는 것 같다.

코드 수정 예정 !

728x90
반응형