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

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

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



학습 목차


  1. 배열
  2. 문자열
  3. Scanner 클래스와 입출력
  4. 클래스 정의

학습 개요


  • 같은 유형의 자료 집단을 표현하기 위한 배열의 사용 방법을 살펴봄
  • 문자열을 다룰 때 사용하는 String 클래스의 기본 사항을 알아보고 문자열과 관련된 형변환을 학습
  • 프로그램에서 키보드나 파일로부터 데이터를 입력받는 방법을 학습하고 클래스 정의 문법 확인

학습 목표


  1. 프로그램에서 배열을 선언하고 사용 가능
  2. 문자열의 덧셈 연산과 형변환을 이해
  3. 간단한 입출력 기능을 프로그램에 추가 가능
  4. 클래스 정의 문법 기억



1. 배열


1-1. 배열

  • 같은 자료형의 원소를 정해진 개수만큼 가지고 있는 객체 (원소들의 묶음)
  • 배열의 크기는 선언할 때가 아닌 배열이 초기화 또는 생성될 때 정해짐
  • 숫자 인덱스(첨자) 사용해 특정 원소를 다룸
  • 배열의 선언
    • 선언할 때 크기 지정 불가
    • 형식
      • 자료형[ ] 변수이름;
      • 자료형 변수이름[ ];
        ex) int[ ] a; int b[ ]; // 1차형 배열
        ex) int[ ][ ] c; int d[ ][ ]; int[ ] e[ ]; // 2차형 배열
        ex) int f[10]; // 오류
  • 대표적인 참조형(클래스, 인터페이스, 배열)
    • 배열 원소에 대한 주소값만 가지고 있음
    • 실제 데이터가 들어갈 공간 할당 받아 사용

1-2. 배열의 초기화

  • 선언과 동시에 중괄호 이용해 초기 값 지정
    • 자동으로 메모리 공간 확보
    • 초기화 또는 생성 과정 거쳐야 배열의 원소 사용 가능
      ex) int a[] = {2, 3, 5, 7, 11}; // 선언과 동시에 초기화 image
      ex) int anArray[][] = { {1, 2, 3}, {4, 5, 6} };
      ex) int b[]; b = {4, 5, 6}; // 오류

1-3. 배열의 생성

  • 배열의 원소가 사용할 메모리 공간 생성
    • new 연산자 이용
      • 배열의 크기 정하고 메모리 공간 확보
      • new 연산자는 메모리의 주소값 리턴
      • 원소가 숫자인 경우 0, 참조형인 경우 null로 자동 초기화
        ex) int a[ ] = newint[3]; //선언과 생성
        ex) int b[ ]; b = newint[10];
        ex) int anArray4[ ][ ] = newint[3][2];

1-4. 배열의 크기

  • 배열은 크기를 가지는 내장 속성 length 가지고 있음
    1
    2
    3
    4
    5
    6
    7
    8
    
      public class ArrayTest {
          public static void main(String args[ ]) {
              int twoArray[ ][ ] = { {0, 1}, {10, 11, 12} }; // 선언과 동시에 초기화
              for(int i = 0; i < twoArray.length; i++)
                  for(int j = 0; j < twoArray[i].length; j++)
              System.out.println(twoArray[i][j]);
          }
      }
    

    image
    - 배열이름.length



2. 문자열


2-1. String 클래스

  • String 클래스는 문자열을 표현하고 처리하기 위한 참조형
  • String형의 변수는 참조형이나 기본형 변수처럼 사용 가능
    • 참조형 변수는 선언 후 new 연산자 이용해 실제 데이터 들어갈 공간 할당 받아 써야함
  • 문자열 리터럴
    • 이중 따옴표를 사용
      ex) String s1 = “Java”; // 기본형 변수처럼 사용 가능
      ex) String s2 = new String(”Java”); // 생성자 사용
    • 참조형 변수에는 null이라는 특별한 값 지정 가능
      • if (s1 != null ) { … }

