2020년 9월 19일 토요일

[추천자바강의/자바교육]JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상) [추천자바강의/자바교육/추천자바동영상]JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상) 

 [추천자바강의/자바교육]JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상) [추천자바강의/자바교육/추천자바동영상]JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상) 



ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=755

JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바�

JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상)1. 인터페이스(interface) 사용목적인터�

ojc.asia


https://youtu.be/Qe9uIUDl4WU



JAVA의 인터페이스란? 인터페이스목적,개요, 실습, 추상클래스와 비교, 추상메소드(자바/JAVA/자바교육/자바강의/자바동영상/자바강좌/추천JAVA강좌/JAVA동영상) 



1. 인터페이스(interface) 사용목적


인터페이스는 추상클래스와 마찬가지로 어떤 클래스를 만들 때 그 “틀” 로 서 사용 되는 것이 주 목적 입니다. (계약상의 의무)

자바 컴파일러가 코드가 의존하는 계약(인터페이스에 정의한 추상 메소드)이 실제로 충족되는지(자식 클래스가 모두 구현했는지) 확인할 수 있다. 

자바는 단일 상속만 지원하므로 인터페이스를 이용하여 다중 상속 기능을 구현할 수 있습니다.

자바프로그래밍에서 결합도를 떨어뜨리는 프로그래밍을 할 때  인터페이스를 기반으로 하여 프로그래밍 합니다.

Emp라는 인터페이스가 있고 이를 구현한 Programmer, Designer 클래스가 있을 때

Emp e1 = new Programmer(); 

   e1.work();   //Dynamic Binding, Late Binding

Emp e2 = new Programmer(); 

   e2.work();  //Dynamic Binding, Late Binding



자바컴파일러는 컴파일 시점에는 Emp 타입에 work() 메소드가 있는지 체크만 하고 work() 메소드의 호출을 실제 바인딩 하지 않고 런 타임중에 오른쪽에 new 되는 클래스의 매소드로 바인딩 합니다. 이를 late binding, dynamic binding, run-time binding 이라고 합니다. 

바인딩이란 “logical address를 physical address로 mapping하는것”



2. 인터페이스(interface) 


추상클래스는 일부 메소드를 구현할 수 있고, 또 일부는 추상 메소드로 만들어 추상메소드를 상속받는 자식 클래스에서 재정의 하라고 하는 것 입니다.

인터페이스는 모든 메소드가 미완성 메소드인 추상 메소드이고 접근지정은 기본적으로 public으로 설정 됩니다. 추상클래스의 경우 protected, private 설정 가능합니다.

클래스를 설계도 라는 관점에서 보면 추상클래스는 “미완성 설계”도 이고, 인터페이스는 하나도 만들어 지지않은 “기본 설계도”로 볼 수 있습니다.

인터페이스는 상수(final 변수)와 추상 메소드로 구성 됩니다.

추상클래스와 마찬가지로 객체의 인스턴스를 생성할 수 없습니다.

클래스는 필드의 타입으로 기본자료형, 클래스 등이 올 수 있지만 인터페이스는 int, double 등의 기본 자료형 만이 필드로 사용될 수 있습니다. 또한 각 필드는 반드시 초기화가 되어야 하는데 초기화가 되어야 하는 이유는 인터페이스의 필드는 암시적으로 final과 static으로 설정되어 있기 때문 입니다.

int age = 5   static final int age = 5;

클래스가 인터페이스를 구현하게 되면 인터페이스 내에 정의된 상수는 상속된 것 처럼 직접 사용 할 수 있습니다.


 클래스가 구현하는 인터페이스의 모든 메소드를 재정의 하지 않으면 abstract 클래스로 선언되어야 합니다.

 서로 관련이 없는 클래스들 사이의 유사성을 표현시 용이 합니다. (수평적인 개념)

인터페이스는 여러 개의 인터페이스를 상속 가능 합니다.


interface I1

{ void m1(); }


interface I2

{ void m2(); }


interface I3 extends I1, I2

{ void m3(); }




클래스는 상위 클래스를 extends 하는 대신에 여러 개의 인터페이스 구현 가능 합니다.

인터페이스 계층 구조와 클래스 계층 구조는 다를 수도 있습니다.


