Shiny Star

강의 정리

[정보처기기사] 실기 프로그래밍 정리 - 자바

AnnieLoper 2025. 7. 5. 16:36

기본적인 자바 문법을 안다는 가정하에, 헷갈리는 부분만 정리했습니다. 

 

1. 증/감 연산자 

  1) a++ : 일단 그대로 반환 후, 나중에 1 증가.

  2) ++a : 먼저 증가시킨 후, 증가한 값을 반환.

  3) a-- : 일단 그대로 반환 후, 나중에 1 감소.

  4) --a: 먼저 감소시킨 후, 감소한 값을 반환.

int first = 3;
int second = first++;
System.out.println("second : " + second);
System.out.println("first : " + first);

=> second : 3
=> first : 4

 

2. 비교 연산자

   1) 문자열 비교

      - str1 == str2  #true

        -> str1 과 str2 가 같은 문자일때, 동일한 문자열은 string pool 이 재사용된다. 

      - str1 == new String("같은문자") #false

        - > new 로 생성하면 아예 다른 string 객체가 됨.

      - str1.equals(new String("같은문자")) #true

        - > equals()는 두 문자열의 "내용"만 비교.

   2) 배열 비교

      - int[] arr1 = {1,2,3} / int[] arr2 = {1,2,3}

        -> arr1 == arr2 #false -- 주소값 비교.

        -> arr1.equals(arr2) #false --Object의 기본 equals는 주소 비교.

        -> Arrays.equals(arr1,arr2) #true. --"내용"비교

  3) 리스트 비교

     - list1 == list2 #false --주소값 비교.

     - list1.equals(list2) #true -- "내용"비교. 

 

3. trim() -- 중간공백 제거 X,  앞 뒤 공백만 제거.

 

4. 업캐스팅(UPCASTING)

  부모형태 변수 = new 자식생성자();

  1) 변수.메서드호출(); 

     - 자식에 이름이 같은 메서드가 있으면 우선작동.

     - 자식에 super() 가 있으면 부모의 것을 호출.

     - 부모에서 자식과 같은 메서드가 있으면, 자식을 호출. - 없으면 부모의 것을 호출.

        -> super로 작동한 부모메소드 속에서 호출한 거여도, 자식으로 이동(오버라이딩)

  2) 생성자가 있다면?

     - 자식이 태어날 때는 부모를 먼저 태어나고 태어난다.

  3) 자식생성자에서 부모의 메서드를 호출.

     - 자식이 태어날때, 부모의 생성자를 먼저 호출.

     - 부모가 태어나고 보니, 자식의 생성자에서 부모의 메소드 A()를 호출.

     - 부모의 메소드 A()를 호출하니, 그 안에 B() 메소드를 호출한다면.

     - B()가 부모, 자식 모두에게 있다면 , 다시 자식의 B()를 호출한다.

  4) 자식 생성자에 오버라이딩 x , 오버로딩 한다면,

     - 자식이 태어날 때, 변수를 받음 -> 오버로딩 상태.

     - 자식 생성자에서 파라미터가 있는 자식(int i) 호출.

     - 자식은 태어나기 전에 부모의 기본생성자(매개변수 없는) 호출.

     - 자식에게 파라미터가 있었음에도 부모는 기본생성자만 호출.(명시적으로 호출하지 않았을 때)

** 변수.x 로 필드값 접근시는 부모것에 접근 

 

* 오류 나는 경우

- 자식 생성자에서 부모생성자 호출이 최상위줄에 있지 않으면, 오류가 남.

class B extends A {
 public B(int i){
 	System.out.println("B호출");
    super(10);
 }

 

5. 접근제어자

   - private : 같은 클래스 내부에서만

   - protected : 같은 패키지 + 상속받은 클래스

   - default : 같은 패키지

   - publid : 어디서나 접근 가능. 

 

6. static 변수/메서드

  - 변수 : 클래스가 로딩될 때 딱 한번 메모리에 올라가며, 모든 인스턴스가 공유.

  - 메서드 : 객체 없이 클래스명으로 접근이 가능. this 를 쓸 수 없음.

  - 인스턴스 변수/메서드 : this 사용가능.

public class Counter {
    static int count = 0; // 모든 객체가 공유하는 변수

    public Counter() {
        count++;
        System.out.println("현재 생성된 객체 수: " + count);
    }

    public static void printTotal() {
        System.out.println("총 객체 수: " + count);
    }
}

public class Main {
    public static void main(String[] args) {
        Counter c1 = new Counter(); // 출력: 현재 생성된 객체 수: 1
        Counter c2 = new Counter(); // 출력: 현재 생성된 객체 수: 2
        Counter c3 = new Counter(); // 출력: 현재 생성된 객체 수: 3

        Counter.printTotal(); // 클래스 이름으로 static 메서드 호출
    }
}