2-2. 문자열의 + 연산자

  • 두 문자열을 연결하는 것
  • (문자열 + 기본형) or (문자열 + 다른 참조형)도 가능
    • + 연산자 사용 시 기본형 또는 다른 참조형 값은 문자열로 자동 형변환 가능
  • print()println()에서 자주 사용
    • 1개 매개변수를 문자열로 바꿔 출력함
    • System.out은 화면 출력을 위한 객체
      1
      2
      3
      
        System.out.println("result=" + " " + result);
        System.out.println('A'+ 0); //65
        System.out.println("A" + 0); 
      



3. Scanner 클래스와 입출력


3-1. Scanner 클래스

  • 키보드(표준 입력)나 파일로부터 다양한 자료 입력 받을 때 사용
    • 기본적으로 공백 문자로 구분되는 단어 단위로 입력
    • 문자열이나 기본형 값의 입력 위해 nextXXX( ) 입력 메소드 제공
      ex) next() // 단어 입력
      ex) nextInt() // 단어 int 값으로 해석
  • 클래스에 관한 API 설명 페이지
  • 키보드에서 입력을 받는 Scanner 객체
    • System.in 이용해 Scanner 객체 만들고 사용
      1
      2
      
        Scanner sc = new Scanner(System.in); // 인자로 표준 입력 이용해 객체 생성
        String name = sc.next(); // 객체 변수로 단어 입력 받음
      

3-2. Scanner 클래스를 사용한 입력

  • Scanner 클래스의 입력용 메소드
    1
    2
    
      Scanner s = new Scanner(System.in);
      String name = s.next();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      import java.util.Scanner;
        
      public class ScannerDemo2{
      	public static void main(String[] args) {
      		Scanner sc = new Scanner(System.in); // scanner 객체 생성
      		while(sc.hasNextInt()) { // 단어 입력 시 검사
      			System.out.println(sc.nextInt());
      		}
      	}
      }
    
    • boolean hasNext()
      • next 수행 전 다음 단어가 있으면 true 반환
    • String next()
      • 단어를 읽어 String으로 반환
    • boolean hasNextInt()
      • next 수행 전 int 값이 있을 경우 true 반환
    • int nextInt()
      • int 값 입력 받음
    • boolean hasNextDouble()
      • next 수행 전 double 값이 있을 경우 true 반환
    • double nextDouble()
      • double 형 입력
    • boolean hasNextLine()
      • next 수행 전 한 문장으로 된 문자열 값이 있을 경우 true 반환
    • String nextLine();
      • 한 문장으로 된 문자열 입력



4. 클래스 정의


4-1. 클래스 정의 문법

  • 클래스 접근 제어자
    • 클래스 사용 시 어디서 접근 가능한지 지정
    • 생략, public, protected, private
  • 클래스 비접근 제어자
    • abstract, final
      • abstract 클래스는 상속 가능, final 클래스는 상속 불가능
  • 클래스 정의 문법
    1
    2
    3
    4
    5
    6
    7
    
      [접근 제어자] class 클래스이름
              [extends 부모클래스이름] [implements 인터페이스 이름]
          { // 클래스 정의
              데이터 필드 선언
              생성자 선언
              메소드 선언
          }
    

4-2. 클래스의 정의와 사용

  • 클래스 정의
    • 데이터 필드와 메소드 정의
      • 객체가 가지는 인스턴스 변수와 인스턴스 메소드
      • 클래스가 가지는 클래스 변수(static 변수, 정적 변수)와 클래스 메소드
    • 객체의 상태는 데이터 필드로, 행위는 메소드로 구현됨
    • 메소드는 저장된 데이터를 이용해 기능 수행
  • 클래스의 사용
    • 클래스형 변수를 선언할 때
      • 클래스는 객체의 자료형
        ex) Circle c;
    • 객체를 생성할 때
      ex) c = new Circle();
      ex) s = new String();
    • 상속받아 클래스를 정의할 때

