728x90
수업내용
1교시 (09:30-10:20)
- 지난 시간 복습
생성자 Constructor
------------------
1. 클래스 이름에 () 소괄호를 붙이고 {} 중괄호를 가지고 있는 함수이다.
2. 생성자는 클래스를 메모리에 올릴 때(new 인스턴스, 상속 inheritance)
========================================
해당 객체에 있는 멤버 변수를 초기화한다.
========================================
3. 생성자는 일반 함수의 오버로딩처럼 생성자 오버로딩을 할 수 있다.
4. 생성자 안에서 사용하는 this, super 키워드, this(), super() 함수를 사용할 수 있다.
this 키워드, this() 함수는 자기자신 클래스에서 사용한다.
super 키워드, super() 함수는 상속 관계에서 부모 클래스에 있는 자원 및 생성자를 호출할 때 사용한다.
================================================
5. 생성자를 호출할 때는 매개변수가 같은 것을 호출해야 한다.
================================================
6. default Constructor 소스 코드에 매개 변수가 업슨 생성자를 구현하지 않으면
자바 버추얼 머신이 만들어주는 기본 생성자
상속 inheritance
------------------
클래스 종류
일반 클래스 public class 클래스이름{함수이름(){}}
추상 클래스 public abstract 클래스이름{abstract 함수이름();}
인터페이스 클래스 public interface 인터페이스클래스이름{함수이름();}
상속하는 이유
클래스의 자원을 사용하려고 / 부모의 자원을 사용하려고
상속당한 자손 클래스가 가장 부자이다. 자원을 제일 많이 사용할 수 있다.
함수 오버라이딩을 할 수 있다. : 부모 클래스에 있는 함수를 자식 클래스로 옮겨 와서 사용하는 것
이떄 꼭 @Override를 사용해야 한다.
클래스의 자원을 사용하는 방법(클래스를 메모리에 올리는 방법)
static, new, extends, implements
extends : 클래스 상속을 하는 단일 상속 키워드
implements : 클래스에서 인터페이스를 다중 상속할 수 있는 키워드
단 : 인터페이스와 인터페이스의 상속은 extends 키워드를 사용한다.
2교시 (10:30-11:20)
- Exam_Inherit_2
package a.b.c.ch2;
class Class_부모 extends java.lang.Object{
Class_부모() {
System.out.println("Class_부모() 생성자 >>> : ");
}
void 부모_1() {
System.out.println("Class_부모().부모_1() 함수 >>> : ");
}
}
class Class_자식 extends Class_부모 {
Class_자식() {
System.out.println("Class_자식() 생성자 >>> : ");
}
void 자식_1() {
System.out.println("Class_자식().자식_1() 함수 >>> : ");
}
}
public class Exam_Inherit_2 {
void examIn() {
System.out.println("Exam_Inherit_2.examIn() 함수 >>> : ");
}
public static void main(String args[]) {
Exam_Inherit_2 ei2 = new Exam_Inherit_2();
// System.out.println("ei2 참조변수 >>. : " + ei2);
// ei2.examIn();
/*
클래스(자원)을 사용하려고 상속관계에 있는 클래스를 인스턴스했다.
객체지향 프로그래밍에서는 2번을 사용해야 한다.
1. 자식클래스 참조변수 = new 자식클래스();
2. 부모클래스 참조변수 = new 자식클래스();
3, 4번은 사용하지 않는다.
3. 부모클래스 참조변수 = new 부모클래스();
4. 자식클래스 참조변수 = new 부모클래스();
*/
// 자식클래스 자식클래스_참조변수 = new 자식클래스();
// 자식클래스_참조변수로 자식 클래스에 있는 자원 및 부모 클래스에 있는 자원을 사용할 수 있다.
Class_자식 자식_1 = new Class_자식();
System.out.println("자식_1 참조변수 주소값 >>> : " + 자식_1);
자식_1.자식_1();
자식_1.부모_1();
System.out.println();
// 부모클래스 부모클래스_참조변수 = new 자식클래스();
// 부모클래스_참조변수로는 자기자신 클래스의 자원만 사용이 가능하다.
Class_부모 부모_1 = new Class_자식();
System.out.println("부모_1 참조변수 주소값 >>> : " + 부모_1);
부모_1.부모_1();
// 부모_1.자식_1();
// 부모클래스_참조변수로 자식클래스의 자원을 사용하려면
// 부모클래스_참조변수를 자식클래스로 형변환(캐스팅)을 해야 한다.
System.out.println();
// 자식클래스를 선언해서 부모클래스_참조변수를 형변환해서 사용한다.
// 1)
Class_자식 자식_2 = (Class_자식)부모_1;
자식_2.자식_1();
// 2)
Object obj = 부모_1;
Object obj_1 = obj;
Class_자식 자식_3 = (Class_자식)obj_1;
자식_3.자식_1();
// 3)
Object obj_2 = (Object)부모_1;
Class_자식 자식_4 = (Class_자식)obj_2;
자식_4.자식_1();
// 4) 2번과 같음
Object obj_3 = 부모_1;
Class_자식 자식_5 = (Class_자식)obj_3;
자식_5.자식_1();
}
}
3교시 (11:30-12:20)
- 상속 코드보면서 설명
- 부모클래스에게 자식 클래스가 1개만 있는 것이 아닌데 extends로 상속할 때는 1개만 상속함
- 나중에 다중 상속하나, 다중 상속 문법이 단일 상속과 같음
4교시 (12:30-13:20)
- 추상 클래스 - 다형성
- Exam_Abstract
package a.b.c.ch2;
// 추상 키워드 : abstract
// 추상 클래스
// 추상 클래스 = 변수 + 추상함수 + 일반함수
abstract class Class_Abstract_2 {
abstract int add();
abstract String eat();
int add_1() {
return 1;
}
}
class Class_Abstract_1 extends Class_Abstract_2 {
int add() {
return 1 + 2;
}
String eat() {
return "Class_Abstract_1.eat() >>> : ";
}
}
public class Exam_Abstract {
public static void main(String args[]) {
Exam_Abstract ea = new Exam_Abstract();
System.out.println("ea 참조변수 주소값 >>> : " + ea)
Class_Abstract_1 ca1 = new Class_Abstract_1();
int add = ca1.add();
System.out.println();
}
}
5교시 (14:30-15:20)
- [교재 232~233p] 상속, [교재 249p] 한 걸음 더
- [교재 259p] 다형성, [교재 261p] 그림
- [교재 281~287p] 추상 클래스
6교시 (15:30-16:20)
- A_computer
package a.b.c.ch2;
public abstract class A_Computer {
public abstract void display();
public abstract void typing();
public void turnOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다.");
}
}
- A_DeskTop
package a.b.c.ch2;
public class A_DeskTop extends A_Computer {
@Override
public void display() {
System.out.println("DeskTop display()");
}
@Override
public void typing() {
System.out.println("DeskTop typing()");
}
}
- A_Notebook
package a.b.c.ch2;
public abstract class A_NoteBook extends A_Computer {
@Override
public void display() {
System.out.println("NoteBook display()");
}
}
- A_MyNoteBook
package a.b.c.ch2;
public class A_MyNoteBook extends A_NoteBook {
@Override
public void typing() {
System.out.println("MyNoteBook typing()");
}
}
- A_ComputerTest
package a.b.c.ch2.abc;
import a.b.c.ch2.A_DeskTop;
import a.b.c.ch2.A_MyNoteBook;
public class A_ComputerTest {
public static void main(String args[]) {
A_DeskTop ad = new A_DeskTop();
ad.display();
ad.turnOn();
ad.turnOff();
A_MyNoteBook am = new A_MyNoteBook();
am.display();
am.typing();
am.turnOn();
am.turnOff();
}
}
- 위 코드 뭉치(A_computer ⇒ A_DeskTop, A_Notebook ⇒ A_MyNoteBook)을 상속 받은 A_ComputerTest실행
- javac -d . A*r.java A*p.java A*k.java A*M*k.java A*t.java java a.b.c.ch2.abc.A_ComputerTest
- [교재 61p] 상수와 리터럴
7교시 (16:30-17:20)
- Exam_Constant
package a.b.c.ch2.common;
public abstract class Exam_Constant {
// 상수 Constant :: 변하지 않는 값 :: 변경하면 안되는 값
/*
1. 변경하면 안되는 값
2. 상수는 클래스가 로드할 때 맨 먼저 메모리에 로드된다. (상수 풀, Constant Pool)
3. 상수는 클래스 블록 맨 위에 작성한다.
4. 가능한 웬만하면 상수로 만들어서 사용한다.
*/
// 업로드
public static final String FILE_UPLOAD_PATH = "C:\\00.KOSMO108\\30.Web\\fileUpload";
public static final String IMG_UPLOAD_PATH = "C:/00.KOSMO108/30.Web/imgUpload";
public static final int FILE_UPLOAD_SIZE = 10 * 1024 * 1024; // 10메가
public static final int IMG_UPLOAD_SIZE = 10 * 1024 * 1024; // 10메가
// JDBC 연결
public static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
public static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:orclHBE00";
public static final String JDBC_USER = "scott";
public static final String JDBC_PWD = "tiger";
}
- Exam_Constant_Test
package a.b.c.ch2;
import a.b.c.ch2.common.Exam_Constant;
public class Exam_Constant_Test {
public static void main(String args[]) {
// Exam_Constant ec = new Exam_Constant();
/*
C:\00.KOSMO108\10.JExam\ch2>javac -d . Exam_*_Test.java Exam_Constant.java
Exam_Constant_Test.java:9: error: Exam_Constant is abstract; cannot be instantiated
Exam_Constant ec = new Exam_Constant();
^
1 error
*/
String fileUploadPath = Exam_Constant.FILE_UPLOAD_PATH;
System.out.println("fileUploadPath >>> : " + fileUploadPath);
}
}
- Exam_Constant_Test에서 Exam_Constant의 상수를 import해와서 사용
javac -d . Exam_Constant*.java
java a.b.c.ch2.Exam_Constant_Test
- Exam_Constant_Test_1
package a.b.c.ch2;
import a.b.c.ch2.common.Exam_Constant;
public class Exam_Constant_Test_1 extends Exam_Constant {
public static void main(String args[]) {
String fileUploadPath = Exam_Constant.FILE_UPLOAD_PATH;
String imgUploadPath = Exam_Constant.IMG_UPLOAD_PATH;
int fileUploadSize = Exam_Constant.FILE_UPLOAD_SIZE;
int imgUploadSize = Exam_Constant.IMG_UPLOAD_SIZE;
System.out.println("fileUploadPath >>> : " + fileUploadPath);
System.out.println("imgUploadPath >>> : " + imgUploadPath);
System.out.println("fileUploadSize >>> : " + fileUploadSize);
System.out.println("imgUploadSize >>> : " + imgUploadSize);
String jdbc_driver = Exam_Constant.JDBC_DRIVER;
String jdbc_url = Exam_Constant.JDBC_URL;
String jdbc_user = Exam_Constant.JDBC_USER;
String jdbc_pwd = Exam_Constant.JDBC_PWD;
System.out.println("jdbc_driver >>> : " + jdbc_driver);
System.out.println("jdbc_url >>> : " + jdbc_url);
System.out.println("jdbc_user >>> : " + jdbc_user);
System.out.println("jdbc_pwd >>> : " + jdbc_pwd);
}
}
- [교재 305p] final
- 자바 1.8에서는 final 변수는 변경 불가하나 1.4는 가능함
- Exam_Final
package a.b.c.ch2;
public class Exam_Final {
public static final String FILE_UPLOAD_PATH = "C:\\00.KOSMO108\\30.Web\\fileUpload";
void examMethod(final String s) {
// 매개변수에 final
// s = "홍길동";
String ss = s;
System.out.println("ss >>> : " + ss);
}
public static void main(String args[]) {
// 변수에 final
// Exam_Final.FILE_UPLOAD_PATH = "11";
String s = Exam_Final.FILE_UPLOAD_PATH;
System.out.println("s >>> : " + s);
Exam_Final ef = new Exam_Final();
ef.examMethod("홍길동1");
}
}
8교시 (17:30-18:30)
- [교재 61 ~ 63p] 리터럴
- [교재 314p] 인터페이스
- Exam_Interface
package a.b.c.ch2;
class Interface_B_Impl implements Interface_B {
public void inter_b() {
System.out.println("Interface_B_Impl.inter_b() 함수 실행");
}
}
interface Interface_B {
public void inter_b();
}
class Interface_a_Impl implements Interface_A {
public void inter_a() {
System.out.println("Interface_a_Impl.inter_a() 함수 실행");
}
}
interface Interface_A {
public void inter_a();
}
public class Exam_Interface {
public static void main(String args[]) {
// 부모_인터페이스클래스 선언 참조변수 = new 자식클래스();
// 이렇게 사용하면 돌아가긴 하나 전기를 많이 잡아먹음. 사용하지 말 것.
Interface_A ia = new Interface_a_Impl();
ia.inter_a();
// 자식_인터페이스클래스 선언 참조변수 = new 자식클래스();
// 옳은 방법
Interface_a_Impl iai = new Interface_a_Impl();
iai.inter_a();
}
}
Notes
- 책보고 주소값으로 공부
728x90
'국비지원교육 (22.01-22.07) > 강의노트' 카테고리의 다른 글
22-02-18(금) 017일차 [Java] 상속, 추상클래스, 인터페이스 예제 연습, ArrayList (0) | 2022.04.20 |
---|---|
22-02-17(목) 016일차 [Java] 인터페이스, 이클립스 설치 및 사용 방법, ArrayList (0) | 2022.04.18 |
22-02-15(화) 014일차 [Java] 생성자, 상속, 메서드 오버라이딩 (0) | 2022.04.16 |
22-02-14(월) 013일차 [Java] 객체 지향 프로그래밍, 상속, 생성자, this, 정보 은닉 (0) | 2022.04.16 |
22-02-11(금) 012일차 [Java] while문, do while문, 2차원 배열 (0) | 2022.04.16 |