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

 

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

 

 


업스케일링과 가상 메서드

3챕터 :

3챕터의 도입부에 대한 궁금증을 해결하기 위해 다른 강의를 참고 하고 있습니다. : )

[ 자바 입문 편 : 형변환과 가상 메소드 강의부분] 강의

오픈 튜토리얼 : https://opentutorials.org/course/1223/5400

프로그래머스 :https://programmers.co.kr/learn/courses/5/lessons/193#

 

자바 입문 - 클래스 형변환

자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금

programmers.co.kr

형변환 1. 부모 타입으로 업스케일 : 인스턴스 생성자 B()는 B{B()}인 걸까?

package TEST;

public class Do {
	public static void main(String[] args) {
		
		A a = new B();
		//B의 인스턴스를 생성해서 A에 담는다.
		//B의 생성자"class B{B(){}}"까지 실행된후. a에 값을 담는다.

		a.method_A();
		//A의 메서드는 a가 A타입이기 때문에 사용 가능하다.
		
//		a.method_B();
		//B의 메소드는 A타입에는 없기 떄문에 사용할수 없다.
		
		a.method_AB();
		//A의 메서드만 사용할수 있지만 B에 같은 이름의 메서드가 있다면 B의 메소드가 호출된다.
		
		System.out.println(a.alpabet);
		//B로 생성된 인스턴스 이기 때문에. a의 alpabat에는 B가 들어있다.
	}
}
package TEST;

public class A {
	String alpabet;
	A(){
		this.alpabet = "A";
	}
	public void method_A() {
		System.out.println("A_method");
	}
	public void method_AB() {
		System.out.println("A의 method_AB호출");
	}
}
package TEST;

public class B extends A{
	B(){
		this.alpabet= "B";
	}
	public void method_B() {
		System.out.println("B");
	}
	public void method_AB() {
		System.out.println("B의 method_AB호출");
	}
}

 

main 내부에서 main이 포함된 클레스의 메소드를 사용 할때. 

자신의 인스턴스를 만드는 타이밍이 가장 앞에 있어도 되는지 확인.(인터프린터와 컴파일 언어의 차이점이라고 배운듯)

형변환을 할때

메소드의 매게변수를 상위 타입으로 받고. 하위 타입의 것으로 인수를 보내도 자동으로 형변환이 된다. 그렇게 자동으로 오버라이딩 되도록 해보자.

package TEST;

public class Do {
	public static void main(String[] args) {
		Do dox = new Do();
		A a = new A();
		B b = new B();
		C c = new C();
		dox.print(a);
		dox.print(b);
		dox.print(c);

	}
	void print(A a) {
		a.print();
	}
}
package TEST;

public class C extends A {
	void print() {
		System.out.println("C");
	}
}
package TEST;

public class B extends A {
	void print() {
		System.out.println("B");
	}
}
package TEST;

public class A {
	void print() {
		System.out.println("A");
	}
}

 


전문 용어


 

에러 메세지


학습 시간


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


3챕터 : 1~13 정리하기.

1) 스스로 개념과 매치되는 코드를 짤수 있는지 검토한다.

2) 스스로 개념을 설명해본다.

3) 구조의 계념을 설계 이해. 설명할수 있도록 다이어그램을 작성할수 있도록 다이어그램에 대한 정보를 찾아본다.

3) 타이핑 하는 자세를 주기적으로 확인해서 교정한다. (손목 보호에 신경쓴다.)

4) 목표를 아침에 정해 놓고. 하루라도 완벽하게 보내서 후회를 없에 불면증과 무기력증을 날린다.

5) 워라밸을 때놓고 워커 홀릭의 자세로 전환한다.

6) 강의에 대해서 긍정적인 마인드를 갖고 참여한다 (교육학에서 중요하게 생각한다고 하네요)

7) 너무 완벽하게 이해하려고 하면 도전하기가 무서워지기 때문에 막!(?)해 본다. :) (웃음) 

 


이론 정리 : 이번 챕터에서는 손목이 회복되서 타이핑을 많이 하고 싶어졌기 때문에 뻘글이 많습니다 : ) 

3챕터 영어단어 암기

: 오늘로 4번정도 복습한듯 : )