3. Abstract class & interface


추상 메소드를 가지고 있고 이를 상속 받거나 구현하는 클래스는 이 추상 메소드를 재정의하고 구현해야 한다는 점, 그리고 다형성을 구현하는 방법이라는 점, 메소드들이 동적으로 바인딩 된다는 점들은 비슷합니다.

 차이점

      - 인터페이스는 서로 연관성이 없는 클래스들에 의해 구현될 수 있고 따라서 수평적인 구현이 가능하지만 추상클래스의 경우 단일 상속 개념 하에 수직적인 구조로 상속을 해야만 합니다.

     - 인터페이스에서는 메소드를 선언만 할 수 있으며 구현할 수 없고 이 구현은 인터페이스를 구현하도록 설정된 클래스에서 가능 합니다. 하지만 추상클래스의 경우에는 추상 클래스 내부에서 메소드의 선언과 구현이 모두 가능하며 또한 이를 상속 받은 클래스에서도 재정의가 가능 합니다.


인터페이스의 모든 메소드는 구현되지 않은 추상 메소드이고 추상클래스는 구현된 메소드도 가질 수 있습니다.

자바 인터페이스 안에 정의된 변수는 기본적으로 public static final 입니다. 즉 더 이상 수정이 불가능한 상수이지만 추상클래스의 필드는 private, protected등을 가질 수 있습니다.


추상클래스는 확장해서 상속 받아야 하며(extends), 인터페이스는 구현(implements) 해야 합니다.


인터페이스도 상속을 받는 것이 가능하지만 다른 인터페이스만 상속을 받을 수 있으며, 추상클래스는 다른 자바클래스를 상속받을 수 있고 다른 인터페이스도 여러 개 구현할 수 있습니다.

Java 클래스는 여러 인터페이스를 구현할 수 있지만 하나의 클래스 만 확장하여 상속받을 수 있습니다.

인터페이스, 추상클래스 모두 인스턴스화 할 수 없습니다.

추상 클래스는 인스턴스화 할 수 없지만 main ()이 있으면 호출 할 수 있습니다.



package javatest;


/**

 * 사원이 되려면 출근하고, 일하고, 퇴근해야 한다는 규칙, 계약사항

 * @author jclee

 */

interface Emp {

void gotoWork();

void work();

void getOff();

}


class Programmer implements Emp {

private String ename;


public Programmer(String ename) { this.ename = ename; }

public void gotoWork() {

System.out.println(ename + "사원이 걸어서 출근 합니다.");

}


@Override

public void work() {

System.out.println(ename + "사원이 개발을 합니다.");

}


@Override

public void getOff() {

System.out.println(ename + "사원이 걸어서 퇴근 합니다.");

}

}


class Designer implements Emp {

private String ename;


public Designer(String ename) {

this.ename = ename;

}


public void gotoWork() {

System.out.println(ename + "사원이 차타고 출근 합니다.");

}


@Override

public void work() {

System.out.println(ename + "사원이 디자인을 합니다.");

}


@Override

public void getOff() {

System.out.println(ename + "사원이 차타고 퇴근 합니다.");

}

}


public class EmpTest {

public static void main(String[] args) {

Emp p = new Programmer("홍길동"); p.gotoWork(); p.work(); p.getOff();

Emp d = new Designer("김길동"); d.gotoWork(); d.work(); d.getOff();

}

}





홍길동사원이 걸어서 출근 합니다.

홍길동사원이 개발을 합니다.

홍길동사원이 걸어서 퇴근 합니다.

김길동사원이 차타고 출근 합니다.

김길동사원이 디자인을 합니다.

김길동사원이 차타고 퇴근 합니다.



#자바인터페이스, #인터페이스, #JAVA인터페이스, #추상클래스#자바추상클래스#추상메소드#자바추상메소드#자바동영상#자바강의#자바교육#자바강좌#자바#JAVA#자바동영상강의#추천자바강의#추천자바강좌#JAVA동영상#JAVA강의#JAVA강좌#JAVA교육#JAVA#추천JAVA강의#추천JAVA교육#추천JAVA강좌#자바소스#자바실습 