4-3. 클래스의 접근 제어자

  • 클래스 접근 제어자의 의미
    • 클래스를 사용할 수 있는 범위를 제한하는 것
    • privateprotected는 특별한 경우에만 사용
      • 클래스 내부에 클래스 정의 할 경우 사용
  • 접근 제어자가 생략된 경우와 public class
    • 클래스 선언에서 접근 제어자가 생략된 class
      • 같은 패키지에 있는 다른 클래스에서 사용 가능
      • 패키지 접근 수준
    • public class로 선언된 경우
      • 모든 클래스에서 즉, 어디서나 사용 가능
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        
          class Circle {
          private double r; // 데이터 필드 선언 시에 접근제어자 사용 가능
          // r 은 Circle 클래스 안에서만 사용 가능
          public Circle(double a) { // 메소드 선언 시에 접근제어자 사용 가능
          r = a;
          }
                
          public double getArea() {
              return r * r * 3.14; 
          }
                
          public double getRadius() {
              return r;
          }
          }
        
        1
        2
        3
        4
        5
        6
        7
        8
        
          public class CircleArea2 {
          public static void main(String args[ ]) {
              Circle c = new Circle(5); // CircleArea2와 Circle 클래스가 같은 패키지 안에 있을 경우 사용 가능
              System.out.println(c.r); // private 데이터 필드기 때문에 오류 발생
              System.out.println(c.getRadius());  // r 을 리턴값으로 가지고 있는 getRadius 메소드 호출해 사용
              System.out.println(c.getArea( ));
          }
          }
        

4-4. 데이터 필드의 접근 제어자

  • 클래스 정의에서 데이터 필드나 메소드를 정의할 때도 접근 제어자를 사용
    • 데이터 필드를 사용할 수 있는 범위를 제한하는 것(정보 은닉)
    • 메소드의 접근 제어자도 의미가 같음
  • 데이터 필드 접근 제어자의 의미
    • private 필드는 같은 클래스에서만 사용 가능
    • 접근 제어자가 생략된 필드는 같은 패키지에 있는 다른 클래스에서 사용 가능
    • protected 필드는 같은 패키지와 상속 관계에 있는 자식 클래스에서 사용 가능
    • public 필드는 모든 클래스에서 사용 가능
  • 아래 4개의 클래스에서 Alpha 클래스의 어떤 멤버를 사용할 수 있는가? image



학습 정리


  • 배열은 선언 후에 초기화 과정이나 생성 과정을 거쳐야만 사용 가능
  • 배열이름.length 사용해 배열 크기 표현 가능
  • 문자열 변수나 리터럴에 대해 + 연산을 적용한 결과는 두 문자열이 연결된 문자열
  • Scanner 클래스 이용하면 키보드나 파일로부터 편리하게 문자열(또는 기본형 값)을 입력 받을 수 있음
  • 클래스를 정의할 때, 특별한 경우가 아니면 클래스의 접근 제어자로서 생략과 public만 지정 가능
  • 클래스를 정의할 때, 접근 제어자가 생략된 데이터 필드는 해당 클래스와 같은 패키지의 다른 클래스에서 사용 가능



연습문제


Q1.

1
2
3
// 다음 중 문법적으로 올바른 문장은 무엇인가?

int[ ][ ] c = new int[5][ ];

Q2.

1
2
3
// int형 변수 i와 j의 값을 각각 출력하기 위해 적당한 출력문은 무엇인가?

System.out.println( i + " " + j );

Q3.

1
2
3
4
5
// Alpha 클래스에서 protected 데이터 필드가 정의되었다고 가정할 때, 아래 4개의 클래스 중에서 이 데이터 필드를 사용할 수 없는 클래스는 무엇인가?
// Package One - Alpha, Beta
// Package Two - AlphaSub(Alpha Subclass), Gamma

// Gamma