본문 바로가기

개인 스터디/정리

[정보처리기사 실기] 12. 자바

 

1. 자바 기본 구조

  • 클래스 : 자바의 소스 코드 단위. 변수와 메서드로 구성
public class A {
	public static void main(String[] args){  // 프로그램 시작 단위
    }
}

 

2. 자료형

  • 기본 자료형 : 크기가 고정되고, null 값을 가질 수 없는 데이터 타입
    • 논리형 : boolean(1byte)
    • 정수형 : byte(1byte), short(2byte), int(4byte), long(8byte)
    • 실수형 : float(4byte), double(8byte)
    • 문자형 char(2byte)
  • 참조 자료형 : 객체를 참조하는 변수로, 주소값을 저장하는 공간
    • 배열(Array) : 같은 타입의 변수들의 집합
    • 클래스(Class) : 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀
    • 인터페이스(Interface) : 클래스가 구성해야 하는 메서드의 선언

3. 변수

  • 변수 : 값을 주기억장치에 저장하기 위한 공간
  • 변수 유효범위
    • 클래스 변수 : Class 블록에 선언하는 변수로, 클래스 내에서 사용 가능
    • 지역 변수 : 블록 내에서 선언하는 변수로, 해당 블록 내에서만 사용 가능
    • Static 변수 : 프로그램 전체에서 사용 가능한 변수
public class A {
	int a = 3; // 클래스 변수
	public static void main(String[] args){  
    	int b = 5; // 지역 변수
        static int c = 7; // static 변수
    }
}

 

4. 배열

  • 배열의 선언
public class A {
	public static void main(String[] args){ 
    	int[][] a = new int [3][2]; // 초깃값이 없는 경우
        int[][]a = {{1,2},{3}};  // 초기값이 있는 경우
    }
}

 

 

5. 표준 입출력 함수

  • 표준 출력 함수
    • System.out.print() : 개행 x
    • System.out.println() : 개행 o
    • System.out.printf() : 변수 출력 함수
  • 표준 입력 함수
    • System.in.readLine() : 입력장치로부터 문자를 읽는 함수

 

6. 문자열

  • 문자열 생성
    • 리터럴 방식 : String 변수에 문자열 리터럴을 저장한 주소를 대입
    • new를 이용한 방식 : String 변수에 주소값을 대입
public class A {
	public static void main(String[] args){ 
    	String a = "abc";  // 리터럴 방식
        String b = "abc";  // a와 b는 같은 문자열 풀을 가리킨다.
        String c = new String("abc");  // new 방식
    }
}
  • 문자열 연결 : 문자열과 연결하면 모두 문자열로 return
  • 문자열 비교
    • == 연산자 : 문자열의 주소값을 비교
    • equals 메서드 : 문자열 자체를 비교  
  • 문자열 문자형 변환 : chatAt(index) 메서드를 이용해 해당 번지의 문자를 가지고 온다.

 

7. 반복문 - for each 문

  • for each 문 : 배열이나 리스트의 항목을 순차적으로 대입하며 반복
public class A {
	public static void main(String[] args){ 
    	int[] a = {1,2,3};
        for(int n:a){
        	System.out.println(n);
        }
    }
}

 

 

8. 메서드

  • 사용자 정의 함수 : 사용자 정의 함수에서 사용된 변수는 함수 종료 시 없어짐
  • static 메서드 : 클래스가 메모리에 올라가 때 자동적으로 생성되는 메서드로, 인스턴스를 생성하지 않아도 호출이 가능하다.

 

9. 클래스

  • 객체 지향 프로그래밍(OOP)에서 특정 객체 생성을 위해 변수와 메서드를 정의하는 틀
  • 클래스 접근 제어자
    • public : 외부의 모든 클래스에서 접근 가능
    • protected : 같은 패키지 내부, 하위 클래스에서 접근 가능
    • default : 접근 제어자를 명시하이 않은 경우. 패키지 내부에서 접근 가능
    • private : 같은 클래스에서만 접근 가능
  • 클래스 정의 : 일반적으로 변수는 private를 사용하고, 메서드는 외부에 공개할 것만 public을 사용하여 정보 은닉을 수행
  • 클래스 변수 생성 : 변수에 들어갈 인스턴스를 new 키워드로 생성
  • 클래스 this : 현재 객체를가리키는 키워드로, 클래스 내부의 변수와 메서드를 가리킬 수 있다. 