(자바강의/자바동영상/자바/JAVA동영상/JAVA강의)자바에서 상속이란? Inheritance개념, 예제 실습

(자바강의/자바동영상/자바/JAVA동영상/JAVA강의)자바에서 상속이란? Inheritance개념, 예제 실습

 

https://youtu.be/FDNxI-7s65E


1. 상속

상속은 한 클래스의 기능(필드, 메소드)을 다른 클래스가 그대로 물려 받아 사용하는 것이다. (코드 재사용)

부모가 되는 클래스를 확장해서 새로운 자식 클래스를 만든다(“클래스 확장” 이라 한다.)

IS-A 관계

상위 클래스의 모든 내용을 하위 클래스가 계승

하위 클래스는 상속된 필드와 메소드 중에 private으로 선언된 것이 아닌 것에만 접근할 수 있다.

자바에서 상위 클래스는 오직 한 개만 존재하며 extends 키워드로 상속을 나타낸다.

장점

상위클래스 자체 및 변수, 메쏘드의 재사용

상위클래스를 사용하는 기존 코드의 재사용

논리적 상속 관계에 의한 가독성

final 키워드로 상속되는 것을 막을 수 있다.

 

 

2. 상속(Inheritance)과 생성자

생성자는 상속되지 않음,그러나 하위 클래스의 생성자에 의해 반드시 호출 된다.

하위 클래스 객체가 생성 될때 상속 받은 변수를 저장할 수 있는 메모리도 포함하여 객체에 할당한다.

하위 클래스의 생성자 몸체의 첫번째 문장은 다음중 한가지…

super(…) : 상위 클래스의 생성자를 명시적으로 호출

this(…)    : 동일 클래스의 다른 생성자를 호출

기타 다른 문장이 오면  super() 문장이 컴파일러에 의해 자동 삽입된다.

메모리 할당 방법

상위 클래스의 메모리 영역을 합한 메모리 영역을 힙에 할당

생성자는 단지 할당된 메모리를 초기화하는 역할

 

3. Sub Class Member

 5a4eaeb8d7850d3c0d12776e2b6846d9_1600515 

 

4. 실습

 

5a4eaeb8d7850d3c0d12776e2b6846d9_1600515
 

 

class Emp {

   String ename; 

   public void gotoWork() {      System.out.println(ename + " 출근");   }

}

 

class Programmer extends Emp {

   public Programmer(String ename) {

      //super();

      this.ename = ename;

   }

   public void work() {

      System.out.println(ename + "이 개발 합니다");

   }

}

public class EmpTest  {

   public static void main(String[] args) {

      Programmer p = new Programmer("홍길동");       p.gotoWork();      p.work();

   }

}

 

홍길동 출근

홍길동이 개발 합니다

 

 

#객체지향, #자바객체지향, #JAVA상속이란?, #자바상속이란?, #자바강의, #자바동영상, #자바교육, #자바강좌, #자바, #JAVA, #상속, #자바상속, #자바객체, #자바클래스, #클래스, #JAVA객체, #JAVA클래스, #자바변수, #클래스변수, #인스턴스변수, #자바동영상강의, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바소스   

(JAVA강의/자바교육/자바강좌/자바동영상/자바강의/자바/JAVA)자바가상머신,자바VM이란?,StackOverFlowError, OutOfMemoryError JVM Runtime Data Area, JVM실행엔진, 클래스로더


(자바교육/자바강좌/자바동영상/자바강의/자바/JAVA)자바가상머신,JVM?,StackOverFlowError, OutOfMemoryError JVM Runtime Data Area, JVM실행엔진, 클래스로더 


http://ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=752


 

1. JVM이란? JVM 스택

 

JRE(Java Runtime Environment)은 크게 자바 API와 JVM으로 구성된다.

JVM(자바 가상 머신, Java Virtual Machine)은 클래스 로더를 통해 자바 클래스를 메모리로 로드하여 자바API를 이용하여 실행한다.

JVM은 스택 기반으로 운영되는데 자바 쓰레드가 생성되면 그 쓰레드를 위한 JVM 스택을 생성하는데 이를 Run-Time 스택이라고 한다.

