본문 바로가기
  • 適者生存
WorkOut/정보처리기사

자바 | 자료형, 변수, 배열, 표준 입출력 함수, 문자열, 반복문

by lcrvvxln 2024. 3. 21.

적자생존

 

1. 자바 기본 구조

- Java의 모든 소스코드는 **클래스** 단위로 구성 

- 프로그램 시작은 **public static void main** 부터 

클래스 (Class)

- 객체 지향 관점에서 객체(Object)를 정의하는 틀 
- 객체 지향 프로그래밍 언어의 기본 구조 

- 변수 (Variable)와 메서드(Method)로 구성 
// 자바 기본 코드 

public class Hoxypot{
   public static void main(String[] args){
     System.out.println('Hello');
   }
}

// Hello
  • Hoxypot class 생성 > 클래스 이름이 'Hoxypot' 이면 소스 코드 파일명은 'Hoxypot.java' 
  • 'public static void main' 으로 프로그램 시작
  • println 함수 이용 'Hello' 문자열 출력

 


 

 

2. 자료형 (Data Type)

-  프로그래밍 언어에서 실수, 정수, 자료형 등 여러 종류 데이터 식별하는 형태 

- 메모리 공간의 효율적 사용과 2진수 데이터의 다양한 활용을 위해 사용 

 

(1) 자료형의 유형 

- Java 자료형은 문자형, 정수형, 부동 소수점형, 논리형이 존재 

 

  • 자료형 유형 

1. 문자형 (Character) : 문자 하나 저장, 메모리에는 숫자로 저장됨  - Char

2. 문자열형 (String) : 문자 여러 개 저장 - String

3.  정수형 (Integer) : 정숫값 저장 - byte, short, int, long

4. 부동 소수점형 (Floating Point) : 실숫값 저장 - float, double

5. 논리형 (Logical; Boolean) : 변수의 참/거짓을 표현, true(참) & flase(거짓) 2가지 값 저장 - boolean

 

- 자바 정수형 바이트 크기 

byte : 1byte
short : 2byte
int : 4 byte
long : 8 byte

 


 

3. 변수 (Variable)

- 저장하고자 하는 값이 있을 때, 주기억장치에 저장하기 위한 공간

- Java 변수는 초기화하지 않으면 정수형 0, 실수형 0.0, 문자형 NULL로 초기화 

 

(1) 변수 유효범위 (Variable Scope) 

 

 

[1] 클래스 변수 (Class Variable)

 

- 클래스 변수는 **클래스 블록**에서 선언하는 변수 

- 클래스 시작되면 변수 생성, 종료되면 변수 소멸 

- 클래스 내에서 사용 가능

 

블록 (Block)
- 자바에서 중괄호로 묶은 부분

 

//자바 클래스 변수 

public class Hoxypot{
   int a=5;
   void fn(){
      a=a+3;
   }
   public static void main(String[] args){
      Hoxypot s = new Hoxypot();
      s.a=s.a+5;
      s.fn();
      System.out.println(s.a);
   }
}

// 13
  • Hoxypot 클래스 생성 > 소스코드 파일명 Hoxypot.java
  • 정수형 클래스 변수 a 5 선언
  • Hoxypot 클래스 안에 fn 사용자 정의 함수 선언 > 정수형 클래스 변수 a에 3 더한 값을 a에 대입하는 구조 
  • public static void main 부터 프로그램 시작 
  • s 변수에 Hoxypot 클래스 생성
  • s의 a에는 5가 초깃값으로 들어가 있으므로 s.a=5+5=10 > s.a=10
  • s의 사용자 정의 함수 fn 호출 > a에 10 들어가 있었으므로 s.a=10+3 = 13
  • println 함수에 의해 s.a 출력 > 13

 

[2] 지역 변수 (Local Variable) 

 

- 지역 변수는 **블록 내**에서 선언하는 변수 

- 블록 중괄호 닫히는 시점에 소멸 

- 해당 블록 내에서만 사용 가능 

 

// 자바 지역 변수 

