3:1:01 ~ 3:1:13

인터페이스 _ii

  • 연결점 : TV(객체1) ↔ 리모콘(인터페이스) ↔ 사용자(객체2)
  • 객체 혹은 프로그램이 재공하는 기능을 다른 사용자 혹은 개발자(클라이언트)가 코드를 보지 않고도 사용(다른 객체, 혹은 즉시)할수 있을 정도로 눈에 잘 보이게(명시적으로) 입력과 출력 도구를 제공 하는 것이다.
    • 인터페이스를 잘 사용한다면: 재사용성이 높아진다. 공유로 다른 사람이 사용하기에 편하게 코드를 만들수 있다. (Git hub에서 다른사람들이 많이 사용하는 소스를 만든다 : 1) 인터페이스를 잘사용한다 2)가독성이 좋다. 3)코드 영역별로 의미부여가 잘 되어있어서 복합적인 이해로 인한 어려움이 줄어든다.)
  • 인터페이스에는 이런 기능이 재공된다 라는 명시화가 되어있는데로. 인터페이스가 제공하는 기능에는 계약적 책임이 생긴다. ( 명세 한다 )
  • 예 ) 자바 > 인터페이스 > SQL
    • 인터페이스 : 자바의 커넥션 혹은 프레임워크가 실제로 인터페이스 객체로 명세가 되어있고 명세는 사용법이 문서화 되어있는 자료 파일(라이브러리) 를 제공하는것이 일반적이다.
      • 코드를 보지 않고 사용법의 문서만 보고 사용할수 있게 만드는 방법도 있다.

스트래티지 패턴 : 인터페이스의 다형성 : 호환성

하나의 인터페이스를 여러 하위 클레스에서 구현 할때 인터페이스의 내용을 바꿔서 사용할수 있는 기능을 이용해서. 호환성이나 선택 분기점을 생성할수 있습니다.

사용 예시 )

  1. 계산기 프로그램을 만들어서 1)윈도우 2)리눅스 3)유닉스 4)웹 환경을 인지하여 환경에 맞는 UI나 리소스를 사용하도록 작성할수 있습니다.
  2. DB에 입력되는 데이터가 1)오라클 2)mysql 3)mssql 등의 DB 버전별, DB종류에 따라서 다르게 입력되도록 호환성을 높일수 있습니다.
  3. 한번 작성한 글이 티스토리,워드프레스,GITPAGE 등으로 각각 디자인을 유지한체 다른 문서 입력규격 으로 입력되게 할수 있습니다.
  4. 키워드는 하나의 기능을 다양한 방법으로 선택에 의해 처리할수 있도록 할수 있는것에 있습니다.

예제 코드 작성은 내일 이어서..


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디

포켓몬 시점에서 본 컨샙

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

<복습_인터페이스>

인터페이스 클레스 내의 모든 메소드는 public abstract 로 변환

인터페이스 클레스 내의 모든 변수는 public static final 로 변환

인터페이스 클레스 만드는 방법

class 대신에 interface를 붙인다.

public interface interfaceClass{

}

인터페이스 객체를 구현(상속받는) 하는 방법

implement를 상속의 extends처럼 사용한다.

  • 상속과 다르게 하나의 인터페이스를 여러 클레스가 구현할수 있다.
public class implementClass implement interFaceClass{
// 가상 메소드를 구현 하거나. 스스로를 가상 클레스로 만들어서 하위 클레스에서 가상메소드를 
// 전부 구현함으로서 인스턴스를 만들수 있는 객체를 만들거나 한다.
}

UML과 다이어그램에서 인터페이스 작성법

(점선) + (속이 빈 화살표) : 화살표의 세모 옆에 implement(구현) 이라고 더 확인하기 쉽게 적어 놓기도 한다.

<CODE TEST> 

  1. interface 내에 default,private 이외의 메소드에 구현부의 중괄호를 입력하면 오류가 발생한다.

  • 인터페이스내의 변수는 아무것도 붙여주지 않아도 static final이 붙는걸 확인할수 있었다.

  • 아래 코드(code1)와 같이 interface A> abstract implement B > extends C 로 메소드 구현 책임을 넘길수도 있었다.
  • C는 A의 타입을 상속받았다 라고 표현하기도 한다( 상위 클레스는 하위 클레스의 값을 담을수 있기 때문에 타입을 상위클레스로 규격화 할수 있다. )