JVM 스택은 메소드를 위한 각 메소드 마다 스택 프레임을 할당하는데 해당 스레드가 수행하는 모든 메서드 호출은 매개 변수, 로컬 변수, 중간 계산 및 기타 데이터를 포함하여 해당 메소드의 런타임 스택에 저장된다.  메소드의 실행이 종료되면 JVM 스택에서 메소드의 런타임 스택 항목이 제거된다.

최종적으로 쓰레드가 종료 되기 직전에 JVM 스택은 해제된다. 결국 JVM 스택에 저장된 데이터는 해당 스레드에서 사용할 수 있으며 나머지 스레드에서는 사용할 수 없다. 따라서 메소드 안에서 선언된 로컬 데이터는 스레드로부터 안전하다고 말할 수 있다

객체는 사용자의 new연산자에 의해 메모리 힙에 객체가 생성되고 JVM의 GC(Garbage Collector)에 의해 자동으로 힙 메모리에서 해제된다.

 

2. JVM 스택

5a4eaeb8d7850d3c0d12776e2b6846d9_1600502
 

 

3. StackOverFlowError, OutOfMemoryError

StackOverflowError는 스택에 다음 메서드 호출을 위해 새 스택 프레임을 추가 할 공간이 더 이상 없을 때 스레드에서 발생되는 예외이다. JVM -Xss 옵션을 사용하여 JVM 스택 크기를 늘려 StackOverflowError 예외를 방지 할 수 있다.

 

실행중인 스레드가 너무 많으면 JVM Stack을 할당하기 위해 예약 된 메모리 영역도 가득 차서 OutOfMemoryError 예외가 발생할 수 있다. 불행히도 OutOfMemoryError 예외를 피하기 위해 JVM 스택 영역을 늘리는 JVM 옵션이 없다.

 

4. JVM Data Type

C/C++ 언어는 16비트, 32비트, 64비트 플랫폼에 따라 int 형의 크기가 변하지만 JVM은 기본 자료형인 int는 4바이트로 고정시켜 타입의 안정성을 꾀하고 플랫폼 독립성을 보장한다.

원래 자바는 Sun MicroSystems(지금은 ORACLE로 넘어감)에서 개발했지만 JVM 명세만 따른다면 어떤 벤더라도 이를 구현할 수 있다.

 

5. 자바프로그램 실행과정, 클래스로더

자바프로그램을 실행하면 JVM의 클래스 로더가 컴파일 된 자바 바이트코드(.class 파일)을 런타임 데이터 영역(Runtime Data Area)의 Method Area에 로드하고 실행 엔진(Execution Engine)이 이를 기계어로 변역 하면서 실행한다.

자바 클래스는 기본적으로 컴파일 타임이 아닌 실행 타임(또는 처음 참조될 때)에 클래스 로더에 의해 동적으로 로드 된다.

클래스 로더는 클래스를 로드 할 때 이미 로드된 클래스인지 확인하기 위해 네임스페이스에 보관된 FQCN(Fully Qualified Class Name)을 기준(패키지이름.클래스이름)으로 클래스를 찾고 FQCN이 같더라도 네임스페이스가 다르면 다른 클래스로 간주하여 로드 한다. 즉 각각의 클래스 로더가 각자 네임스페이스를 가지고 있기 때문에 패키지명까지 같은 즉, FQCN이 같은 클래스라도 네임스페이스가 다르면 다른 클래스로 간주한다.

여러 클래스 로더 중 부트 스트랩 클래스 로더는 자바 기본 API에 있는  클래스를 로드하며 다른 클래스 로더와 달리 자바가 아닌 네이티브 코드로 되어 있다.

시스템 클래스 로더는 사용자가 지정한 CLASSPATH 경로의 클래스를 로드 한다.

 

클래스 로드 5단계

로드(Loading) : JVM에 클래스 로드

검증(Verifyng) : 클래스가 JVM 스펙, 자바 언어 스펙을 지켰는지 검증, 가장 오래 걸린다.

준비(Preparing) : 클래스 변수를 위한 메모리 할당하고 기본값으로 초기화 한다.