evaluation  연산
expression 값이 도출되는 명령
JRE java runtime environment
JDK java development Kit
instruction set 프로세스가 해석가능한 명령어세트
compile 원시코드 → 목적코드 변환
james Arthur Gosling 캐나다의 자바 개발자
write once, run anywhere WORA . 어떤 장비로도 개발가능. JVM에서도 실행될수 있음
object orented programming OPP, 객체 지향 프로그램
procedural programming 절차지향 언어
unary operator 단항 연산자
infix operator 이항 연산자
ternary operator 삼항 연산자
assign 대입 (=)
Arithmetic Operators 산술 연산자
operation 운용
ExclusiveOR XOR, 두비트가 다를때만 1(HIGH)
Truncate 시프트 연산자로 범위 밖 값을 날리는 동작
statement 실행 가능한 최소 서술
indentation 들여쓰기
initialize 초기화
infomation hiding 정보 은닉
interaction 객체 사이에서 일어나는 행위
collaboration 인터렉션이 발생하는 객체간의 관계
member variable 객체에 속성의 변수를 선언한것.
convention 공통된 암묵적인 규약, 협약
Entity 객체: 정보를 저장하고 관리할수 있는 집합
method 메서드 : 함수의 일종으로 class 내의 자원을 활용하는것
instance 클레스를 기반으로 만들어져 heap메모리에 할당된 실체
constructor 생성자
parameter 매게변수
argument 전달 인자
initializer 초기화
primitive Type 기본형 데이터 타입 : 초기화값이 있는 데이터형
Reference Type 참조형 데이터 타입 : 초기화 않하면 NULL
access modifier 접근 제어 지시자
field class 자신의 내부에 있는 변수, 메서드등등의 영역 
isvalid 생성된 인스턴스의 필드의 값을 전달하기에 앞서서. 입력된 값의 유효성을 검증한후 true인지 false 인지 전달 하기 위해 있는 변수
encapsulation 캡슐화 : 꼭 필요한 정보만 외부에 오픈하는것
escpe sequence 확장 비트열, 이스케이프문자, 제어시퀀스
singleton pattern 하나의 인스턴스만 생성할수 있게 하는 디자인 패턴
inheritance 상속
annotation 컴파일러에게 정보를 전달할수 있는 주석 @(엣!?) 을 앞에 쓴다.
polymorphism 다형성
ratio 비율
strategy pattern 전략 패턴
DAO Data Access object : 데이터 접근기능을 갖고 있는 객체
implements 인터페이스를 구현(상속받을때)할때 extends 처럼 사용한다.
source hierarchy 코드의 계층구조 페키지명 뒤에 .(점)으로 줄줄이 써 내려가면 점 붙일때 마다 낮은 하위 계층이 만들어 진다.

 

영어단어를 암기하면서 타이핑한 휫수를 카운트한 횟수 83000회! .나름 뿌듯한 방법 이네요 : )

 

2챕터 ~ 13챕터 까지 ( 소스코드 구현 + 다이어 그램 + UML  )

2챕터_상속

상속 계념이 생기는 지점

우선 VIPCustomer이 없었고 Customer로 열씸히 다른 객체와 인터럭션을 시키며 놀고(일하고) 있었는데. VIP 라는 고객 분류가 새롭게 추가 되는 상황에서 VIP 고객을 위해 메소들 추가 하거나 수정해야 한다면 ?

만약 객체 지향 언어가 아니라면 이렇게 헤야 합니다.

1) Customer에 "회원등급"변수를 만들어서 "회원등급"내부의 값에 따라 조건문으로 VIP와 일반고객의 메소드가 별도로 존제하게 합니다

2) 마찬가지로 회원등급 변수를 만들어서 조건문으로 VIP와 일반고객의 영향을 받는 변수를 우선 변화시키고 메소드가 작동되게 만듭니다.

3)VIP_함수A , 일반고객_함수A 처럼 VIP용 함수를 따로 만들어서 회원등급에 따라서 작동 시킵니다.

