관리 메뉴

드럼치는 프로그래머

[JAVA] 자바 프로그램의 구조, 주석, Data Type, 상수, 형변환, .. 본문

★─Programing/☆─JAVA

[JAVA] 자바 프로그램의 구조, 주석, Data Type, 상수, 형변환, ..

드럼치는한동이 2007. 10. 5. 17:52

▩ 자바 프로그램의 구조

/*
public
- 외부에서 별다른 제약없이 이 클래스에 접근 할 수 있습니다.
- private, protected, friendly

class
- 현재 만들어지는 모듈은 클래스입니다.
- interface
 
Hello
- 클래스 이름, 파일명은 Hello.java로 대소문자도 일치해야합니다.
*/
public class Hello {

/*   
public: 외부에서 이 메소드는 아무런 제약없이 호출할 수 있습니다.
static: 객체를 생성하지 않고도 메모리할당이 이루어져
        사용할 수 있습니다.
void  : 이 메소드는 호출된후 처리결과를 리턴하지 않습니다.
        int, float, String등 각 타입이 가능 
main  : JVM에 의해서 최초로 자동으로 호출되는 메소드입니다.
        반드시 한개만 존재해야 합니다.
String[]: 문자열을 저장할 수 있는 배열을 의미합니다. 1차원 배열
args  : 배열명입니다. 도스상에서 입력한 인수를 가져옵니다.
*/
    public static void main(String[] args) {
//System.out.println("AAA"): 화면에 AAA문자열을 출력합니다.
//    문자열은 반드시 Double Quotation Mark로 감싸주어야 합니다.
//System.out.println(10): 화면에 숫자 10이 출력합니다.
//";"은 명령의 종결을 표시합니다.
        System.out.println("안녕하세요.!!!");
        System.out.println(10);
    } //중괄호, 중괄호는 열린 갯수만큼 닫혀야합니다.
}
//중괄호안에 들어가는 코드는 일반적으로 4자정도의 들여쓰기를
//합니다.


// 단일행 주석

/*
  여러행 주석1
  여러행 주석2
 */
 
/**
 * Documentation 주석
 */



  
 

▩ 식별자
   - 클래스, 메소드, 변수 이름
   - 이름 자체로 어느정도 내용이 식별이 되어야 합니다.

1. 클래스 이름
   - 첫자는 대문자가 아니어도 에러는 발생이 안되나 일반적으로 첫자는 대문자를 이용합니다.
     또한 마디마다 대문자를 이용합니다.

     Hello, HelloWorld, CompanyName, Company_name

   - 스칼라 기법을 이용합니다.



 

2. 메소드명
   - 첫자는 일반적으로 소문자로 시작합니다.
   - 메소드의 마디는 대문자를 이용합니다.

     println(), printName(), print_name()




3. 변수의 작성 규칙
   - int kuk = 10; 이라고 선언 했을 경우 kuk는 변수가 됩니다. 또한 식별자로 포함이 됩니다.
   - String name="왕눈이"; 이런 경우는 객체변수에 해당이 됩니다.
   - 알파벳, 대소문자, 숫자, _, $만 이용
   - 첫 문자가 숫자이면 안됨
   - 대소문자 완벽히 구별(파일명, 폴더 모두 해당)
   - 키워드(예약어)와 같으면 안됨
   - 길이 제한 없음(변수, 메소드명은 5자 ~ 15자  안팎)
   - 이름만 보고 알아 볼수 있도록 의미 부여
   - 스칼라 표기법: 무조건 단어의 첫자를 대문자를 사용합니다.
   - 헝가리안 표기법: 단어의 약자를 추출하여 이용합니다.  CompanyName --> CN
  
   예) 권장되는 변수명 : companyName, i_kuk, jumsu_kuk, jumsu_eng, jumsu = _jumsu
    




▩ 데이터 형
   - CPU와 메모리의 한계 때문에 데이터타입은 정확하게 지정해야 합니다.

1. 논리형
   - boolean: 1 Byte(8 Bit)
   - 초기값 : false
   - 갖을 수 있는 값의 범위:true, false
   - 조건문에서 조건이 참/거짓인지 판별하는 기준으로 쓰입니다.
  
     boolean bo=true;




