1) 문자열 연결
System.out.println("5+2 =" +(3+4))
System.out.println("5+2=" +3+4)
System.out.println(5+2+"=3+4")
5+2 = 7
5+2 = 34
7 = 3+4 => 5+2 가 먼저 계산되고, 계산된 후 = 3+4와 연결되는 것임.
2) 문자열을 문자형으로 변환
- 문자열일 경우 charAt 메서드를 이용해서 해당 번지의 문자를 가지고 옴.
System.out.println(a.charAt(1));
-> 1번지 문자를 가져옴.
3) for-each문
for(String nm : name){
System.out.println(nm)
}
- name 배열의 요소들을 nm으로 전달하여 출력함.
4) 업캐스팅과 다운캐스팅
[ 업캐스팅 ] : 하위 클래스 객체를 상위 클래스 타입으로 변환하는 과정이다.
A가 부모 클래스, B가 자식 클래스라고 할 때
A a = new B(); 이면,
!!!!!! 업캐스팅 관계에서 자식 클래스가 부모 클래스의 메서드를 오버라이딩 한 경우, 부모 클래스 타입으로 호출해도 자식 클래스의 메서드가 호출된다.
!!!!!! 업캐스팅 관계에서 변수를 출력하는 경우라면 자식클래스의 변수에 접근할 수 없기 때문에 부모 클래스의 변수 값을 출력.
5) 추상 클래스
- 미구현 추상 메서드를 한 개 이상 가지며 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능
abstract 추상 클래스명{
abstract 자료형 메서드명();
}
class 자식 클래스명 extends 추상 클래스명{
자료형 메서드명(){
명령어;
}
}
6) 인터페이스
- 클래스가 구현해야 하는 메서드의 선언만을 포함하는 형태
interface 인터페이스 클래스명{
자료형 메서드명();
}
class 자식 클래스명 implements 인터페이스 클래스명{
자료형 메서드명(){
//상속받은 메서드 내부 정의
}
}
7) 제네릭
- 클래스나 메서드가 다양한 타입을 처리할 수 있도록 일반화하는 기능이다.
class A<T>{
public void setA(T x){
this.x = x;
}
public T getA(){
return x;
}
}
public class Soojebi {
public static void main(String args[]){
A<String> a = new A<>();
a.setA("Hello");
System.out.println(a.getA());
A<Integer> b = new A<>();
b.setA(1000);
System.out.println(b.getA());
}
}
7.1) 제네릭 오버로딩 관계
- 제네릭 변수를 매개변수로 전달할 때 제네릭이나 object 타입으로 전달한다.
-> !!!!!!!!!!!!!!!!!!!! 제네릭은 오버로딩 관계일 때 제네릭이나 object 타입을 매개변수로 받는 메서드를 호출한다.
8) 예외처리
- 프로그램 실행 중 발생할 수 있는 예외적인 상황에 대해 적절히 대처하기 위한 기법이다.
1) ArrayIndexOutOfBoundsException
- 배열 범위를 벗어난 인덱스에 접근하려고 할 때 발생하는 예외
2) ArithmeticException
- 수학적인 연산 중 오류
3) NullPointException
- 객체가 null인 상태에서 메서드나 필드에 접근하려고 할 때 발생
4) NumberFormatException
- 문자열을 숫자 타입으로 변환하려 할 때 형식이 맞지 않으면 발생하는 예외
5) IndexOutOfBoundsException
- 유효하지 않은 인덱스 접근
try{
//예외발생 가능성이 있는 코드
}
catch{
//예외가 발생할 때 실행하는 코드
}
finally{
//항상 실행되는 코드
}
9) throw , throws
- throw는 메소드 내부에서 직접 예외를 발생시킬 때 사용한다.
- throws는 메소드 선언부에 이 메서드가 예외를 던질 수 있음을 선언할 때 사용
class SooException extends Exception{
public SooException(){
System.out.println("A");
}
}
public class Soo{
public static void fn throws SooException{
System.out.println("B");
throw new SooException();
}
public static void main(String[] args){
try{
System.out.println("C");
fn();
System.out.println("D");
}
catch(SooException e){
System.out.println("E");
}
}
}
- throw new SooException(); 에서 예외가 발생했으니 A를 출력하고 try 블록을 종료한다. 그래서 D는 출력되지 않고
catch 문으로 넘어가서 E를 출력한다.
[오답]
1. static
public class Soojebi{
public static void main(String args[]){
System.out.print(Soojebi.check(1));
}
static String check(int num){
return (num >= 0) ? "positive" : "negative";
}
}
- 일반적으로 인스턴스를 생성해서 접근해야 하지만, Soojebi 클래스의 인스턴스 없이 Soojebo.check와 같이 check 메서드를 호출하여면 check메서드는 static이어야 한다.
2. 스레드
public class Car implements Runnable{
public void run(){
//스레드 동작 시 수행할 코드
}
}
public class Soojebi{
public static void main(String[] args){
Thread t1 = new Thread(new Car());
t1.start();
}
}
- 스레드를 만들기 위해서는 인터페이스를 상속받고, 스레드를 생성하기 위해서 new 뒤에 인터페이스를 상속받은 스레드 클래스를 선언해준다.
- Thread t1 = new Thread(new 상속받은 스레드 클래스);
3) 부모- 자식 상속
public class Soojebi{
public static void main(String[] args){
parent c = new Child();
c.paint();
c.draw();
}
}
class Parent{
public void paint(){
System.out.print("A");
draw();
}
}
class Child extends Parent{
public void paint() {
super.draw();
System.out.print("C");
this.draw();
}
public void draw() {
System.out.print("D");
}
}
- Child는 Parent를 상속받고, paint메서드는 오버라이딩 관계이므로 자식 클래스의 paint 메서드를 호출
- super.draw()로 부모의 draw 메서드를 호출하고 B 출력
- draw 메서드를 호출하는데 오버라이딩 관계이므로 자식 클래스의 draw 메서드 호출 -> D 출력
- C 출력
- this.draw는 자식 클래스의 draw이므로 D 출력
- c.draw도 마찬가지로 오버라이딩 관계이므로 자식 클래스의 draw 호출 -> D 출력
=> BDCDD
4) 생성자
...
class Child extends Parent{
public Child(){
System.out.println("E");
}
public Child(int x){
this();
System.out.println("F");
}
...
- Child가 Parent를 상속받은 상태에서 Child 생성자에서 this()를 호출하면 생성자에 super()메서드가 없으므로 super()가 생략되었기 때문에 상위 클래스의 매개 변수가 없는 생성자를 호출한다.
- 그후 상위 클래스에서 작업이 끝나면 하위클래스에서 자신 클래스의 생성자 중 매개 변수가 없는 생성자를 호출한다.
즉, 하위 클래스의 생성자에서 this()를 호출하면 상위 클래스와 하위 클래스 모두 고려해주어야한다.
'자바' 카테고리의 다른 글
| 코자개 - 정렬 (1) | 2025.04.28 |
|---|---|
| 코자개 - Hash (1) | 2025.04.11 |
| 코자개1. [ ==와 equals() ] (0) | 2025.04.03 |
| java 복습 3 (0) | 2024.01.14 |
| java 복습 2 (0) | 2024.01.14 |