히잉.. 너무 복잡해집니다. 회원등급이 3개 이상이라면 개발자는 복잡해 질떄로 복잡해진 Customer코드를 붙잡고서 대성 통곡을 하며 세벽까지 코딩을 하고 있을지도 모릅니다. : ( 

이럴때 만약 객체 지향이라면 어떨까요?

1) VIP 객체를 따로 만들어서 관리하기 떄문에 Customer 객체는 깔끔하게 자기의 의미를 잃지 않고. 평온한 삶을 살아갈수 있습니다(감격) . 그로인해 Customer은 복잡한 사고를 하지않고 자신의 전문 분야만 작업을 하면 됩니다. Customer은 복잡하지 않기 떄문에 다른 업무에도 호출해서 사용할수 있는 인기인이 됩니다. 만세. ( 이게 뭔소리야 .. 여러분은 하루종일 혼자 코딩하지 마십쇼 크큭)

&lt;2챕터 구현 코드 UML&gt;
&lt;3챕터 구현 코드 UML&gt;

 

시간은 뭐이렇게 빨리 지나갈까요. 오늘도 하루가 다 지나갔네요.

중간에 이렇게 뚝뚝 끊기니 보는 분들 입장에서는 기분이 좋을것 같지 않은데. 될수 있으면 언젠가는 부분별로 나누어서 정리할수 있는 시간을 가질수 있으면 좋겠네요.


전문 용어


 

에러 메세지


학습 시간

하루종일 공부했지만 타이머를 누르는게 익숙하지가 않네요.

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


01~13 정리하기

문제점 인식 :

0) 이번 챕터에서는 손목 통증이 있어서 강좌 시청을 주로 했습니다.

  a.운동용 손목보도대 착용. 낮은 키보드 구입 , 손목과 키보드의 각도에 대해서 자주 교정 하기로 하였습니다.

1) 3챕터의 1~13강까지의 설계 개념과 1:1로 매치 되는 코드를 스스로 작성할수 없기 때문에 다음 진도를 나가는것에 의미가 없습니다.

  a. 내용추가 : 프로그래머스의 강의와 복합적인 진행을 하기로 했습니다. 이론의 어려움도 다른 강의 참조를 적극적으로 하기로 하였습니다

개선 방향:

1) 스스코 개념과 매치되는 코드를 짤수 있는지 검토한다.

2) 스스로 개념을 설명해본다.

3) 구조의 계념을 설계 이해. 설명할수 있도록 다이어그램을 작성할수 있도록 다이어그램에 대한 정보를 찾아본다.

3) 타이핑 하는 자세를 주기적으로 확인해서 교정한다.

4) 목표를 아침에 정해 놓고. 하루라도 완벽하게 보낼수 있다면 후회와 불면증과 무기력증을 날릴수 있을것 같다.

5) 워라밸을 때놓고 워커 홀릭의 자세로 전환한다.

6) 강의에 대해서 긍정적인 마인드를 갖고 참여한다 (교육학에서 중요하게 생각한다고 하네요)

7) 너무 완벽하게 이해하려고 하면 도전하기가 무서워지기 때문에 막!(?)해 본다. :) (웃음) 

 


이론 정리 : 손목이 음청 아파서 기본적인 코드만 몇줄 적어서 볼게 없습니다. : )

01

A

package ch03;

public class A {
int intA = 10;
int methodA() {
	return 20;
}
}

B

package ch03;

public class B extends A {
	int methodA() {
		return 30;
	}
}

TEST

package ch03;

public class TEST {
public static void main(String[] args) {
	B b = new B();
	System.out.println(b.intA);
	System.out.println(b.methodA());
}
}

2

시나리오 제시

회사에서 고객정보를 활용한 맟춤 서비스를 하기 위해 일반고객(Customer)과 이보다 충성도가 높은 우수고객(VIPCoustomer)에 따른 서비스를 제공하고자 함
물품을 구매 할때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다름 
여러 맴버십에 대한 각각 다양한 서비르를 제공할 수 있음
멤버십에 대한 구현을 클레스 상속을 활용하여 구현해 보기

형변환에 대한 정리부터 . 자바의 정석 유투브 체널과 프로그래머스 강의의 도움을 받아서 다시 정리하고 있습니다.