2. 문자형
   - char: 2 Byte(16 Bit)
   - 초기값 : \u0000
   - 범위: \u0000 ~ \uFFFF(Unicode 0~65535)
 
     char grade = 'A';



3. 정수 숫자형(음의 정수, 양의 정수)

※ 2진수의 원리

  

※ 음수의 원리(반도체에서의 양수/음수의 원리)
   - 1의 보수
   - 부호화 절대치
   - 2의 보수


   - byte: 1 Byte
   - 초기값: 0
   - 값의 범위: -128 ~ 127, -2^7 ~ 2^7-1

   1 Byte: 8Bit

   1 Bit: 2가지 표현, 0, 1
   2 Bit: 4가지 표현, (0,0), (0,1), (1,0), (1,1)
   3 Bit: 8가지 표현, (0,0), (0,1), (1,0), (1,1) ...
   4 Bit: 16가지 표현, (0,0), (0,1), (1,0), (1,1) ...
   5 Bit: 32가지 표현, (0,0), (0,1), (1,0), (1,1) ...
   6 Bit: 64가지 표현, (0,0), (0,1), (1,0), (1,1) ...
   7 Bit: 128가지 표현, (0,0), (0,1), (1,0), (1,1) ...
   8 Bit: 256가지 표현, (0,0), (0,1), (1,0), (1,1) ...

   256b ---> 128 ~ 128 ---> -128 ~ +128 ---> -128 ~ +127
  

>>>>> ByteTest.java
/*
 * byte는 8bit
 * -128 ~ +127
 * */

public class ByteTest {

    public static void main(String[] args) {
        byte b = 127;
        //byte b1 = 128; //ERROR
        byte b2 = -128;
        //byte b3 = -129;
       
        System.out.println(b);
        System.out.println(b2);
    }
}




   - short: 2 Byte
   - 초기값: 0
   - 값의 범위: -32768 ~ 32767, -2^15 ~ 2^15-1
  


   - int: 4 Byte
   - 초기값: 0
   - 값의 범위: -2147483648 ~ +2147483647, -2^31 ~ 2^31-1


   - long: 8 Byte
   - 초기값: 0
   - 값의 범위: -2^61 ~ 2^61-1




4. 실수 숫자형
   - float: 4 Byte
   - 초기값: 0.0
   - -1.40e-45 ~ +3.40e+38

   - double: 8 Byte
   - 초기값: 0.0
   - 값의 범위: -4.94e-324 ~ 1.79e+308


>>>>> Silsu.java
public class Silsu {

 public static void main(String[] args) {
      //실수는 기본적으로 double로 인식됩니다.
      //float f = 10.5;
        float f = 10.5f;
        System.out.println("실수 출력:"+f);
       
        double d = 10.5;
        System.out.println("더블형 실수 출력:"+d);
 }
}



▶ 변수, 상수 실습
   - System.out.println()메소드는 기본적으로 10진수로 출력합니다.
   - 출력의 연결은 '+'기호를 사용합니다.

>>>>> Integer_Test.java
public class Integer_Test {
       public static void main(String args[]) {
          System.out.println("정수형 상수 예제");
          System.out.println("10진수 26 10진수로: " + 26);
          System.out.println("8진수 26 10진수로: " + 026);    //숫자0은 8진수
          System.out.println("16진수 AB는 10진수로: " + 0xAB);  //0x 16진수
       }
}




>>>>> Float_Test.java
public class Float_Test {
   public static void main(String args[]) {
      System.out.println("실수형 상수 예제");
      System.out.println("양 실수 12.345: " + 12.345);
      System.out.println("음 실수 -12.345: " + -12.345);
     
      //12.34E3 == 12.34E+3 == 12.34 * 1000
      System.out.println("지수 표현 12.34E3: " + 12.34E3);

      //12.34E-3 == 12.34E-3 == 12.34 / 1000
      System.out.println("지수 표현 12.34E-3: " + 12.34E-3);
   }
}