분석(Resolving) : 클래스의 상수 풀(Constant Pool) 내의 모든 심볼릭 레퍼런스를 실제 JVM의 다이렉트 레퍼런스로 변경. 자바 프로그램에서 어떤 메서드나 필드를 참조할 때 JVM은 런타임 상수 풀을 통해 실제 메모리상 주소를 찾아서 참조하게 된다. 또한 클래스를 찾을 수 없을 경우에는 NoClassDefFoundError가 던진다. 두 가지 유형이 있는데, Eager : 다른 필드, 메서드 또는 클래스에 대한 모든 Symbolic Reference를 즉시 해결, Lazy : Symbolic Reference 확인은 메서드를 처음 사용할 때까지 연기된다. 존재하지 않는 클래스를 참조하는 클래스는 이 참조를 확인할 필요가 없는 경우 오류가 발생하지 않는다.

초기화(Initializing) : static변수 초기화

 

6.  JVM의실행엔진(Execution Engine)

자바 바이트코드(.class 파일)를 명령어 단위로 읽어서 네이티브 코드(기계어)로 번역하고 실행한다.

바이트코드의 각 명령은 1바이트의 OPCODE와 추가 피 연산자로 구성되어 있는데 실행엔진은 하나의 OPCODE를 가지고 와서 피연산자와 함께 작업을 수행한다.

실행엔진은 자바 바이트코드를 실제 OS에서 인식할 수 있는 기계어로 변환을 시도하는데 다음과 같이 두 가지 방법이 있다.

인터프리터 : 바이트 코드 명령어를 읽고 순차적으로 실행한다.

JIT 컴파일러:느린 실행이라는 인터프리터의 단점을 보완하고 성능을 향상시킨다. JIT 컴파일러는 바이트 코드의 유사한 부분을 동시에 컴파일하므로 컴파일에 필요한 총 시간이 줄어든다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일 하여 기계어로 번역한다. 이후부터는 실행 메소드를 더 이상 인터프리터 방식으로 변환하지 않고 네이티브 코드를 직접 실행하며 실행된 네이티브 코드는 캐시에 보관되므로 컴파일 된 코드는 빠른 속도로 실행될 수 있다. JIT를 이용한 컴파일은 시간이 오래 걸리므로 한번만 실행되는 코드는 인터프리터 방식이 훨씬 유리하다. 그러므로 JIT컴파일러를 사용하는 JVM은 내부적으로 해당 메소드가 자주 수행되는지를 체크하여 일정 정도를 넘을 때만 JIT 컴파일을 한다. 

 

Hot Spot VM은 핫스팟 컴파일러라고 부르는 JIT 컴파일러를 이용하는데 핫스팟이라고 부르는 이유는 내부적으로 가장 컴파일이 필요한 부분(Hot Spot)을 찾아 이 부분을 네이티브 코드(기계어)로 번역한다.

Hot spot VM은 한번 JIT컴파일러를 통해 컴파일된 바이트코드라도 더 이상 자주 사용되지 않는다면 캐시에서 네이티브 코드를 제거하고 다시 인터프리터 방식으로 동작한다.

 

7. 실습

 

5a4eaeb8d7850d3c0d12776e2b6846d9_1600502
 

 

 

#자바강의, #자바동영상, #자바교육, #자바강좌, #자바, #JAVA, #JVM, #자바JVM, #클래스로더, #JVM실행엔진,  #자바객체, #자바클래스, #클래스, #JAVA객체, #JAVA클래스, #자바변수, #클래스변수, #인스턴스변수, #자바동영상강의, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바소스  

2020년 9월 18일 금요일

(자바동영상)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌) (자바동영상,JAVA교육, JAVA강의)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌)

 ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=751

(자바동영상)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/

(자바동영상)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌)1. 객체의 생성자(constructor)객체가 생성될 때 (new 할때)자동적으로 불림new 연산�

ojc.asia


(자바동영상)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌) (자바동영상,JAVA교육, JAVA강의)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌) 

https://youtu.be/XGQZiFiyj90



(자바동영상)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌) (자바동영상,JAVA교육, JAVA강의)객체의 생성자(Constructor), 객체 생성과정, this 사용법(자바/JAVA/자바강의/자바동영상/JAVA교육/자바강좌) 


1. 객체의 생성자(constructor)