<code1>

package TEST;

public class Do {
	public static void main(String[] args) {
		Sub_Sub S = new Sub_Sub();
		S.SuperMethid();
	}
}
package TEST;

public class Sub_Sub extends Sub {

	@Override
	public void SuperMethid() {
		System.out.println("Sub_Sub_SuperMethod");
		
	}
	
}
package TEST;

public abstract class Sub implements Super {

	@Override
	public abstract void SuperMethid();
	
}
package TEST;

public interface Super {
	abstract void SuperMethid();
};

인터페이스의 특징

  • 다중 구현(상속)이 가능하다. : implement하는 클레스가 많을수 있다.
    • 상속이 가능한 메소드와 변수에 접근하는 하위클레스들이 서로 언제 호출하고 입력하는지 모호하기 때문이며. 인터페이스는 변수는 상수타입이고 메소드는 구현부가 없기 때문에 하위 클레스에서 값을 전달하여 저장할수 없기 때문이다.

전문 용어


 

에러 메세지


학습 시간


 

캠 스터디

`


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

<탬플릿 메서드 패턴>

  • 추상 클레스추상 메소드를 이용해서 탬플릿 클레스를 제작할수 있다.
  • 문서의 서식 처럼 코드의 흐름이나 반복적으로 사용하는 구조를 자동화 하기 위해서 메서드의 이름만 선언한후 선언한 메서드를 묶어서 관계와 순서를 정의하며. 메서드의 자세한 내용은 나중에 정의하는 것이다.
    • 일정한 퀄리티와 하위 클레스에서 영향을 받는 흐름의 제어 등을 하기 편리해 질것 같다. - (내 생각)
      • 예를 들어서 문서에 기본적으로 포함되는 작성일> 제목 > 본문 > 인사말 처럼 반복되는 구조나 흐름을 정의해 놓고 반복적인 설계의 단계를 자동화 하는 기능이다. - (내생각)
    • 초보 프로그래머가 다루는 영역은 사실 서식이 만들어져 있는 문서의 내용을 채우는 것이 빝칸체우기가 일반적인 출발선 이다 -(페스트캠퍼스 자바 기초강의)
  • 클레스를 final로 정의하여 하위 클레스에서 메소드와 변수의 내용을 재정의 할수 없게 한다.
  • 프레임워크의 기본적인 형태 이다.
  • 상속받는 클레스들에서 공통적 으로 사용되는 메소드는 탬플릿 클레스에서 구현부를 정의하고.
    • 일부적인 하위 클레스에서 재정의 하게 할수도 있다.
    • 재정의가 위험한 결과를 불러올수 있는 메서드의 경우(리턴값이 꼭 필요한 경우등) final 로 메서드의 재정의를 막을수 있다.
  • 상속받는 객체의 특성으로 인해 사용하지 않는 메소드는 구현부를 빈칸으로 넣어 아무기능도 없게 제작한다.

final class <TEST code>

final class의 속성은 내부의 맴버 변수를 final 속성으로 만들지는 않기 때문에. 내부의 값에 접근해서 변경할수는 있다.

package abstractClass;

public class Do {
	public static void main(String[] args) {
		SubClass_A A =new SubClass_A();
		SubClass_B B =new SubClass_B();
		
		System.out.println("==SubClass_A의 인스턴스.doing : method 결과==");
		A.doing();
		System.out.println();
		System.out.println("==SubClass_B의 인스턴스.doing : method 결과==");
		B.doing();
		staticFinalClass.finalInt_A = 100;
		System.out.println(staticFinalClass.finalInt_A);
	}
}
package abstractClass;

public class SubClass_A extends Super {

	@Override
	void method_1() {
		System.out.println("call SubClass_A method");
	}

	@Override
	void methodOnlysubClass_A() {
		// 메서드 훅으로 작동 되지 않게 구현부를 비워 놓는다.
	}
	

}
package abstractClass;

public class SubClass_B extends Super {

	@Override
	void method_1() {
		System.out.println("call SubClass_B method");		
	}

}
package abstractClass;

public abstract class Super {
	//탬플릿 메소드 : 코드의 흐름 : 설계
	final void start() {
		System.out.println("공통_재정의_금지: 프로그램이 작동된다");
	}
	//ㄴ공통 작동 영역 : final로 재정의 될수 없다.
	abstract void method_1();
	//ㄴ개별 메서드 구현 영역
	void methodOnlysubClass_A() {
		System.out.println("SubClass_B에서만 작동 된다");
	}
	//ㄴ 공통으로 작동되는 코드지만 훅 메소드로 작동시키지 않을수 있다.
	void doing() {
		start();
		method_1();
		methodOnlysubClass_A();
		
	}
}
package abstractClass;

public final class staticFinalClass {
	static int finalInt_A = 1;
}

<인터페이스>

  • 추상 메서드 로만 구현되어 있다. (구현 코드가 없었습니다. 얼마 전까지는 ^^.)
    • 버전8 부터default,static,private처럼 메소드에 구현부가 있는 문법이 생겨 났습니다.
  • 인터페이스로 선언한 클레스의 메소드들은 추상 메소드로 변환 됩니다. abstract 를 메소드에 선언하지 않아도 프리 컴파일 단계에서 모든 메서드에 public abstract 가 자동으로 붙습니다.
  • 인터페이스로 선언한 클레스의 맴버 변수들은 상수로 변환 됩니다. 프리 컴파일 단계에서 자동으로 public static final 이 붙게 됩니다.
    • precompile(미리 컴파일)이란?
      • 컴파일 전에 수행하는 작업으로 라이브러리를 불러오거나 SQL을 DB에 연결

인터페이스의 정의는 내일 이어서 !


전문 용어


 

에러 메세지


학습 시간

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

<추상 클래스>

  • 추상 메소드의 구현부를 구현해야하는 책임이 있는 서브 클레스도 추상클레스로 만들면 서브 클레스를 상속받는 sub의 sub클레스에 구현해야하는 책임을 넘겨 줄수 있습니다.
	package abstract_2;

public abstract class Super {
	abstract void Do();
}
package abstract_2;

	public abstract class Sub extends Super {
		 
}
package abstract_2;

public class Sub_Sub extends Sub {
	@Override
	void Do() {
		System.out.println("추상 클레스 호출 완료 ^^!");
		//상위 클레스의 메소드를 구현 해야하는 책임은 하위 클레스에 있습니다.
		// ㄴ 하위 클레스에서 추상클레스의 메소드를 구현하지 않는다면 . 하위 클레스 또한 추상 클레스로 제작하면 됩니다.
		//jdk 안에는 많은 추상 클레스와 , 인터페이스가 있습니다.
		//ㄴ 이런것을 프레임워크 라고 하기 때문에. 프레임워크를 떠올려볼수 있습니다.
	}
}
  • 추상 클레스는 내부가 비어 있어도 그 자체만으로도 인스턴스가 만들어지는것이 막힌다.
    • 내부에 저장할수 있는 값을 품고 있지 않기 때문에 다수의 존제가 불필요 합니다. (하나만 있어도 충분) . - 메모리의 소모가 증가하고, 컴파일러가 모호한 기능을 이해하기에 부족하기 때문 - (headfirst JAVA) 
  • 추상 클레스를 기반으로 배열 종류의 오브젝트로 만드는것은 가능.
    • 내부에 무언가는 들어 있기 때문.
  • 추상 메소드가 하나라도 있는 클레스는 클레스를 추상 클레스로 선언 해야 한다.
  • 추상 메소드를 구현하는 하위 클레스에서 메소드의 구현부를 비워 놓는 더미 메소드를 훅 메소드 라고 한다.
  • 추상 클레스의 반대 계념 : 구상 클레스 : Concrete Class : 구체 클레스
    • 인스턴스를 만들어도 괜찮을정도로 구체적인 클레스.

추상 클레스를 사용하는 상황

  • 설계 . 하위 클래스에서 어떤 모습으로 혹은 순서대로 구현 되는지 규약(Protocol)을 정의하는것.
  • 인터페이스를 정의할때
  • 공통으로 사용할 메서드를 구현부까지 정의하고 나머지는 추상메서드로 남겨 놓을때.
    • 공통으로 사용할 메서드 중에서도 변경이 필요할떄는 오버라이드
    • 변경하면 않되는 메소드는 final 로 정의한다.
      • class 도 final 로 선언하면 상속받을수 없다.
      • static final 변수는 클레스에 static 이 없어도 class명.변수명 으로 모든 클레스에서 접근할수 있다.

추상클레스로 설계 했을때의 장점

  • 코드의 재사용성이 늘어난다 ( 문서 서식처럼 기본적인 방향을 만들어 놓고 미리 만들어진 구체적인 기능을 조합시키거나 세부적 내용을 재작할수 있다 - 프레임 워크 )

전문 용어


 

에러 메세지


학습 시간

스케줄 중간 중간에 학습 하느라 정신이 없어서 시간 측정 실패함 히잉. .ㅠㅠ-


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

어제 코드를 확장해서 arrayList에 넣어보기 도전!

07 상속은 언제 사용할가

객체 지향에서는 크게 2가지의 상속관계가 있습니다.

IS-A 관계 : is a relationship : inheritance

클레스간의 관계가

  1. 일반적이고 구체적인
  2. 베이스와 드라이브 클레스의 역활이 어울리는 경우.
    1. 옷 - > 드레스
    2. 직원 → 사장
      1. 등, 다양한 타입과 분류명으로 쉽게 정리 가능

상위클레스는 일반적 하위 클레스에서는 구체적인 경우.

상위 클레스가 재사용이 가능한 경우

계층 구조가 너무 복잡하지 않은 경우

포함과 상속의 차이점에 대해서는 조금더 이해가 필요한것 같다.

HAS-A 관계 : composition(컴포지션)

  • 상속과 포함 이라는 관계에서. 클레스간의 포함 관계 만을 활용한 경우에 속한다
    • 상위 클레스 속성으로 arrayList 인스턴스를 만들때도. arrayList를 상속하지는 않기 때문에 여기에 속한다.
  • 재사용을 염두하지 않고 클레스 내부에 클레스를 포함 시켜 사용하는 경우.
    • 개발 규모가 복잡하지 않거나 , 추가 될 기능이 한정적이기 때문에 나이브 하게 해도 되는 경우.
  • IS-A관계 보다 HAS-A관계가 일반적으로 개발편의성이 높기 때문에 IS-A관계보다 HAS-A관계가 개발 환경에서는 많이 보이지만 장기간 운영, 기능 추가, 복잡한 시스템의 제작에는 사용할수 없습니다. 게임들이 업데이트를 아무리해도 퍼포먼스가 좋아지지 않는 이유
  • 뼈대를 잘 만들어서 살을 붙이는 방법으로 만들자.
  • HAS-A , IS-A둘다 동시에 사용하기도 한다.
    • student > HAS-A > student_A > IS-A > subject

다운 캐스팅 instanceof

업케스팅는 implicit 하게 발생한다. implict : (암묵적) *implicitly(*명시적이지 않게 : 자동)

  • ㄴ 쉽게 이야기 하자면 대입(assign : = ) 하는것으로 업케스팅은 작동 됩니다.

이번 쳅터에서는 명시적으로 (수동으로) 수행되는 다운 케스팅에 대한 사용방법을 학습하게 됩니다.

다운 캐스팅은 암묵적으로 사용할수 없을까요?

예시 ) subClass reperanceValue =(subClass)SuperClass;

ㄴ 상황: 하위 클레스 참조변수에 상위 클레스를 형변환 시켜 넣는 상황

ㄴ 결과: 정상작동. 업케스팅() 되었던 참조변수에 한해서 다운 케스팅이 작동됨

이 문법으로 인해 다운 케스팅을 진행할때 문제가 발생할수 있습니다.

개선 ) 아직 형변환이 작동되지는 않지만 . 오류는 피할수 있다.

if(reperanceValue instanceof subClass){
	subClass reperanceValue = (subClass)SuperClass;
	reperanceValue.method();
}

다운 케스팅 테스트 코드

package TEST_0208;

import java.util.ArrayList;

public class Do {
	public static void main(String[] args) {
		Do do_1 = new Do();
		SuperClass_A reperanceValueA = new SubClass_A(); 
		SuperClass_A reperanceValueB = new SubClass_B();
		SuperClass_A reperanceValueC = new SubClass_C();
		ArrayList<SuperClass_A> ClassList = new ArrayList<SuperClass_A>();
			ClassList.add(reperanceValueA);
			ClassList.add(reperanceValueB);
			ClassList.add(reperanceValueC);
			
		for (int i = 0; i < ClassList.size(); i++) {
			ClassList.get(i).showMyClassName();
			System.out.println(ClassList.get(i).name);
		}
		
		//ㄴ 업케스팅
		
		do_1.downCasting(ClassList);
		//ㄴ 다운 케스팅
	}
	void downCasting(ArrayList<SuperClass_A> ClassList) {
		for (SuperClass_A A : ClassList) {
			if(A instanceof SubClass_A) {
				SubClass_A SCA = (SubClass_A)A;
				SCA.method_SubClass_A();
			}else {
				A.showMyClassName();
				System.out.println("인스턴스에 해당하는 타입이 지정되지 않았습니다");
			}
		}
	}
}

오브젝트 클레스는 모든 클레스의 최상위 클레스 이다.

해외에서는 다운 케스팅과 업 케이스팅 둘중에 어떤것을 사용할지 싸우고 있다.

추상 클레스

abstract 클레스

메서드를 만들때 구현부를 하지 않고. 하위 클레스에서 오버 라이딩 처럼 메서드를 구현할수있게 만들기 위해 구현하지 않는 클레스의 앞에 붙여줘야 하는것.

정의(definition) : 구현부 까지 있다.

선언(declaration) : 구현부가 없다.

메서드를 선언하는 클레스 라고 할수 있다.

public abstract class super{

abstract void print();

}

 


전문 용어


 

에러 메세지


학습 시간

타이머를 그만 누르지 않고 말았습니다. OTL..(언제적 이모티콘)


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

어제 궁금했던 클레스의 형변환을 검색해서 확인해보고.  스스로 과제를 내서 풀어봤어요.

package TEST_0208;

public class Do {
	public static void main(String[] args) {
		//상황
		//class SubClass_A{String name ="SubClass_A"}
		//class SuperClass_A{String name ="SuperClass_A"}
		SuperClass_A reperanceValue = new SubClass_A(); 
//문제해결 1)	reperanceValue.method_changeName("메소드로 바뀐값");
//문제해결 2)	reperanceValue.name = "직접 참조해서 바뀐 값";
		reperanceValue.showMyClassName();
		//1)메서드를 통해서 맴버 변수의 name값을 출력한다.
		
		System.out.println(reperanceValue.name);
		//2)맴버변수의 name값을 출력한다.
		
		// 결과
		//1) subClass_A의 name값 출력 : SubClass_A
		//2) SuperClass_A의 name값 출력 : SuperClass_A
		
		//상황 분석
		// 메서드는 인스턴스 subClass_A의 메서드가 작동하였다. 하지만 변수도 subClass_A의 변수를 참조하였다.
		// 직접 접근 했을때는 superClass_A의 변수를 참조하였다.
//		System.out.println(reperanceValue.SubStyringA); 직접 접근할수는 없습니다.
		reperanceValue.method_ShowSubAString();
		//상황정리
		//메소드로 인스턴스의 감추어진 변수에 먼저 접근하게 된다.
		//직접 접근하면 타입의 변수에 접근하게 된다.
		
		//더 필요한 정보 : 참조변수의 값이 인스턴스의 name와 타입의 name이 다르다는것을 알수 있다.
		//그렇다면 인스턴스의name와 타입의 name을 변화 시킬수 있는 대상이 무엇일까
		
	}
}
package TEST_0208;

public class SubClass_A extends SuperClass_A {
	String name = "SubClass_A" ;
	String SubAString = "SubAString";
	public void showMyClassName() {
		System.out.println(this.name);
	}
	public void method_SubClass_A() {
		System.out.println("method_SubClass_A");
	}
	public void method_ShowSubAString() {
		System.out.println(this.SubAString);
	}
	public void method_changeName(String name) {
		this.name = name;
	}
}
package TEST_0208;

public class SuperClass_A {
String name = "SuperClass_A" ;
	public void showMyClassName() {
		System.out.println(this.name);
	}
	public void method_SuperClass_A() {
		System.out.println("method_SuperClass_A");
	}
	public void method_ShowSubAString() {
		System.out.println("SuperClass_A_method_ShowSubAString");
	}
	public void method_changeName(String name) {
		this.name = name;
	}
}
//

TEST2(새로운 예제 코드 )

package TEST_0208_2;

class Parent{
	int x = 100;
	public Parent() {
		this(1000);
	}
	public Parent(int x) {
		this.x=x;
	}
	public int getParent() {
		return x; 
	}
}
class Child extends Parent{
	int x = 200;
	public Child() {
		this(2000);
	}
	public Child(int x) {
		this.x = x;
	}
}
public class TEST {
	public static void main(String[] args) {
		Child C = new Child();
		System.out.println(C.getParent());
	}
}
// 왜 2000이 나오는가?
// 인스턴스와 참조변수의 타입별 저장 공간이 별개로 존재하며 두 변수 전부 사용, 호출이 가능하다.
// 메서드가 오버라이딩 되듯이 변수 또한 인스턴스에 같은값이 있으면 메서드는 인스턴스의 타입의 변수를 
// 호출화고 직접 호출하면 참조변수의 타입에 해당하는 변수를 호출하게 된다.

전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

함수 호출

class TEST{
int A ;
	void print(){
		int intPrint;
	}
}

메서드 호출 순서를 정리하자면

  1. 프로그램이 작동된다.
  2. 우선 모든 메서드의 이름이 주소로 변환한다.
  3. 코드 영역에 메서드 내부의 지역 변수와 인스턴스과는 별개로 우선 인스트럭션 셋(기능)이 탑제 된다 .
  4. 메서드 가 호출되면. 각각다른 인스턴스를 구분해서 메서드 내부의
    1. 지역변수 : stack, 인스턴스 : heap 영역에 탑제
      1. 인스턴스가 생성(new)되면 모든 인스턴스의 정보와 인스턴스의 변수(맴버변수)는 heap 영역에 탑제 된다. 힙영역은 메모리의 낮은주소 - > 높은 주소의 방향으로 할당된다.
        1. static이 붙은 변수는 인스턴스 생성과 별개로 프로그램 동작부터 메소드 영역에 탑제 되는 클레스 변수(클레스 고유의 변수 : static variable)가 된다.
      2. 메서드의 지역변수와 매개변수는 스택 영역에 탑되된다. 메소드 동작 끝 과 함께 소멸, LIFO. 스텍 영역은 높은 주소 - > 낮은주소 방향으로 할당된다.
  5. 코드영역에서 인스트럭션 셋을 찾아서 작동 된다.
  • 위 과정에서 인스턴스 각각이 공유하는 메서드는 한번만 코드영역에 탑제 되고. 한번 탑제된 메서드의 기능이 공용으로 사용된다.
  • 메서드 오버로딩은 메서드 이름을 주소로 변환 할때. 뒤에 더미 파라미너가 붙어서 탑제 된다.

예를 들어서 print 메소드를 주체로 설명했을때. print메소드에 해당하는 코드영역(메서드 영역)의 인스트럭션 셋는 heap영역의 인스턴스의 변수에 해당하는 메모리 주소를 찍어 준다고 할수 있다.

가상 함수 (함수가 만들어지는 과정 +a)

왜 가상의 함수 라고 불리우는가 ? 무엇을 가상의 함수라고 부르는 걸까?

가상 함수라는 것은 앞으로 새롭게 등장한 기능이나 새로운 대상이 아니다.

지금까지 사용하고 있었던 자바의 모든 메소드는 가상함수 였던 것이다. (에>_<? ) 반전!.

외 가상의 함수라 부르는가.?

모든 메소드가 작동 될때까지 . 정확하게 코드영역(메서드 영역)의 인스트럭션 셋을 가르키는 주소가 확정 되어 있지 않은 상태이다. 작동 될때 비로소 호출된 메소드와 매치 되는 메모리의 인스트럭션 셋 주소값이 클레스간의 상호작용 연산이 끝난후 확정(바인딩)되어 메소드가 가르키는 주소 값이 가상 메서드 테이블에 정리 되게 된다.

클래스 마다 가상 메소드 테이블 영역이 있으며 메서드 영역의 인스트럭션 셋의 주소가 작동 되었을때 비로소 확정(입력 : 바인딩) 되게 된다.

예를 들어서 하위 클레스의 메소드는 상위 클레스의 메소드와 같은 메모리영억의 주소값을 가지고 있으며. 오버라이딩된 되거나 하위 클레스에서 새롭게 만들어진 메소드에는 새로운 주소가 부여된다.

TEST 코드를 짜다가 고민해야 하는것을 발견했습니다. 아래 코드의 출격값이 이해가 부족하기 때문에 여러 커뮤니티에서 질문을 드리고 답변을 기다리고 있습니다.

Do

package TEST_A;

public class Do {
	public static void main(String[] args) {
		SuperClass_A reperanceValue = new SubClass_A(); 
		reperanceValue.showClassInfo();// 인스턴스(SubClass_A) 의 변수가 참조 되었습니다.
		System.out.println(reperanceValue.name);// 참조변수(SuperClass_A ) 타입의 변수가 참조 되었습니다.
	}
}

SubClass_A

package TEST_A;

public class SubClass_A extends SuperClass_A {
	String name = "SubClass_A" ;
	
	public void showClassInfo() {
		System.out.println(this.name);
	}
	public void method_SubClass_A() {
		System.out.println("method_SubClass_A");
	}
}

SuperClass_A

package TEST_A;

public class SuperClass_A {
String name = "SuperClass_A" ;
	public void showClassInfo() {
		System.out.println(this.name);
	}
	public void method_SuperClass_A() {
		System.out.println("method_SuperClass_A");
	}
}

전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


3:1:01 ~ 3:1:13


이론 정리

polymorphism : 다형성

  • 추상 클레스, 인터페이스 기술의 선행 지식

(여러가지)(형태를)(갖을수 있는 성질)

정의 : 부모 타입 참조 변수로 자손 타입 객체를 다루는것.

예제 객체 : 부모 → TV , 자식 → SmartTv

부모타입 참조변수와 자손타입 객체란? : TV t = new SmartTv();

해석 : 다형성이란 참조변수와 객체(인스턴스)의 타입이 다른것이다.

참조변수와 객체의 타입이 다를경우 나타나는 특징

참조변수타입의 맴버변수로만 접근할수 있는 대상으로 인스턴스를 찾아간다.

굉장히 유연한 특징을 갖게 한다.( 아직 이해는 않된다)

다형성의 특징

자식 타입의 참조 변수 로는 부모 타입의 객체를 가리킬수 없다.

(X)SmartTv st = new TV();

smartTv의 접근법으로 TV의 객채로 접근했을 경우 존제하지 않는 값에 접근할 가능성이 크기 때문에 불가능하다.

st 참조 변수의 실제 접근할수 있는 영역이 더 기능이 많기 때문에. 불가능하다.

하나의 코드가 여러 자료형으로 구현 되어 실행 되는 것이다.

추론 1) int ↔ double ↔ byte

추론 2) 상위 클레스 ↔ 하위 클레스

같은 코드에서 여러 다른 실행 결과가 나온다.

추론 1) 메소드에 전달인자를 다르게 보내면 다른 값이 리턴된다.

정보은닉, 상속과 더불어 객체지향 프로그램의 가장 큰 특징중 하나이다.

추론 1) 객체 지향의 특징중 하나 라고 해석 하면 된다.

잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들수 있다.

클레스의 형변환을 통해서 확장할수 있다는 점인듯.

 


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

+ Recent posts