public class B {
	private int a;
    public void setA(int a){
    	this.a = a;
    }
}

public class A {
	public static void main(String[] args){ 
    	B b = new B();
        b.setA(5);
    }
}
  • 생성자 : 해당 클래스의 객체가 생성될 때 자동으로 호출되는 메서드. 클래스 명과 동일한 메서드 명을 가지고, 반환 값이 없다. 

 

10. 클래스 상속

  • 클래스 상속 : 어떤 객체가 있을 때 객체의 변수와 메서드를 다른 객체가 물려받는 기능
  • 클래스 상속 문법
public class B {
	private int a;
    public void setA(int a){
    	this.a = a;
    }
}

public class C extends B{
	public int getC(){
    	System.out.println("C");
    }
}

public class A {
	public static void main(String[] args){ 
    	C c = new C();
        c.setA(5);
        c.getC();
    }
}
  • 오버로딩 : 동일 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의할 수 있는 기능
  • 오버라이딩 : 하위 클래스에서 상위 클래스 메서드를 재정의
  • 부모 클래스 접근 : super 클래스를 이용하여 상위 클래스의 변수나 메서드에 접근
  • 업 캐스팅(Upcasting) : 하위 클래스 객체를 상위 클래스 타입으로 변환하는 과정

 

11. 추상 클래스

  • 추상 클래스 : 미구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현
public class B {
	private int a;
    public void fn(); // 메서드 내부 구현 x
}

class C extends B{
	void fn(){
    	System.out.println("C");
    }
}

 

 

12. 인터페이스

  • 인터페이스 : 클래스가 구현해야 하는 메서드의 선언만을 포함하는 형태(추상 클래스의 일종) 

 

13. 제네릭

  • 제네릭 : 클래스나 메서드가 다양한 타입을 처리할 수 있도록 일반화하는 기능
  • 제네릭 문법
public class B<T> {
	T x;
    public void setA(T x){
    	this.x=x;
    }
}

public class A {
	public static void main(String[] args){ 
    	B<Sting> b = new B<>();  // <타입> 작성
        b.setA("Hello");
    }
}
  • 제네릭 오버로딩 관계 : 제네릭 변수를 매개변수로 전달할 때 제네릭이나 Object 타입으로 전달

 

14. 예외 처리

  • 예외 처리 : 프로그램 실행 중 발생할 수 있는 예외적인 상황에 대해 적절히 대처
  • 예외 종류
    • ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 인덱스 접근
    • ArithmeticException : 수학적인 연산 중 오류가 발생
    • NullPointerException : 객체가 null인 상태에서 메서드나 필드에 접근
    • NumberFormatException : 문자열 숫자 타입으로 변환 시 형식이 맞지 않음
    • IndexOutOfBoundsException : 리스트나 문자열의 유효하지 않은 인덱스에 접근
  • 예외 처리 구문
public class A {
	public static void main(String[] args){ 
    	try{  // 예외 발생 가능성이 있는 코드
        	int result = 10/0;
        }
        catch(ArithmeticException){  // 예외 발생 시 실행하는 코드
        	System.out.println("A");
        }
        finally{  // 예외와 상관없이 항상 실행되는 코드
        	System.out.println("B");
        }
    }
}
  • throw, throws : 메서드 내부에서 직접 예외를 발생시킬 때 사용

 

 


# 회고

 

문제를 풀어봤는데 자바 문법은 밑줄 친 정도만 복습하고...복잡한 코드 이해하는 것만 더 연습하면 될 것 같다.

C는 포인터가 어렵다면 Java는 클래스 상속이 헷갈린다. 왔다갔다리