public class Hoxypot{
  public static void main(String[] args){
  
  int a=3;
  System.out.println(a);
  }
}

// 3
  • Hoxypot 클래스 생성 
  • public static void main 부터 프로그램 시작
  • 정수형 지역 변수 a 3 선언
  • println 함수로 a 출력 > 3

 

[3] static 변수 (Static Variable)

 

- static 변수는 선언 시 static 키워드 붙여줘야 함 

- 프로그램 시작 시 변수 생성, 종료 시 소멸

- 프로그램 전체에서 사용 가능

 

// 자바 static 변수 

class Hoxypot{
   static int count=0;
}

public class HoxypotMain{
   public static void main(String[] args){
      Hoxypot s = new Hoxypot();
      
      s.count++;
      System.out.println(s.count);
      
      s.count++;
      System.out.println(s.count);
   }
}

// 1
// 2
  • Hoxypot class 선언 > static 정수형 변수 count 0 생성
  • HoxypotMain class 선언 > 소스 코드 제목은 'HoxypotMain.java'
  • 프로그램은 public static void main부터 시작 
  • Hoxypot 클래스 객체 s 생성 
  • s의 count 변수 1 증가 > 원래 count는 0으로 초기화 되므로 0+1=1
  • println 함수에 의해 s.count 1 출력
  • s count 변수 1 증가 > 1+1=2 > println 함수에 의해 s.count 2 출력 

 

초기화 (ex. int a =3)

: 변수가 어떤 자료형 선언할 때 넣는 값, ** 처음 한 번만 ** 수행 
→ static 변수는 종료 시까지 소멸되지 않으므로 초기화 코드를 여러 번 지날 수 있으나 이 역시, **처음 한 번만** 수행 

 

 


 

4. 배열 (Array)

- 같은 타입의 변수들로 이루어진 집합을 의미

 

(1) 배열 종류 

[1] 1차원 배열

 

  • 1차원 배열 선언

1. 초깃값 없는 경우

: 자료형 [ ]배열명 = new 자료형[배열_요소_개수];

: 자료형 배열명[ ] = new 자료형[배열_요소_개수];

 

2. 초깃값 있는 경우 

: 자료형 [ ] 배열명 = {초깃값};

 

- 배열 요소 개수로 정의한 숫자만큼 같은 타입의 데이터 공간 선언 

- 배열 요소 개수 없이 초깃값 정의되어 있는 경우, 초깃값 개수만큼 공간 선언 

- 초깃값 선언하지 않을 경우, 정수는 0 / 실수는 0.0 / 문자열은 NULL 저장

 

- 불린, 문자, 정수, 실수 등 배열 선언 시 사용

- 자바에서 배열 크기 구할 때, length 속성 사용

 

// 자바 1차원 배열 length 속성 

public class Hoxypot {
   public static void main(String[] args){
      int []a= new int[3];
      System.out.println(a.length);
   }
}

// 3
  • Hoxypot 클래스 생성
  • public static void main부터 프로그램 실행
  • 정수형 배열 a 선언 > 요소 개수는 3
  • println 함수를 통해 a.length = 배열 크기 출력 > 3

 

 

[2] 2차원 배열 

  • 2차원 배열 선언

1. 초깃값 없는 경우 

: 자료형 [ ][ ]배열명 = new 자료형[행의 개수][열의 개수];

: 자료형 배열명 [ ][ ]= new 자료형[행의 개수][열의 개수];

 

2. 초깃값 있는 경우

: 자료형 [ ][ ]배열명 = {{초깃값}, {초깃값}, ...};

 

// 자바 2차원 배열 length 속성

public class Hoxypot{
   public static void main(String[]args){
      int [][]a= new int[3][2];
      
      System.out.println(a.length);
      System.out.println(a[0].length);
   }
}

// 3
// 2
  • Hoxypot class 선언 
  • public static void main 부터 프로그램 실행
  • 정수형 배열 a, 3행*2열 선언
  • a.length를 통해 배열 a의 행 개수 출력 > 3
  • a[0].length를 통해 배열 a의 0번째 행 열 개수 출력 > 2 

 

