Home [Java 프로그래밍] 2강 - JAVA 기본 문법
Post
Cancel

[Java 프로그래밍] 2강 - JAVA 기본 문법

💡해당 게시글은 방송통신대학교 김희천 교수님의 'Java 프로그래밍' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • java 언어의 기본 문법과 기본 자료형을 숙지하며 리터럴 사용 방법 익힘
  • 자료형 변환에서 묵시적 변환과 명시적 변환의 차이를 이해
  • 연산자 종류와 각 연산자의 기능 이해
  • 변수의 종류를 용도 별로 구분
  • 선택문과 반복문의 사용 방법 확인



학습 목표


  • java의 기본 자료형 나열 가능
  • 변수의 종류를 나열하고 용도의 차이 설명 가능
  • 연산자의 종류를 나열하고 기능 설명 가능
  • 제어문의 종류와 기능 설명 가능



강의록


Java 프로그램과 기본 사항

Java 프로그램의 작성

  • 성적 처리 프로그램 1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
      class Grade {
          int e; //영어 성적을 위한 변수
          int m; //수학 성적을 위한 변수
    
          void input_grade(int a, int b)
          {
              e = a; //영어 성적 입력
              m = b; //수학 성적 입력
          }
    
          void output_grade() { // 성적의 합을 출력
              System.out.println(e+m);
          }
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      public class GradeOutput {
          public static void main(String args[]) {
              Grade g1, g2; // 성적을 표현하는 객체
              g1 = new Grade(); // 객체 생성
              g2 = new Grade();
                
              g1.input_grade(90, 85); // 점수 입력
              g2.input_grade(80, 80);
                
              g1.output_grade(); // 점수 출력
              g2.output_grade();
          }
      }
    
  • 성적 처리 프로그램 2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
      public class GradeOutput2 {
          int e; // 영어 성적을 위한 변수
          int m; // 수학 성적을 위한 변수
    
          void input_grade(int a, int b) {
              e = a; // 영어 성적을 입력
              m = b; // 수학 성적을 입력
          }
    
          void output_grade() { // 성적의 합을 출력
              System.out.println(e + m);
          }
    
          public static void main(String args[]) {
              GradeOutput2 g1, g2; // 2명의 성적을 표현
              g1 = new GradeOutput2(); // 객체 생성
              g2 = new GradeOutput2();
    
              g1.input_grade(90, 85); // 점수 입력
              g2.input_grade(80, 80);
    
              g1.output_grade(); // 점수 출력
              g2.output_grade();
          }
      }
    

식별자

  • 프로그래머가 작명하는 이름
  • 클래스, 변수, 메소드. 레이블 등의 이름

    1
    2
    3
    4
    5
    6
    7
    
      public class HelloApplication {
          static String szMsg = "Hello, Java!";
          public static void main(String args[]) {
              int nTest = 0;
              System.out.println(szMsg);
          }
      }
    
  • 식별자 작명 규칙
    • 대소문자 구분
    • 길이에 제한 없음
    • 영 대소문자, 한글, 숫자, _, $ 사용
    • 숫자로 시작할 수 없음
    • 키워드, 예약어(true, false, null) 불가
    • ex) 2002WorldCup, my#class, class, World Cup, lee@knou
  • 식별자를 만들 때의 관례
    • 클래스
      • 첫 자는 대문자, 단어의 첫 글자는 대문자, 나머지는 소문자
      • ex) Car, HelloWorld, MyClass, String
    • 메소드, 변수(필드)
      • 위와 같으나 첫 글자가 소문자
      • ex) speed, myCar, gearArea()
    • 상수
      • 모든 문자를 대문자로 표기하고 단어 사이에 _ 넣어 구분

        1
        
          static final int NUM_GEARS = 6;
        
    • 변수
      • 자료형을 표시하기 위한 접두어를 붙이기도 함

        1
        
          int nSpeed;
        
        1
        
          String szStr1;
        

키워드

  • 키워드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
      abstract
      assert
      boolean
      break
      byte
      case
      catch
      char
      class
      const
      continue
      default
      do
      double
      else
      enum
      extends
      final
      finally
      float
      goto
      if
      implements
      import
      instanceof
      int
      interface
      long
      native
      new
      package
      private
      protected
      public
      return
      short
      static
      strictfp
      super
      switch
      synchronized
      this
      throw
      throws
      transient
      try
      void
      volitile
      while
    
    • 의미가 미리 정해진 단어
    • 프로그램에서 정해진 의미로만 사용해야 함