>>>>> String_Test.java
public class String_Test {
   public static void main(String args[]) {
      String str1 = "My Name is ";
      String str2 = "강";
      String str3 = "남";
      String str4 = "it";

      System.out.println("문자열형 상수 예제");
      System.out.println("-------------------------");
      System.out.println(str1 + str2 + str3 + str4 + 100 + 200);
   }
}




>>>>> Variable_Test.java
public class Variable_Test {
   public static void main(String args[]) {
      int i = 1234;
      int j = 5678;
      int hap = 0;

      hap = i + j;
     
      //200 = i + j;
     
      System.out.println("변수를 이용한 예제");
      System.out.println("i = " + i);
      System.out.println("j = " + j);
      System.out.println("hap = :" + hap);
     
     
      /*
      CPU                  Stack
     
      ALU <----┬---- int i=1234; <-┐
                     └---- int j=5678;    │
                                                 │
      i+j --------------------------┘
                                     6912       
                    
      */

      i = i + j;
      System.out.println("i = i + j => " + i);
   }
}





▩ 형변환
   - 작은 타입의 데이터형은 큰 타입의 데이터형으로 아무런 작업 없이 변환할 수 있습니다.
   - 큰 타입의 데이터형을 작은 타입의 데이터형으로 변환할시에는 캐스트 연산자를 써서 형변환을

      해야합니다.
   - Casting시에는 데이터 짤림이 발생하는지 확인해야 합니다. 데이터 짤림이 발생하면 캐스팅은

      피해야 합니다.
   - 실수를 정수로 바꾸는 경우에 주로 사용합니다.

>>>>> Cast_Test.java
public class Cast_Test {
       public static void main(String args[]) {
          int i = 1234;
          int k;
          float f = 10.5f;
          double d = 100.55;
         
          // k = f;  k는 정수만 저장함으로 ERROR
          k = (int)f;  //작은 타입 = (작은 타입)큰타입
          System.out.println(k); //10
         
          f = i;  //실수형 = 정수형 f = 1234
         
          System.out.println(f); //1234.0
         
          f = (float)d;
          System.out.println(f); //100.55         
       }
    }




public class Cast_Test2 {
    public static void main(String[] args) {
                        //MSB             LSB
                        //3       2       1
                        //18765432187654321
                        //----------------- 
        byte  b = 100;  //         01100100 8비트 필요
        short s = 300;  // 0000000100101100 16비트로 필요
        int   i = 70000;//10001000101110000 24비트가 필요
       
        //                         32+8+4=44
        b = (byte)s;    //00000001/00101100
        System.out.println("b=" + b);

    }

}




▩ 연산자
   
1. 산술(수치) 연산자 : +, -, *, /, %
   - 정수/정수 = 정수
   - float n = 0.0f; f를 제거하면 double 8바이트가 됩니다.

>>>>> Arithmetic.java
public class Arithmetic {
   public static void main(String args[]) {
      int i = 20;
      int j = 12;

      int a = i + j;
      int b = i - j;
      int c = i * j;
      int d = i / j;
      int e = i % j;
      float n = 0.0f;

      System.out.println("i : " + i + "j : " + j);
      System.out.println("덧셈 결과 : " + a);
      System.out.println("뺄셈 결과 : " + b);
      System.out.println("곱셈 결과 : " + c);
      System.out.println("나눗셈 결과 : " + d);
      System.out.println("나머지 결과 : " + e);
     
      n = i/j;
      System.out.println("정수/정수의 결과:" + n);
   }
}




2. 대입 연산자 : =
   - 좌변은 상수값이 아니라 기억장소가 와야합니다.
     a = i + j;
     b = 10 + 20;
     100 = i + 10;



3. 연산후대입 연산자 : +=, -=, *=, /=, %=
   - 처리속도 향상

>>>>> Proportion.java
public class Proportion {
   public static void main(String args[]) {
      int i = 12;
      int j = 27;

      System.out.println("i : " + i + ", j : " + j);
      System.out.println("---------------");

      i += j; //i=i + j;
      System.out.println("i+=j : " + i);

      i -= j; //i=i - j;
      System.out.println("i-=j : " + i);

      i *= j; //i=i * j;
      System.out.println("i*=j : " + i);

      i /= j; //i=i / j;
      System.out.println("i/=j : " + i);

      i%=j; //i=i % j;
      System.out.println("i%=j : " + i);
   }
}