일주일동안 이해가 되지 않는 강의를 붙들고서 수를 샐수 없이 반복 시청 했기 때문에. 이 강의에 대한 부정적인 감정을 갖고 있지만. 최대한 긍정적으로 이 강의에 대해서 생각하기 위해 노력하겠습니다. ㅎㅎ 

 

 


전문 용어


 

에러 메세지


학습 시간

 


 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 


1~13 설계 챕터 이해하기

목표

EASY

  • UML를 표준방법으로 활용(설계,설명) 할수 있다.
    • 예제 과제를 찾아서 설계를 할수 있다.
    • JAVA 코드와 1:1 대응할수 있다.
    • Stereo Type을 활용 할수 있다.
  • 적합한 UML툴의 종류를 탐색하고 . 사용방법을 습득한다.
    • 단축키를 원활하게 사용할수 있다.
    • 예제 과제를 찾아서 설계해 본다.

1. UML 계론

클래스 다이아그램은 UML의 일종이다.

Unified Modeling Language : 통합 모델링 언어

  • 다양한 분야에서 사용되는 복잡해진 구조들를 도식화 하는데 사용된다.
  • OMG(Object Management Group) 객체 관리 그룹에서 표준을 정의한다.

2. 클래스 다이어그램

선행 지식 : 객체지향의 개념, 객체 지향 언어의 문법.

UML 클래스의 표현방법

  1. 컨테이너상단 :
    • 클레스명 (추상적일 경우 이텔릭 체를 사용한다. : 기울어진 글시체)
    •  
  • 중간 :
    • 변수명 : 변수 타입
  • 하단 : 메서드 : 메서드 타입
  1. 관계 표현방법
    1. 컨테이너를 생성한다 :
      1. 접근 제어자를 지정한다.접근 제어자 표시 설명 
        public + 다른 클레스에서 접근가능
        private - 다른 클레스에서 접근 불가
        protected # 상속, 구현 관계에 있는 하위클레스(분화된 클레스)에서만 접근가능
        package ~ 페키지 내에 있는 클레스에서 접근 가능
    2. 컨테이너 간의 관계를 표현한다.

관계 표현 (택스트) JAVA 계념

연관 관계 화살표 혹은 실선 두 클레스가 같은 동작(행위)를 한다
일반화 관계 투명 화살표 상속_IS-A관계 이다.
집약관계 투명 다이아몬드 상위 객체의 한 부분 이지만 독립적인 객체이다.
합성 관계 다이아몬드 상위 객체의 한 부분이지만 의존적인 객체이다.(상위객체와 같이 소멸한다)
의존 관계 점선, 화살표 상속관계는 아니지만 참조하여 메서드를 짦은 시간동안 작동시킬수 있는 관계이다.
실체화 관계 점선, 투명화살표 인터페이스와 구현관계

TOOLS

  • StarUML :
    • 전문성과 편의성을 겸비
    • UML표준 규격으로 작동
    • 편리한 키보드 단축키
    • 실질적인 업계 표준 (IBM,GOOGLE,APPLE,FACEBOOK등의 참여 프로젝트)
    • 구입하지 않았을경우 워터마크 표시 이외에는 기능이나 기간제한 없음.
    • 상업적, 팀활동에 사용하기 위해선 비용 필요

단축키

ctrl+ enter 맴버 변수를 생성합니다.

ctrl+ shift + enter 메서드를 생성합니다.

teb Stereo Type을 정의 합니다.

 

 

잘 정리 되어 있는 교제 겸 자료

[StarUML]Manual.pdf

https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

https://www.nextree.co.kr/p6753/

 

객체지향 계념이 들어간 시스탬의 분석에는 UML만큼 좋은게 없는것 같다. 

아직 자바와 객체지향의 개념을 전부 획득한것이 아니기 때문에. UML을 자유롭게 사용하지는 못하지만.

자바 계념을 학습후. 스프링으로 넘어가기 전에 UML의 클레스 다이어 그램에 대해 학습 하는 시간을 갖게 되면 좋겠다.


전문 용어


 

에러 메세지


 

캠 스터디

 


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

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

2) 구루미 온라인 독서실

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

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

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

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

fastcampus.co.kr

 

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

 

 

+ Recent posts