자료형

변수의 종류와 자료형

  • 변수와 자료형
    • 변수를 선언할 때, 저장되는 값의 자료형 선언

      1
      
        int i;
      
    • 메소드 선언 시, 파라미터와 반환 값의 자료형 선언
      • 함수에서 반환하는 값이 없을 경우 void사용
    • 자료형에 따라 적용 가능한 연산이 다름
      • ex) 1 + 3 → 숫자 계산
      • ex) “a” + “bcd” → 문자열 합치기
  • 변수의 종류
    • 데이터 필드
      • 인스턴스 변수
        • 클래스 정의에서 non-static이 아닌 필드
        • 개별 객체가 소유하는 변수
      • 클래스 변수
        • 클래스 정의에서 static 필드
        • 동종 객체 간 공유 변수(정적 변수)
    • 지역 변수
      • 메소드 내부 또는 블록 내부에서 선언된 변수
    • 파라미터
      • 메소드 호출 시 전달하는 값 저장하기 위한 변수
      • 인자, 매개변수
        • ex) args

변수의 사용 범위

  • 지역 변수와 파라미터
    • 선언된 곳부터 해당 블록이 종료될 때까지 유효함
      • 메소드가 실행될 때 만들어지고 끝나면 없어짐
    • 지역 변수는 초기 값 지정 후 사용
    • 지역 변수 선언에서 접근 제어자를 사용하지 않음
  • 데이터 필드(인스턴스 변수 or 클래스 변수)
    • 선언된 클래스 내부에서 사용 가능
    • 클래스 외부에서의 사용 가능 여부는 접근 제어자(access modifier)에 따라 다름

      1
      2
      3
      
        class Circle { 
            protected int radius;
        }
      

Java의 기본 자료형과 키워드

  • Java의 기본 자료형과 키워드

    분류키워드길이 (byte)값의 범위
    문자char2\u0000~ \uFFFF
    논리boolean1true 또는 false
    정수byte1-128 ~ 127
    정수short2-32768 ~ 32767
    정수int4-2^31 ~ 2^31-1
    정수long8-2^63 ~ 2^63-1
    실수float4(+/-) 약 1.4E-45 ~ 3.4E38
    실수double8(+/-) 약 4.9E-324 ~ 1.8E308

리터럴

  • 상수
    • 값이 한번 할당되면, 값을 변경할 수 없는 변수

      1
      
         final int nConst = 3; //선언시 초기 값 지정
      
  • 리터럴
    • 소스 코드에서 사용되는 실제 데이터 값
  • 정수형 리터럴
    • byte, short, int 또는 long형의 실제 값
    • 소문자 l이나 대문자L로 끝나면 long형, 나머지는 int
      • byte와 short는 허용 범위 안에서 int와 호환
      • ex) 26L, 26, 0b11010(2진수), 032(8진수), 0x1a(16진수)
  • 실수형 리터럴
    • 소수점이 있는 숫자
    • f나 F로 끝나면 float형, 나머지는 double형
      • ex) 123.4f, 123.4, 1.234e2
  • 문자형 리터럴
    • 1개의 문자를 표현하고 16비트 UNICODE로 인코딩됨
    • 단일 따옴표를 사용하고 Unicode 사용 가능
      • 1개 문자는 (0~65536)의 수와 호환됨
      • ex) ‘\u0000’~ ‘\uFFFF’
    • ex) (char)65 = ‘A’ = ‘\u0041’
    • ex) ‘가’ = ‘\uAC00’

참조형

  • 기본형을 제외한 모든 자료형
    • 참조 값(주소 값)을 가지는 자료형
  • 참조형 변수는 객체를 가리키는 변수로 객체의 주소 값(참조 값)을 저장함
    • 실제 객체는 동적 메모리 공간에 저장됨
    • 기본형 변수는 저장 공간에 값 자체를 저장
  • 대표적 참조형은 배열, 클래스, 인터페이스, 열거형 등

    image.png

    1
    2
    3
    
      int anArray[];
      Circle myCircle;
      String szStr;
    

