본문 바로가기
자바

java 복습 1

by BIGENGINEER 2024. 1. 4.

 

중요한 것만 일단 정리

 

1. 변수 타입

 

1) char은 문자 하나 '' 작은 따옴표 안에 작성 -> char c = 'a';

 

2) long 형은 큰 정수를 담을 때 , -> long L = 34563425l;  => 맨 끝에 l 이나 L 을 반드시 작성해야함

 

3) float 타입 -> float f = 3.14f => 뒤에 f 함께 작성

 

 

2. 변수 타입 변환

 

1) int x=3;

 double y = 3,14;

-> double y = x   => 아무문제 없음 , x가 double 형으로 변환

-> int x = y    => 오류남 , 명시적으로 형변환 해주어야함. / 

-> 수정 : int x = (int)y;

 

 

3. 연산자

 

1) int i = 2;

int i2 = ++i;   -> i2 = 3 -> 2+1

 

2) int t = 3;

int t2 = t++; -> t2 = 3 , t = 4 

왜 ? => t를 먼저 t2에 대입 후 t 를 1 증가함

 

 

 

4. 연산자 우선순위

 

1) int i=5;

    System.out. println(i++ - 5); 

-> i-5 먼저 수행 후 i++ 수행 

-> 후위 연산자는 기본 연산

 

(12/27)

 

 

5. 메소드 오버로딩

- 매개변수의 타입과 개수가 다르면 오버로딩 가능

(단, 매개변수의 이름은 중요하지 않다)

 

 

 

6. 생성자 오버로딩

 

public class Car {

     string name;

     int num;

    

    public Car(int num){

            this.num=num;

    }

    public Car(string name, int num){

            this.name= name;

            this.num=num;

    }



  //기본 생성자 , this()로 자신의 생성자 호출

   public Car(){

          this("이름없음", 0); // 두번째 생성자로 가서 출력

   }

 

 

7. 패키지

- 패키지가 있는 클래스 사용할 때는 import 사용

 

 

8. 상속

- extends

- 상속받은 클래스의 메서드를 자식 클래스에서 사용할 수 있음.

- 반대로 부모 클래스에서는 자식 클래스의 메서드를 사용할 수 없음.

 

 

9. 접근 제한자

- 캡슐화 : 관련된 것들을 모아서 가지고 있음

- public

- protected : 같은 패키지에 있는 것들만, 다른 패키지라도 상속을 받은 경우 접근을 허용함

- pritvate : 자기 자신만 -> 기본 접근 지정자

 

 

10. 추상 클래스

예)

*Bird.java

public abstract class Bird{

      public abstract void sing(); // 어떻게 울 것인가 미지수 , 중괄호 없음

      // 일반 메서드도 구현 가능

}

-> 추상 메서드가 하나라도 존재하는 클래스는 추상 클래스 

 

Duck.java

public class Duck extends Bird{

          public void sing() {

          }

}

 

 

DuckExam.java

public class DuckExam {

	public static void main(String[] args) {
		Duck duck = new Duck();
		
		duck.sing();
        
         Bird b = new Bird(); //오류
        
	}

}

 

 Bird b = new Bird(); => 오류나는 이유 

-> 추상 클래스는 부모로의 역할은 가능하나, 객체 생성은 불가

 

 

 

 

11. super 과 부모 생성자

 

Car.java

public class Car {
	public Car(String name) {
		System.out.println("c의 생성자");
	}
}

 

Truck.java

public class Truck extends Car {
	public Truck() {
		System.out.println("t기본 생성자");
	}
}

 

TruckExam.java

public class TruckExam {

	public static void main(String[] args) {
		Truck t = new Truck();
	}

}

 

 

-> 실행 결과 

c의 기본 생성자 

t 의 기본 생성자 

순서대로 출력됨

 

=> why? : Truck의 객체를 생성하면 Truck 의 생성자가 호출이 되고

부모 클래스인 Car의 생성자가 자동으로 호출되면서 부모 객체를 초기화 하게 된다.

 

 

 

*super()

- 부모의 생성자 호출 시 부모 객체를 나타내는 super 키워드 사용

 

public class Truck extends Car {
	public Truck() {
    	super("소방차"); // 부모의 생성자 호출
		System.out.println("t기본 생성자");
	}
}

 

 

!!! 나를 가리키는 키워드는 this

!!! 부모를 가리키는 키워드는 super

 

 

만약 super 가 없고, 

public Car(String name){}

매개변수가 있는 생성자라면, 오류 발생

 

-> 자식의 생성자가 생성되기 전에는 부모의 생성자가 먼저 생성되어야하는데

부모의 생성자를 내가 호출하지 않으면 컴파일러는 기본 생성자만 호출함.

 

-> 근데, 부모의 클래스에는 기본 생성자가 없음

 

-> 직접 생성자를 호출해주어야함

 

-> super("소방차") => 오류 안 남

 

 

 

12. 오버라이딩

- 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용하는 것

public class Car {
//	public Car() {
//		System.out.println("c의 생성자");
//	}
	public void run() {
		System.out.println("달리다");
	}
}

 

 

public class Bus extends Car {
	public void run() {
		super.run();
		System.out.println("빵");
	}
}

 

 

public class BusExam {

	public static void main(String[] args) {
		
		Bus bus = new Bus();
		bus.run();
	
	}

}

 

자식 클래스에서 Car 클래스의 메서드인 run 을 오버라이딩 하고 있음 

출력 결과는 자식클래스의 run 메서드가 실행됨

-> Car 클래스의 run 메서드를 사용하고 싶을 때 super.run(); 으로 사용하면 된다.

 

 

 

13. 클래스 형변환

- 부모타입으로 자식 가리킬 수 있으나, 부모가 가지고 있는 내용만 사용 가능하다.

=> Car c = new Bus(); -> Bus 객체가 만들어 진 것이기 때문

    c.run() : 아무 문제없음

    c.자식 클래스 메서드 -> 오류 

 

 

- 객체는 부모가 자식보다 조금 더 큰 그릇이라고 기본적으로 생각

 

=> Bus b = (Bus)c; -> 부모 객체를 자식 객체로 형 변환 

    c.run();

    c.자식 클래스 메서드() => 둥 다 문제없이 가능, 

 

=> 실제 생성됐을 때 버스였기 때문에 버스로 타입을 바꾸는 것이 가능한 것임

 

(1/4)

 

 

 

'자바' 카테고리의 다른 글

코자개 - Hash  (1) 2025.04.11
자바 정처기 실기 대비  (1) 2025.04.07
코자개1. [ ==와 equals() ]  (0) 2025.04.03
java 복습 3  (0) 2024.01.14
java 복습 2  (0) 2024.01.14