// 자바 2차원 배열 length 속성 사용 

public class Hoxypot{
   public static void main(String[]args){
      int [][]a={{1,2},{3},{4,5,6}}
      
      System.out.println(a.length);
      System.out.println(a[0].length);
      System.out.println(a[1].length);
      System.out.println(a[2].length);
   }
}

// 3
// 2
// 1
// 3
  • Hoxypot class 선언 
  • public static void main 부터 프로그램 실행
  • 정수형 2차원 배열 a 선언 > a[0][0]=1, a[0][1]=2, a[1][0]=3, a[2][0]=4, a[2][1]=5, a[2][2]=6 으로 초깃값 지정
  • a.length로 2차원 배열 a의 행 개수 출력 > 3
  • a[0].length로 2차원 배열 a의 0번째 행 a[0] 요소 개수 출력 > 2
  • a[1].length로 2차원 배열 a의 1번째 행 a[1] 요소 개수 출력 > 1
  • a[2].length로 2차원 배열 a의 2번째 행 a[2] 요소 개수 출력 > 3

 


 

5. 표준 입출력 함수 

(1) 표준 출력 함수 

- print, println, printlf 함수

  • 표준 출력 함수 

1. System.out.print( );

: 개행 없이 출력

 

2. System.out.println( );

: 개행 하는 출력함수 

 

3. System.out.printf( );

: C언어처럼 ''변수 출력'' 할 수 있는 출력 함수 

 

//자바 표준 출력 함수 

public class Hoxypot {
   public static void main(String[]args{
      int a=100;
      System.out.print('Hello\n');
      System.out.println('Hello');
      System.out.printf('%d',a);
   }
}

// Hello
// Hello
// 100

 

