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 |