자료형의 변환(형변환)

  • 묵시적 자료형의 변환
    • 작은 타입에서 큰 타입으로는 자동 형변환
      • byte → short → int → long → float → double
      • 개발자 → 직원 → 인간 → 포유류
      1
      2
      
        double d = 5; // 대입문
        // 5.0 자동 형변환 되어 대입
      
      1
      2
      
        System.out.println("j=" + 10); // 수식
        // 숫자 10이 문자열 10으로 자동 형변환
      
      1
      2
      
        double res = Math.sqrt(2); // 메소드 호출 시 인자의 유형
        // 2.0으로 자동 형변환
      
  • 명시적 자료형의 변환
    • 큰 타입에서 작은 타입으로 변환할 때 명시적 형변환 필요
    • 강제적 형변환
    • 문법 : (자료형)피연산자

      1
      
        float f = (float)5.5; // double형 실수 float형 실수로 명시적 형변환
      

연산자와 제어 문

연산자

  • 특정 연산을 수행하기 위한 기호
  • 연산자는 우선 순위가 있으며, 적용 방향이 있음

연산자의 종류

  • 연산자의 종류

    구분연산자 예
    산술연산자+-*/%단항연산자 +-++--
    비교연산자>=~<===!=instanceof
    논리연산자&&\|\|단항 !삼항 ?:&\|^
    비트연산자비트논리 &\|^~비트이동 <<>>>>>
    대입연산자+=-=*=/=%=&=^=\|=>>=<<=>>>=
    형변환연산자(자료형)
    기타[]().

명령 행 매개변수

명령 행 매개 변수

  • 프로그램을 실행할 때 전달하는 인자
  • main()함수에 전달되는 인자
  • 문자열로 전달됨

    1
    
      java CommandInputTest Kim 123
    
    1
    2
    3
    4
    5
    6
    7
    
      public class CommandInputTest {
          public static void main(String args[]) { // 매개변수 빈칸으로 구분
              System.out.println(args[0]);
              int n = Integer.parseInt(args[1]); // 문자열을 integer 형식으로 변환
              System.out.println(n);
          }
      }
    
    1
    2
    3
    4
    5
    
      public class Main {
          public static void main(String args[]) {
              System.out.println(args[0] + ", " + args[1]);
          }
      }
    

문장의 종류

  • 수식 문
    • 수식은 변수, 연산자, 함수 호출 등으로 구성되며, 결과 값을 계산함
    • 대입문, 증가문, 함수 호출문, 객체 생성문 등

      1
      
        a = b; // b의 값을 a에 대입
      
      1
      
        a++;
      
  • 변수 선언문
  • 제어 문
    • 선택문, 반복문, 점프문
    • 실행의 흐름 제어
  • 기타
    • 블록문
      • 여러 문장을 중괄호로 묶은 것
      • {}
    • 레이블문
      • 레이블:문장
    • 예외처리문
      • try-catch
    • 동기화문
      • synchronized

제어 문

  • 프로그램의 실행은 기본적으로 위에서 아래로 순차 실행
  • 제어 문은 실행 흐름을 바꿈
  • 제어 문의 종류
    • 선택 문
      • 조건에 따른 문장의 선택
      • if문, switch
    • 반복문
      • 조건에 따른 문장의 반복
      • for문, while문, do-while
    • 점프 문
      • 분기 문
      • return문, break문, continue