4. 증가/감소 연산자 : ++, --
   - 알아보기 쉽게 코딩하는 것이 필요합니다.

>>>>> IncDec.java
public class IncDec{
      public static void main(String args[]){
          int x=1;
          int y = x++; //후위 연산자  
          // y = x;
          // x = x + 1;

          System.out.println("x의 값은" + x); //2
          System.out.println("y의 값은" + y); //1
       
          x=1;           
          int z=++x; //전위 연산자
          //x = x + 1;
          //z = x;     
       
         System.out.println("x의 값은" + x); //2
         System.out.println("z의 값은" + z); //2
        
         x=1;
         x++; //++x;
         z=x;
         System.out.println("-----------------------");         
         System.out.println("x의 값은" + x); //2
         System.out.println("z의 값은" + z); //2
        
      }
}




>>>>> IncDec2.java
public class IncDec2{
      public static void main(String args[]){
          int x=1;
          int y = x--; //후위 연산자  
          // y = x;
          // x = x + 1;

          System.out.println("x의 값은" + x); //2
          System.out.println("y의 값은" + y); //1
       
          x=1;           
          int z=--x; //전위 연산자
          //x = x + 1;
          //z = x;     
       
         System.out.println("x의 값은" + x); //2
         System.out.println("z의 값은" + z); //2
        
      }
}




5. 관계(비교) 연산자 : <, <=, >=, >, ==, !=, instanceof

>>>>> Compare.java
public class Compare {
   public static void main(String args[]) {
      int i = 12;
      int j = 23;
      int k = 17;
      String name="왕눈이";

      System.out.println("변수 i는 " + i + ", 변수 j는 " + j + ", 변수 k는" + k + "이다.");
      System.out.println("-------------------");
      System.out.println("12==23 : " + (i==j));
      System.out.println("12!=17 : " + (i!=k));
      System.out.println("23<17  : " + (j<k));
      System.out.println("k>i : " + (k>i));
      System.out.println("i<=k : " + (i<=k));
      System.out.println("i>=j : " + (i>=j));
     
      System.out.println(name instanceof String);
    //System.out.println(i instanceof int);     
   }
}




6. 비트연산자
   - byte 0 ~ 255까지 출력하기

>>>>> Bitwise.java
//>>> 무조건 0이 채워지는 shift연산만 이루어짐
class Bitwise {
      public static void main(String args[]) {
        int a = 2;
        int b = 5;
       
        int c = a | b; //or
        //2진수 연산
     
        // ....8421 
        // 00000010
        //+00000101
        //--------- 
        // 00000111--> 7
       
        int d = a & b; //and
        // 00000010
        //+00000101
        //--------- 
        // 00000000--> 0
       
       
        int e = a ^ b; //Exclusive or
        // 00000010
        //+00000101
        //--------- 
        // 00000111--> 7
       
       
        int i; int j;
        i = a << 2;    //좌 shift 연산
        // ....8421 
        // 00000010
        // 00001000 --> 8
       
       
        j = b >> 2;    //우 shift 연산
        // ....8421 
        // 00000101
        // 00000001 --> 1
       

        System.out.println("        a = " + a);
        System.out.println("        b = " + b);
        System.out.println("      a|b = " + c);
        System.out.println("      a&b = " + d);
        System.out.println("      a^b = " + e);
        System.out.println("     a<<2 = " + i);
        System.out.println("     b>>2 = " + j);
      }
    }




7. 논리연산자(조건 연산자)
   - 조건문과 함께 많이 사용됨
   - &&: 양쪽의 조건이 전부 맞아야 참입니다.
   - ||: 어느 한쪽만 참이면 참입니다.




8. 삼항 연산자

>>>>> Ternary.java
class Ternary
{
    public static void main(String args[])
    {
        int x = 10;
        int y;
       
        //System.out.println("결과는 " + y);

        //System.out.println("초기화되지 않은 y의 값: " + y);
        //y = 조건문 ? 참값 : 거짓값
        y = x < 9 ? 3 : 5;
       System.out.println("결과는 " + y);
    }
}