객체가 생성될 때 (new 할때)자동적으로 불림

new 연산자가 호출되면 생성될 객체의 메모리가 할당되고 생성자가 호출되고 객체가 초기화(인스턴스 변수들의 초기화) 된다.

클래스 이름과 같은 이름을 갖고 메소드와 유사하지만 반환형(리턴타입)이 없다.

메쏘드와 같이 직접 호출할 수 없으며, new 연산자에 의해 간접적으로 호출


클래스에 생성자가 정의 되어 있지 않아도 된다. 생성자가 하나도 없는 경우에는 컴파일러가 몸체가 비어있는 매개변수 없는 생성자를 정의해 준다.

Class Circle {

Circle() { …. }

……

}

생성자는 ‘this’ 키워드를 사용하는 특별한 문법에 의해 다른 생성자(자기 자신의 다른 생성자)를 호출할 수 있다.

상속 관계에 있는 하위클래스에서 상위클래스의 생성자를 호출 할 때는 super라는 키워드를 쓰며 이러한 this(, super(등을 이용한 다른 생성자의 호출은 생성자의 첫 문장에 나타나야 한다.


class Emp extends Object{

   String ename;


   public Emp() {

      this("홍길동");

   }


   public Emp(String ename) {

      this.ename = ename;

   }

}


2. this

앞으로 생겨나게될 자기 자신객체에 대한 참조

인스턴스 메쏘드 내에서만 사용 가능용도

은닉된 이름을 사용

    double r;

public void setRadius( double r ) {

    this.r = r; /*인스턴스 변수와 같은 이름의 지역변수가 선언, 사용 되었으므로 메소드 안에서 인스턴스 변수를 가리킬때는 this를 사용해야 한다.*/

}

자신의 객체 참조값을 다른 객체의 메쏘드에 전달

obj.someOtherMethod( this );

자신의 객체 참조값을 반환

return this;


3. 생성자(constructor) 실습

class Emp {

   String ename;

   public Emp() {   

      this("홍길동");   

   }

   public Emp(String ename) {      

      this.ename = ename;   

   }


   public String toString() {      return "[EMP : ename = " + this.ename + "]";   }

}

public class EmpTest  {

   public static void main(String[] args) {

      Emp e = new Emp(); System.out.println(e);

      Emp e1 = new Emp("김길동"); System.out.println(e1);

   }

}


[실행결과]

[EMP : ename = 홍길동]

[EMP : ename = 김길동]



4. 객체의 생성과정

New 수식에 의해 객체의 메모리가 할당 되고 객체내의 모든 인스턴스 변수는 default 초기치(0, ‘\u0000’,false, null)로 초기화 된다

생성자가 호출되어 다음 순서대로 실행된다.

생성자 몸체의 처음 문장이 this(…)일 경우엔 해당 생성자를 호출하고 아닐 경우 상위 클래스의 생성자를 호출 후 인스턴스 변수의 초기화 수식(변수명 = 수식;)과 초기화 블록이 실행된다.

생성자의 나머지 몸체가 실행된다.


5. 객체의 생성과정 실습

class Test {

   Test(String s) {      System.out.println("Test s : " + s);   }

}

public class ObjectConstructorTest {

   private Test t1 = new Test("1");   private Test t2 ;   private int[] intArray = new int[] {1,2,3,4,5};   private int sum = 0;

  

   {

      t2 = new Test("2");

      sum = Arrays.stream(intArray).sum();

      System.out.println("배열 합 : " + sum);

   }


   public ObjectConstructorTest() {

      System.out.println("ObjectConstructorTest >> 생성자 호출완료");

   }


   public static void main(String[] args) {      new ObjectConstructorTest();     }

}


[실행결과]

Test s : 1

Test s : 2

배열 합 : 15

ObjectConstructorTest >> 생성자 호출완료





#자바강의, #자바동영상, #자바교육, #자바강좌, #자바생성자, #자바객체, #자바클래스, #자바객체,  #클래스, #JAVA객체, #JAVA클래스, #자바, #JAVA, #자바변수, #클래스변수, #인스턴스변수, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바소스 




(추천자바강의/자바동영상/자바강좌/자바교육)JAVA클래스(Class)와 객체(Object), 클래스,객체 초기화 순서, 자바실행순서

 (추천자바강의/자바동영상/자바강좌/자바교육)JAVA클래스(Class)와 객체(Object), 클래스,객체 초기화 순서, 자바실행순서


ojc.asia/bbs/board.php?bo_table=LecJava&wr_id=750

불러오는 중입니다...

https://youtu.be/3pBujuGBX6g



1. 클래스(Class)

일반적으로 적용할수 있는 변수와 메소드를 정의하고 있는 설계도 또는 프로토타입 이다.

사용자 정의 자료형, 객체의 자료형

Field라는 멤버변수와 오퍼레이션을 가하는 method 로 이루어짐

클래스의 이름은 대문자로 시작, 다음 단어의 시작은 대문자


2. 객체(Object)

클래스의 인스턴스는 new 수식에 의해 만들어지며 이것이 객체이다.

타입이 클래스인 변수

이름은 소문자로 시작, 다음 단어의 시작은 대문자


3. 클래스와 객체의




 



4. 클래스 선언

선언하면서 붙여야 하는 키워드

- public(접근지정자가 맨 처음 온다.)

- abstract(추상클래스를 선언)

- final(더 이상 자식으로 상속되지 않음을 명시)

- ClassName(클래스 이름)

- extends(다른클래스를 상속)

- implements(인터페이스 구현) 


public abstract class Programmer extends Emp implement Driver {



5. 클래스 초기화 과정


클래스 초기화 순서

클래스가 실행되기 위해 메모리에 적재된 후 딱 한번 초기화

모든 클래스 변수(static 변수)가 디폴트 값으로 초기화(0,’\u0000’,false, null)

클래스 변수 초기화 수식 ( static int I = 999 )

클래스 변수 초기화 블록( static {  …  }  )


클래스 변수 초기화 블록 사용

클래스 변수 초기화 수식만으로 부족할 때

배열 클래스 변수를 초기화할 때

여러 개의 클래스 변수를 한번에 초기화 하는 경우

예외(exception)을 발생시키는 메소드를 호출할 필요가 있을 때



6. 예제


class StaticInit

{

    public static int i; 

    public static int nums[] = new int[10];  // 클래스 변수 초기화 수식


    static          // 클래스 초기화 블록 

    {

        for(int i = 0; i < 10; ++i)

            mums[i] = i;

        System.out.println( "클래스 초기화 블록 실행" );

    }


    public static void main( String args[] )

    {

        System.out.println("main 메소드 진입");

        new StaticInit();

        new StaticInit();

    }

}


[실행결과]

클래스 초기화 블록 실행

main 메소드 진입



7. 객체의 생성과정

new 키워드에 의해 합 영역에 객체의 메모리가 할당 되고 객체 내의 모든 인스턴스 변수는 default 초기값으로(0, ‘\u0000’,false, null)로 초기화 된다.


생성자가 호출되어 다음 순서대로 실행된다.

생성자 몸체의 처음 문장이 this(…)일 경우에는 해당 생성자를 호출하고 아닐 경우 상위 클래스의 생성자를 호출 후 인스턴스 변수의 초기화 수식(변수명 = 수식;)과 초기화 블록이 실행된다.

생성자의 나머지 몸체가 실행된다.


8. 예제class Circle

{

    private double radius = 0; 

    public Circle(double radius) {

        this.radius = radius;

        System.out.println("Circle(double radius): radius = " + this.radius);

    }

}


class CircleTest

{

    private Circle c1 = new Circle(1); // 인스턴스 변수의 초기화 수식(1)

    private Circle c2;


    {

        outer = new Circle(2);  // 초기화 블락    (2)

    }


    public CircleTest() {          // 생성자 (3)

       System.out.println( "CircleTest()" );

    }


    public static void main(String args[]) {

        new CircleTest();

    }

}


[실행결과]

Circle(double radius): radius = 1.0

Circle(double radius): radius = 2.0

CircleTest()



#자바클래스, #자바객체,  #클래스, #JAVA객체, #JAVA클래스, #자바, #JAVA, #자바변수, #클래스변수, #인스턴스변수, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바소스 


(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...