  • Hoxypot class 생성 
  • public static void main 부터 프로그램 실행 
  • 정수형 변수 a 100 선언
  • print 함수로 개행 없이 'Hello'출력이나 뒤에 '\n' 이스케이프 문자 있으므로 개행 
  • println 함수로 개행 포함해서 'Hello' 출력, 이스케이프 문자 없어도 됨
  • printf 함수로 c언어와 같이 정수형 변수 a  10진수 값으로 출력

 

(2) 표준 입력 함수 

- readLine : 입력 장치로부터 **라인 전체**를 읽는 표준 입력 함수

ex. System.in.readLine( )

 

// 자바 표준 입력 함수 

public class Hoxypot{
   public static void main(String[] args){
      String a= null;
      BufferReader r=
      			new BufferedReader(new InputStreamReader(System.in));
      
      a=r.readLine();
      
      System.out.println(a);
   }
}

// 입력 : Hello
// 출력 : Hello
  • Hoxypot class 선언 
  • public static void main 부터 프로그램 실행 
  • 문자열 변수 a 선언 > NULL로 초기화 
  • System.in으로 한 글자씩 입력 받기 > InputStreamReader로 문자열 변환 > BufferedReader 객체 r에 입력 받은 결괏값 대입 
  •  Enter 키 입력 전까지 사용자가 입력한 라인 전체 문자열 변수 a에 대입 
  • println 함수로 입력받은 문자열 출력

 

BufferedReader

'java.io.BufferedReader' import 필요

 

InputStream-Reader

'java.io.InputStreamReader' import 필요 

 

입력 시, 예외 처리 필요 

main 메소드 선언 후, 시작 직전에 'throws' 이용한 예외 처리 필수 
throws IOException

'java.io.IOException' import 필요 

 

 

// 실제 코드 

import java.io.BufferedReader; // BufferedReader를 사용하기 위함
import java.io.InputStreamReader; // InputStreamReader를 사용하기 위함
import java.io.IOException; // 입력에서의 예외처리인 IOException을 수행하기 위함

public class Hoxypot{
   public static void main(String[] args) throws IOException{
      String a =null;
      BufferedReader r =
      			new BufferedReader(new InputStreamReader(System.in));
      
      a=readLine();
      
      System.out.println(a);
   }
}

// 입력 : Hello
// 출력 : Hello

 

 

 


 

6. 문자열 

(1) 문자열 생성

1. 리터럴 이용 방식 

- String 변수에 **문자열 리터럴** 저장한 주소 대입하는 방식

더보기

리터럴 (Literal)

소스 코드에 고정된 값이나 데이터를 나타내는 방식 

 

- 정수 리터럴 : 1, 2, 3 등

- 문자열 리터럴 : 'ABC' 등

String 변수명 = '문자열';

 

- 리터럴 문자열은 **문자열 풀**에 저장, 같은 리터럴 사용 변수는 같은 문자열 풀 가리킴 

더보기

문자열 풀 (String Pool)

자바에서 문자열 리터럴 관리하는 메모리 영역 

→ 문자열 풀은 문자열 리터럴 저장하고 중복 피하기 위해 사용 

ex. String a ='abc';
→  리터럴 문자열 abc가 String Pool에 저장, a 변수는 String Pool에 저장된 abc를 가리킴 

 

2. new 이용 방식

- 문자열 인스턴스 생성하여 String 변수에 주소값 대입

더보기

인스턴스

new로 생성된 객체

new String('문자열') 시, 객체 생성되는데 이것이 인스턴스 

String 변수명 = new String('문자열');

- String 인스턴스는 힙(Heap)에 저장 > 변수는 힙에 저장된 인스턴스 주소 대입

 

 

//자바 문자열 생성 

public class Hoxypot{
   public static void main(String[] args){
      String a='abc';
      String b='abc';
      String c= new String('abc');
      String d= new String('abc');
      
      System.out.println(a);
      System.out.println(b);
      System.out.println(c);
      System.out.println(d);
   }
}

// abc
// abc
// abc
// abc
  • Hoxypot class 생성
  • public static void main 부터 프로그램 실행 
  • 문자열 변수 a,b에 'abc' 문자열 저장 > 문자열 풀에 'abc' 리터럴 문자열이 저장되고 변수가 가리키는 방식이기 때문에 a와 b는 같은 곳을 가리킴 
  • 문자열 변수 c,d에 'abc'가 저장된 문자열 객체(인스턴스) 생성 > 인스턴스는 Heap에 저장되어 있음 > 리터럴 방식과 달리 c와 d는 별도 공간을 가리킴 
  • a, b, c, d 변수에 저장된 문자열 출력 > 'abc'

 

(2) 문자열 연결

- 문자열 + 문자열, 문자열 + 정수, 문자열 + 실수 = '문자열'

 

//자바 문자열 연결 

public class Hoxypot{
   public static void main(String[] args){
      System.out.println('5+2='+ 3 + 4);
      System.out.println('5+2='+ 3.1 + 4);
      System.out.println('5+2='+ (3 + 4));
      System.out.println(5+2+'= 3 + 4');
   }
}

// 5+2=34
// 5+2=3.14
// 5+2=7
// 7=3+4
  • Hoxypot class 생성
  • public static void main 부터 프로그램 실행 
  • 문자열 '5+2=' 와 정수 3을 더하면 문자열 '5+2=3'이 됨 > 거기에 4를 더하면 '5+2=34'
  • 문자열 '5+2=' 와 실수 3.1을 더하면 문자열 '5+2=3.1'이 됨 > 거기에 4를 더하면 '5+2=3.14'
  • 문자열 '5+2=' 와 (3+4)를 더해야 하므로 괄호 먼저 계산해주면 3+4=7 > 문자열 '5+2=' 더하기 7 이므로 '5+2=7'
  • 정수 5+2=7 이고 정수 7이랑 문자열 '=3+4'를 더하면 문자열 '7=3+4'가 됨 

 

 

(3) 문자열 비교 

1. == 연산자

문자열 **주소값**을 비교 

 

2. equals 메서드

**문자열 자체**를 비교하는 메서드

 

// 자바 문자열 비교 

public class Hoxypot{
   public static void main(String[] args[]){
      String a='abc';
      String b='abc';
      String c= new String('abc');
      String d= new String('abc');
      String e= a;
      
      System.out.println(a==b);
      System.out.println(a==c);
      System.out.println(b==e);
      System.out.println(c==d);
      System.out.println(d==e);
      System.out.println(a.equals(b));
      System.out.println(a.equals(c));
      System.out.println(b.equals(e));
      System.out.println(c.equals(d));
      System.out.println(d.equals(e));
      
// true
// false
// true
// false
// false
// true
// true
// true
// true
// true
  • Hoxypot class 생성
  • public static void main 부터 프로그램 실행
  • 리터럴 방식 > 문자열 변수 a에 'abc' 문자열 저장 > String Pool 안에 저장된 'abc' 문자열 주소를 가리킴 
  • 리터럴 방식 > 문자열 변수 b에 'abc' 문자열 저장 > String Pool 안 'abc' 문자열 주소를 가리키기 때문에 a와 같은 주소
  • new 방식 > 문자열 변수 c에 'abc'가 저장된 문자열 객체 생성 > 인스턴스는 Heap에 저장 ,c는 힙에 저장된 인스턴스 주소 가리킴
  • new 방식 > 문자열 변수 d에 'abc' 저장된 문자열 객체 생성 > 인스턴스는 Heap에 저장, c와 별도의 인스턴스 생성이므로 c와 다른 주소가 저장됨 
  • 문자열 변수 d에 문자열 변수 a 주소값 저장 
  • '==' 연산자 (주소 비교) > a와 b는 같은 주소 가리키므로 true 출력 
  • 주소 비교 > a는 String Pool에 저장된 'abc' 문자열 주소, c는 Heap에 저장된 문자열 주소를 가리키므로 별도의 주소임 > false
  • 주소 비교 > b는 String Pool에 저장된 문자열 주소, e는 a 주소값을 저장했는데 a 주소값 역시 String Pool에 저장된 'abc' 문자열의 주소이므로 동일 주소임 > true
  • 주소비교 > c는 Heap에 저장된 인스턴스의 주소이고 d도 Heap에 저장된 인스턴스의 주소이지만 서로 다른 인스턴스를 생성했으므로 다른 주소임 > false
  • 주소 비교 > d는 Heap에 저장된 인스턴스 주소, e는 String Pool에 저장된 'abc' 문자열 주소 값을 저장한 a의 주소값을 저장했으므로 서로 다른 주소 > false
  • 문자열 자체 비교이므로 a~e 모두 'abc' 동일 문자열을 저장하고 있어 모두 true를 출력

 


 

7. 반복문 - for each 문

- 배열이나 리스트 크기만큼 반복

- 반복할 때마다 배열이나 리스트의 각 항목을 변수에 순차적으로 대입하는 반복문 

 

  • for each문 구조
for (제어변수 : 배열) {
  문장;
}
// 자바 for each 문 예시 

public class Hoxypot{
   public static void main(String[] args){
      String[] name={'SOO','JE','BI'};
      
      for (String nm: name){
        System.out.println(nm);
      }
   }
}

// SOO
// JE
// BI
  • Hoxypot class 생성
  • public static void main 부터 프로그램 실행 
  • 문자열 배열 name 생성 > name[0]='SOO', name[1]='JE', name[2]='BI' 로 초기화 
  • for each 반복문 > name 배열 첫 번째 요소 'SOO' 를 문자열 변수 nm에 전달 > nm 출력 SOO
  • 반복문 > name 배열 두 번째 요소 'JE' 문자열 변수 nm에 전달 > nm 출력 JE
  • 반복문 > name 배열 세 번째 요소 'BI' 문자열 변수 nm에 전달 > nm 출력 BI
  • name 배열 크기인 3번 반복했으므로 반복문 탈출

'WorkOut > 정보처리기사' 카테고리의 다른 글

파이썬 | 기본 구조와 자료형  (0) 2024.03.26
자바 | 메서드와 클래스, 인터페이스  (0) 2024.03.23
C언어 | 포인터  (0) 2024.03.19
C언어 | 구조체와 함수  (0) 2024.03.19
C언어 | 배열과 문자열  (0) 2024.03.18