Day 22 (23.01.26)

Jane·2023년 1월 26일
0

IT 수업 정리

목록 보기
22/124

1. static 함수 복습

  • 클래스 이름으로 접근할 수 있는 것 : 클래스 변수, 클래스 함수
  • 참조형도 static 가능하다. 참조형은 타입이 아닌 이름으로 접근한다.
  • static이 붙은 객체 : 스캔 후 메모리에 올라가 있기 때문에, 이미 있는 객체를 매번 생성하지 않아도 된다.
class A {
	static int a;
	static String name = "AAAA";
	
	static void printA() {}
		
	static B b = new B(); 
}

class B {
	void print() {
		System.out.println("출력");
	}
}

public class JavaPractice {

	public static void main(String[] args) {
		A.a = 10;
		A.name = "ABCD"; // A.String (X)
		A.printA();
		A.b.print();
	}
}

2. main 함수의 위치

A.java :: A 클래스에 메인 함수가 있을 때

class A {
	void print() {
		System.out.println("A 클래스");
	}
	
	public static void main(String[] args) {
		A a = new A();
		a.print();
		
		B b = new B();
		b.print();
	}
}

class B {
	void print() {
		System.out.println("B 클래스");
	}
}

B.java :: B 클래스에 메인 함수가 있을 때

class A {
	void print() {
		System.out.println("A 클래스");
	}
}

class B {
	void print() {
		System.out.println("B 클래스");
	}
	
	public static void main(String[] args) {
		A a = new A();
		a.print();
		
		B b = new B();
		b.print();
	}
}

[Console] : 값은 둘 다 동일하게 나온다
A 클래스
B 클래스

  • 문법적으로는 아무 클래스에나 main 함수를 만들어도 상관 없다.
    (main 함수는 1자리를 빌려올 뿐이다.)
  • A 클래스와 B 클래스는 온전한 클래스이므로, main 함수를 만들어줄 클래스를 다른 구역에 만들어주는 코딩을 추천한다.

ABTest.java

class A {
	void print() {
		System.out.println("A 클래스");
	}
}

class B {
	void print() {
		System.out.println("B 클래스");
	}
	
}

class ABTest {
	public static void main(String[] args) {
		A a = new A();
		a.print();
		
		B b = new B();
		b.print();
	}
}

3. 함수 오버로딩

3-1. 개요

  • 같은 함수의 이름으로 매개변수의 개수 또는 자료형(데이터 타입)을 다르게 하는 것
  • 절차 지향 언어에서는 지원되지 않으며, 객체 지향 언어에서만 가능하다.
  • 자료형이 다른 함수는 오버로딩이 아니다.
class Overloading {
	void print() {
		System.out.println("A 클래스");
	}
	
	void print(int num) {
		System.out.println("A 클래스" + num);
	}
	
	void print(int num1, int num2) {
		System.out.println("A 클래스" + num1 + num2);
	}
	
	void print(double num) {
		System.out.println("A 클래스" + num);
	}
	
    /*
    int print(int num){
    	System.out.println("A 클래스" + num);
        return 0;
    }
    */
    
}

3-2. 오버로딩의 대표적인 예제 : println

public class JavaPractice {

	public static void main(String[] args) {
		System.out.println();
		System.out.println('A'); // char
		System.out.println("Hello World"); // String
		System.out.println(10); // int
		System.out.println(3.14); // double
		System.out.println(true); // boolean
		System.out.println(4L); // long
	}
}

3-3. 오버로딩 연습 예제

class OverLoadEx{
	public void print(int num) {
		System.out.println(num);
	}
	
	public void print(char ch) {
		System.out.println(ch);
	}
	
	public void print(String str) {
		System.out.println(str);
	}
}

public class JavaPractice {

	public static void main(String[] args) {
		OverLoadEx ex = new OverLoadEx();
		ex.print(100);
		ex.print('A');
		ex.print("Hello");
	}
}

3-4. 생성자의 오버로딩

  • 주민번호, 여권번호가 있는 함수
  • 주민번호만 있는 함수 (여권번호 = 0)
  • 주민번호도 여권번호도 없는 함수 : Default 생성자
class Person {
	private int regiNum;  // 주민등록번호
	private int passNum; // 여권번호
	
	Person(){
		regiNum = 0;
		passNum = 0;
	}
	
	Person(int rnum, int pnum){
		regiNum = rnum;
		passNum = pnum;
	}
	
	Person(int rnum){
		regiNum = rnum;
		passNum = 0;
	}
	
	void showPersonalInfo() {
		System.out.println("주민번호 : " + regiNum);
		System.out.println("여권번호 : " + passNum);
	}
}

class ClassMethod {
	public static void main(String[] args) {
		Person jung = new Person(335577, 112233);
		Person hong = new Person(775544);
		
		jung.showPersonalInfo();
		hong.showPersonalInfo();
	}
}

[Console]
주민번호 : 335577
여권번호 : 112233
주민번호 : 775544
여권번호 : 0

profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글