교재에서는 Object와 Instance는 같은 의미로 많이 쓰인다.

 

Polymorphysm : 다형성

 


 

 

os에서 자바로 전달 될때 무조건 문자열로 전달된다.

 


 

 

constructer

static

memory 구조

gc

클래스의 형변환(upcasting,downcasting)   **중요

access modifier

 

 

생성자(constructer)

 

 

생성자란?

인스턴스의 초기 모양을 결정해 주는 것이다.

(=처음 메모리 상에 올라갈때 초기 모양을 결정)

 

생성자는 웬만하면 pulbic 으로 시작한다.(다른 경우는 나중에 알려주신다니 그냥 알고 있자.)

 

public Point2D(){

}

매개변수가 없고 중괄호{} 안에 아무 내용이 없는 껍데기 생성자는 default 생성자라고 부른다.

 

 

 

PointTest.java

 

초기값을 준 상태로 생성자를 만들고 싶다면 { } 안에서 설정을 해주면된다.


public Point2D( ) {
    this.x = 1;
    this.y = 2;
}

 

우리가 값을 준 상태로 생성하고 싶을때는 어떻게 해야할까?

Point2D pt = new Point2D(10,20)                                              => 이런 경우를 의미한다.

생성자 오버로딩으로 구현가능하다.

 

 

생성자도 모듈화 시켜서 기능을 모아서 처리해 주는게 좋다.

 

public Point2D() {
this.x = 1;
this.y = 2;
}

public Point2D(int x, int y) {
this.x = x;
this.y = y;
}

위의 코딩은 굉장히 안좋은 코딩이다.

 

위의 코딩 보다는 아래의 코딩이 훨신 좋다.

 

public Point2D () {
    this(1,2);                           

    //같은 클래스 내의 또 다른 생성자를 호출하는 this           

    (또다른 생성자를 호출하는 this는 항상 맨 위에 있어야한다.)
    System.out.println("Point2d() 생성자 수행");
}


public Point2D(int x, int y) {
    this.x = x;
    this.y = y;
}

 

 

생성자의 흐름을 파악하는 것이 굉장히 중요하다.

 

Point3D.java

 

public Point3D(int z) {
    super();
    this.z = z;
}

 

 

super()

 

super()의 의미

 => 부모 클래스로 가서 parameter없는 생성자를 만들어라    라는 의미이다.

 

부모클래스를 상속받는다고 명시되어있지 않는다면 Object 클래스를 상속받는다는게 생략되어져 있다.

(Object 클래스의 파라미터 없는 생성자를 실행 하라 라는 의미)

(하지만, Object 클래스의 파라미터 없는 생성자는 딱히 역할이 있는건 아니다.)

 

Point3D pt3 = new Point3D(1000,2000,300);

 

default 생성자

 

default생성자는 JVM이 생성자가 하나도 없을때 자동으로 만들어 주기도 한다.

(컴파일러가 하는게 아니다!!!! 클래스 로더가 기계어로 번역할때 그때 만들어 주는 거라고 한다.)

 

만약에 default생성자 이외에 내가 새로운 생성자를 만들었다면

JVM 에서 기존의 default생성자를 만들어 주지 않기 때문에 내가 자동으로 꼭 만들어 줘야한다.

 

PointTest 예제

 

*자식클래스 생성자에서 super() 가 명시되어 있지 않더라도 항상 있다고 생각하면된다.

왜냐하면 부모 클래스의 인스턴스를 참조해서 자식클래스가 만들어 지는 것이기 때문에 항상 자식 클래스 생성자에 super()가 있는 것이다.

 

 

패키지와 임포트

 

dev64 - mylib 폴더 만들고 거기에 export 하기

 

 oop1 패키지 export 해보기

java_import_test 프로젝트 만들고

export한 jar 파일 추가하기

 

 

a패키지 - ImportExam 만들고 

Point2D 사용해 보기

 

import oop1.Point2D;

 

public class ImportExam {
    public static void main(String[] args) {
        Point2D pt = new Point2D();
        pt.setX(10000);
        pt.setY(20000);
        pt.print();

    }
}

 

import문 잘 들어가는지 확인해보자!

 

import 문에 있는  *

 

import oop1.Point2D; 도 가능하지만

import oop1.*; 도 가능하다.

(단, 이 경우는 패키지 안에 패키지가 있는 경우에는 인식되지 않는다.

인식하게 하고 싶다면 import oop1.내부패키지명.*   이런식으로 지정해 줘야한다.)

 

 

package

 

패키지란?

패키지는 비슷한 목적으로 생성된 클래스 파일들을 한곳에 모아 둔 폴더를 의미한다.

 

예를들어 서로다른 패키지에 같은 클래스 이름이 있는 경우에는 두 클래스를 import를 할 수가 없다.

 

import oop1.Point2D;

import java.awt.geom.Point2D;

 

이런 경우에는 Point2D 클래스를 입력하면 어떤 패키지에 있는 클랫스를 참조해야하는건지 알 수가 없다.                           

그래서 서로 다른 패키지에 같은 클래스 이름이 있는 경우에는

한개 패키지는 import를 해서 사용하고

다른 한개 패키지는 풀네임으로 적어서 사용해야한다.

 

java.awt.geom.Point2D

 

 

 

 

Amateras UML설치법

 

https://takezoe.github.io/amateras-update-site/

주소를 사용해서 Amateras UML을 설치한다.

 

 

 

1단계) eclipse끄고 eclipse폴더를 찾는다.
2단계) eclipse.ini파일 혹시 모르니까 하나더 복사해 놓기
3단계) eclipse.ini를 연다.

vm 밑에
오타 방지를 위해 우리가 설치한 c- jdk - 11.0.16 - bin 폴더 경로 복사 한다음
원래 오픈 jdk 경로 지우고   우리가 다운 받은 oracle 사의 jdk-bin 경로 를 넣는다.

 

 

 

 

 

uml에서 

 

Generalization 표현방법

먼저 sub클래스 찍고 super 클래스 찍기

 

 

export로 src로 내보내고 ctrl+c ctrl+v로 원하는 패키지에 넣어두기

 

 

super클래스에서 상속받은 자식 클래스를 참조하는건 언제든지 가능하다.(upcasting)

Peopel p = new Employee();

Peopel p = new Student();

sub클래스의 인스턴스를 super클래스 참조변수로 참조하는걸 업캐스팅이라고 부른다.

(작은 범위의 인스턴스를 생성하고 큰 범위를 참조하게 하는걸 의미)

 

 

 

오늘의 꿀팁

 

학번을 int가 아니라 String으로 설정하는 이유

1번 일단 학번으로 연산할 일이 없다.

2번 몇한번인지 검색할때 문자열로 처리하면 쫌 더 쉽다.

 

오버라이딩 하지 않는 이상

안쓰는 프로젝트

프로젝트(우) - close 프로젝트 해주는게 좋다

 

오늘의 고민

 

만약에 @Getter 와 @Setter로 만들었는데

다른 생성자를 더 만들고 싶다면????

그냥 아래에다가 코딩 하면되는걸까?

'Java' 카테고리의 다른 글

[Java]상속/casting/다형성  (1) 2022.09.29
[Java]클래스/ 객체/메서드  (0) 2022.09.28
[Java]String 클래스 / 문자열 형변환  (1) 2022.09.27
[Java]제어문/달력/메모리 구조  (0) 2022.09.26
[Java] eclipse단축키 모음  (0) 2022.09.25
복사했습니다!