선택 문

  • if
    • if (boolean-수식) 문장
  • if-else
    • if (boolean-수식) 문장 else 문장
  • if와 else의 짝짓기

    1
    2
    3
    4
    5
    6
    7
    8
    
      int a = 2;
      int b = 2;
        
      if (a == 1)
      	if (b == 2)
      		System.out.println("a was 1 and b was 2.");
      else // if (b == 2)와 짝지어진 else문
      	System.out.println("a wasn't 1.");
    
    • else는 자기 짝이 없는 가장 가까운 if와 짝을 이룸
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
      public class IfElse {
          public static void main(String args[]) {
              int a = 2;
              int b = 2;
        
              if (a == 1) {
                  if (b == 2) {
                      System.out.println("a was 1 and b was 2.");
                  }
              } else { // if (b == 2)와 짝지어진 else문
                  System.out.println("a wasn't 1.");
              }
          }
      }
    
  • switch

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      switch(n) {
          case 10 :
              System.out.println("10입니다.");
              break;
          case 20 :
          case 30:
              System.out.println("20이거나 30입니다.");
              break;
          default:
              System.out.println("모르겠습니다.");
              break;
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
      public class SwitchTest {
          public static void main(String[] args) {
              int n = 20;
              switch(n) {
                  case 10 :
                      System.out.println("10입니다.");
                      break;
                  case 20 :
                  case 30:
                      System.out.println("20이거나 30입니다.");
                      break;
                  default:
                      System.out.println("모르겠습니다.");
                      break;
              }
          }
      }
    
    • 다중 선택 구조
    • case조건은 정수(long형 제외)와 호환되거나 String
    • default는 생략 가능하며, 어떤 case에도 해당되지 않은 경우 매칭됨
    • 만족되는 case를 실행한 후, break문 만날 때까지 계속 실행

반복 문

  • for-each

    1
    2
    3
    4
    5
    
      int[] array0fInts = {32, 87, 3, 589, 12, 1076, 2000, 8};
      for (int element : array0fInts) {
      	System.out.print(element + " ");
      }
      System.out.println(array0fInts);
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      public class ForEachTest {
          public static void main(String[] args) {
              int[] array0fInts = {32, 87, 3, 589, 12, 1076, 2000, 8};
              for (int element : array0fInts) {
                  System.out.print(element + " ");
              }
              System.out.println(array0fInts.length); // 32 87 3 589 12 1076 2000 8
          }
      }
    
    • 개선된 for
    • 배열이나 컬렉션의 원소들을 차례로 다룰 때 편리
    • 형식 : for( 변수선언 : 배열 ) { 문장 … }

점프 문

  • break
    • break문을 포함하는 가장 가까운 switch문, for문, while문, do-while의 실행을 끝냄
      • 반복문이나 switch문을 빠져나갈 때 사용
    • 형식 : break;
    • 레이블을 사용하면 특정 블록 또는 특정 반복문을 빠져나갈 수 있음
      • 중첩 for문에서 바깥 for문을 종료하는 경우
      • 형식 : break 레이블;
        • 반복문에 레이블을 지정하려면 레이블: 반복문
  • continue
    • 반복문 안에서 사용함
    • 가장 가까이 있는 반복문의 다음 반복을 위한 조건 식으로 즉시 제어를 이동하기 위한 것
    • 형식 : continue;
    • 레이블을 사용하여 특정 반복문의 다음 반복으로 이동할 수 있음

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
        public class Main {
            public static void main(String args[]) {
                int nSum = 0;
                my_loop: for (int i = 1; i <= 10; i++) {
                    if (i % 2 == 0)
                        continue my_loop;
                    nSum += i;
                }
                System.out.println(nSum);
            }   
        }
      
      • 중첩 for문에서 바깥 for문의 다음 반복으로 갈 때
      • 형식 : continue 레이블;형식
  • return
    • 함수 실행 끝날 때 사용
    • 형식 : return;
      • 함수 리턴 값이 존재하지 않을 경우
    • return 자료형값;
      • 함수 리턴 값이 존재할 경우



학습 정리


  • java의 기본형을 나타내는 키워드는 byte, short, int, long, float, double, char, boolean 8가지임
  • 변수의 종류로는 인스턴스 변수, 클래스 변수, 지역 변수, 파라미터가 있음
  • 인스턴스 변수는 객체가 소유하는 변수이며, 클래스 변수는 해당 클래스의 객체들이 공유하는 변수
  • 클래스와 배열은 대표적인 참조형으로 ,참조형 변수에는 참조 값(주소 값)이 저장
  • 명령형 매개 변수란 main()함수에 전달되는 인자로서, 프로그램을 실행시킬 때 클래스 이름 뒤에 나열하는 인자를 말함
  • 제어문은 프로그램의 실행 흐름을 제어하는 문장
  • break문, continue문, return문은 제어문 중 점프 문(분기 문)에 해당



연습 문제


  1. 다음 중 클래스 이름에 해당하지 않는 것은?

    a. boolean

    • 클래스 이름
      • Integer
      • String
      • System
  2. 다음 정수 리터럴 중 값이 다른 하나는 무엇인가?

    a. 0b0000_1010

    • 2진수 10을 의미하는 정수 리터럴, 2진수 10은 10진수 2
    • 모두 10진수 10을 의미하는 정수 리터럴
      • 10
      • 00001010
      • 0x0A
  3. 위의 for문을 향상된 for문을 이용해 다시 작성하여라.

    1
    2
    3
    
     int[] a = {32, 87, 3, 589, 12 }; 
     for (int i = 0; i < a.length; i++)   
         System.out.print( a[i] + " " );
    

    a. 답

    1
    2
    3
    4
    
     int[] a = {32, 87, 3, 589, 12 }; 
     for (int element : a) { 
         System.out.print( element + " " );
     }
    

[운영 체제] 1강 - 운영 체제 소개

[파이썬 프로그래밍 기초] 2강 - 컴퓨터의 구성