9/6

오늘은 12 장 자바모듈 이어서

replace();

replaceAll(); -> replace와 하는 일을 비슷 하지만 정규표현식을 사용한다.

-> 특정 패턴을 다른 문자열로 변경

 

정규표현식

regex -> regular expression의 약자 (정규표현식)

문자열의 패턴을 나타내는 표현

정규식은 많은 것이 있고 꼭 외울 필요는 없다 생각이 안난다면 자바 독스에서 찾아서 쓰기

 

12.6 포장 클래스

 

기본타입을 참조타입으로 바꿔서 사용 하고 싶을때 

 

wrapper class : 기본타입을 감싸고 있는 클래스

// 기본타입 : byte, short, long, float, double, char, boolean
// wrapper class : Byte, Short, Integer, Long, Float, Double, Character, Boolean

// boxing : 기본타입 -> 참조타입
// unboxing : 참조타입 -> 기본타입

 

12.7 수학클래스 

Math -> 거의 대부분 static 메소드다

9/5

오늘 나갈 진도는 람다식 에서 

메소드 참조 방식 부터 배우게 될 예정이다.

익명 객체 에서 메소드참조 방식 으로 변경 원리


생성자 참조 

constructorReference 

 


12장  jav.base 모듈

 

 

 

hashcode, equals

 

 

앞으로 나갈 진도 예정  15장 챕터 중요

9/4

벌써 9월 이다 7월 22일에 시작해서 언제 수업 다 듣나 했는데 벌써 1달이 지나고 2개월차 수업도 1/3 이 지나가고 있다.

끝까지 열심히 해서 취업하도록 노력하자.


익명객체 

익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수있다.

 

익명 자식 객체/ 익명 구현 객체 (부모 클래스 자리에 인터페이스가 오는것)

익명 자식 객체는 부모 클래스를 상속 받는것은 기존과 같지만 생성하는 방법은 아래와 같다.

부모 생성자를 호출 하고 자식클래스를 만드는데 자식의 이름은 없지만 자식클래스의
객체(필드, 메소드)로 만들겠다고 하는것

부모 클래스의 인스턴스 생성후 바로 { } 중괄호 사용하여 생성
부모 클래스 생성
익명을 이용하면 추상클래스도 바로 인스턴스 생성을 가능케 함
인터페이스 역시 추상클래스처럼 익명 을 사용하면 바로 인스턴스 생성이 가능케함

익명 구현객체가 들어 갈 수 있는곳 

  • 필드의 초기값
  • 변수의 초기값
  • 매개변수의 변수값

익명 객체를 사용하는이유 -> 명시적으로 클래스를 선언하기 귀찮고 간단하게 구현 객체를 사용하여 쓰고 싶을때 
사용 한다.

 


람다식

1급함수 -> 함수를 다른 변수처럼 사용 가능하면 그것을 1급 함수 라고 한다.

1급함수 처럼 사용할 수 있는게 람다 하지만 람다는 1급 함수가 아니다

 

데이터는 갖고 있지만 함수는 외부에서 받아와서 데이터를 처리 하는 방식을
함수형 프로그래밍 이라고 합니다.

 

함수와 메소드 차이

함수 -> 객체와는 상관없이 실행 가능한 코드의 묶음(실행 코드 블럭)

메소드 -> 반드시 객체 안에 있고 객체의 기능을 정의 하는것 (클래스, 오브젝트 로 항상 감싸져 있어야한다.)

 

람다식 : (매개변수, ... ) -> { 처리 내용 }

 

자바에서 람다식도 클래스로 인식 합니다. (람다식을 익명 구현 객체로 변환하여)

 

 


 


※ 인터페이스의 익명 구현 객체가 람다식을 표현 하려면 인터페이스는
단 하나의 추상 메소드만 갖고 있어야 한다.

※ 인터페이스가 단 하나의 추상메소드르 가질때 이른 함수형 인터페이스 라고 한다.

 

추상 메소드가 하나인 인터페이스 : Functional Interface  ▼

추상 메소드가 파라미터가 하나인 인터페이스 ▼


리턴 타입의 존재


람다식으로 줄인 코드를 더 줄이기 -> 메소드 참조 방식

 

 

오늘 수업은 간단하면서도 너무 어렵다 람다식 초입 까지는 이해가 가는듯 했는데 파라미터랑 리턴 값이 들어가고 

나서부터는 이해하기 좀 어려워 지는거 같아 오늘은 좀 남아서 람다부분을 복습해볼 예정이다.

9/1

오늘은 어제에 이어 계속 인스턴스를 배울 예정

 

인터페이스에 추상메소드만 있어서 불편함 ->

인터페이스가 모두 추상 메소드이다보니 받는 클래스들이 매번 재정의 해야하는
불편함때문에  default Method를 추후에 추가하게 됨

public 정적 메소드

private 정적(static) 메소드 

 


중첩 선언과 익명클래스의 객체

람다 -> 익명 클래스의 객체가 중요하다!!!! -> 인터페이스의 내용과 이어짐

 

중첩 클래스 -> 클래스 내부에 선언한 메소드

 

 

 

인스턴스 멤버클래스 -> inner class

정적 멤버클래스 -> static nested class

 

로컬 클래스 -> method 안에서 선언된 클래스이므로 -> //method가 실행할 때만 객체를 생성 할 수 있음

 

이너클래스 

스테틱 중첩 클래스

 

월요일 ? 이름 없는 클래스?? 배울예정

 

 

shift + ctrl + U : 소문자 대문자로 변환

8/31

오늘은 8월의 마지막 날도 선선해지기 시작한다

오늘은 어제 했던 다향성 오버라이드 를 복습하고 인터페이스를 나갈 예정이다.

 

※ 접근제한자(접근지정자)

총 4개▼

// 접근제한자(access modifier)
// public : 가장 넓은 범위 -> 어디서든지 접근가능
// protected : 같은 패키지내, 다른 패키지에 있는 상속한(자식)클래스에서 접근 가능
// (package private, default) -> 아무것도 안쓴 상태 : 같은 패키지내에서만 접근가능
// private : 가장 좋은 범위 -> 클래스 내에서만 접근 가능
-> public 클래스는 클래스내에 하나만 존재

 

※ 봉인된 클래스는 생략

인터페이스

인터페이스에서도 다형성이 나온다 ☆x100

현재는 인터페이스와 상속과 유사해짐

특별한경우가 없다면 상속과 인터페이스 사이에 고민이면 인터페이스를 사용하게 됨

 

인터페이스 생성 방법

-> 클래스 생성처럼 앞에 interface 라고 치면 된다.

 

사용이유

-> 추상메소드를 만들게 강제하는 효과가  있기 때문에

 

인터페이스의 구성 ▼

// static final필드
// public 추상 메소드 (몸통이 없는 instance 메소드)
// 생성자는 없다 X

// 아래는 나중에 추가됨
// public default(인스턴스) 메소드 (몸통이 있는 instance 메소드)
// private 메소드 (몸통이 있는 instance 메소드)

// static public 메소드
// static private 메소드
인터페이스 생성 방법

인터페이스 활용 법▼


 

인터페이스는 여러 인터페이스를 상속 (구현) 가능하다.▼ 

 

추상인터페이스를 받는 클래스는 받은 추상클래스를 모두 오버라이드 해야한다.▼ 

 

상속과 인터페이스 차이??▼

 

인터페이스를 사용 하는 이유는 내가 원하는 대상 클래스에 기능을 구현 하고 싶을 때 사용 한다.▼

 

1

 

2

 

8/30 

어제는 상속을 배웠고 상속에서 중요한것은 다형성이다.

다형성은 객체지향 프로그래밍을 하는동안 계속 따라다니기 때문에 중요하므로 항상 기억 해두자

 

※타입에 대해 다시설명 

 

 

※강제 형변환이 매우 위험한 이유 ▼

강제 형변환이 위험한 이유는 인텔리제이나 사람 둘다 오류를 찾아내지 못하고 프로그램상 오류를 띄우기때문이다.

 

※안전하게 형변환 하기 위해선

instanceof 를 사용 하여 형변환 가능 여부를 확인 하고 사용 하면 안전하다.

 

※안전하게 형변환 사용하기▼

 

※안전하게 형변환 더 간단하게 사용하기▼

위의 방식처럼 instanceof 에 새로 생성할 메소드 이름을 쓰면 바로 사용이 가능하다.

 

 

※추상클래스 (abstract)

추상메소드? -> 메소드는 있는데 동작하지 않는것 (몸통이 없는 메소드)

추상메소드가 있는 클래스 라면 무조건 해당한 클래스는 추상 클래스가 되어야한다.

자식 클래스를 추상클래스가 되는 것을 막기위해선 자식클래스에서 부모클래스의 오버라이딩 메소드를 재정의 (abstract제거)해야 한다

 

 

 

※Final

final 변수 : 값을 한 번만 할당 할 수 있다.

final 메소드는 재정의 할 수 없으면 상속 받은 곳에서도 재정의 할 수 없다 ▼

final 클래스는 상속 자체가 불가능 하다.▼

 

 

 

 

 

 

 

 

 

 

※ 새로배운 단축키

접혀있는 줄 펼치키 : ctrl + ]

없는데 나중에 작성할 코드생성 : alt + enter

 

※강의 진행 일정 

자바 -> 스프링부트 -> SQL -> 리엑트 -> git, github ->프로젝트1(마지막 1달),프로젝트2(마지막1달)

 

8/29일 오늘은 인스턴스 멤버변수,멤버함수 / 클래스 멤버변수, 멤버 함수에 대하여 배웠다.

클래스는 객체를 생성 할 수있고.

객체는 멤버변수, 멤버함수 로 구성 되어있다.

 

인스턴스 멤버변수, 클래스 멤버변수 예 ▼


인스턴스 멤버변수,멤버함수 예 ▼


필드와 메소드를 묶어 member라고 한다.

static이 안 붙어 있으면 instance 라고 한다.

 

인스턴스 멤버, 스테틱 멤버간의 사용 범위 예 ▼

 

※ 캡슐화 

-> 필드를 노출 시키지 않고(직접변경하지 않게) 메소드를 노출 시켜 필드값이 바뀌도로 하는것

 

인스턴스 멤버 사용시 getter, setter 예 ▼

상속 사용방법▼

MyClass01 : 상위클래스, 부모클래스, super class -> 상속을 주는것
MySubClass011 : 하위클래스, 자식클래스, sub class -> 상속을 받는것
private 를 붙인 필드는 자식에 상속이 안됨. 부모 클래스만 사용 가능

오버라이드 -> 부모클래스에서 사용된 메소드가 자식클래스에서 마음에 들지 않을때 수정하는것

@Override   // 컴파일시 재정의한 메소드인지 검증함

 

 

 

다형성 ☆*100

다형성의 예 ▼

메인메소드
부모 클래스

 

자식클래스

자식은 부모 타입의 멤버까지 포함 하여 다 사용가능 하지만 부모는 자기 자신 것만 사용 가능 하다.


 

강제 형변환 예 ▼

메인 메소드

 

자식 클래스
부모 클래스

부모 클래스에서 자식 클래스의 멤버를 사용 하고 싶으면 위의 메인메소드 에 있는 차일드 타입 강제 형변환 처럼 
사용 하면 쓸 수 있지만 매우 위험 하다.

 

위험한 이유는 다음 수업 시간때.

 

 

※ 새로 배운 단축키

// 줄 맞춤 ctrl + alt+ l
// 줄 복사 ctrl + D
// 줄 이동 shift + alt + 화살표 방향

 

// 해당 페이지 이동 : ctrl + 클릭

8/28

오늘을 새로오신 선생님께서 오셔서 교육을 해주시게 되었다.

지난 선생님께 상속에서 다형성 까지 배웠지만 이해가 잘 안돼 백승은 선생님께서 한번더 가르쳐 주시게 되었다

복습 개념으로

데이터 타입 

1. 기본타입 (8개)

정수형 

-> byte(1), short(2), int(4), long(8)

실수형

-> float(4), double(8)

논리형

-> boolean(1)

문자형

-> char(2)

 

2. 참조타입(기본타입8개를 제외한 모든 타입)

-> 사실상 무한대

1. 데이터가 저장되는 공간이 따로 생기고(인스턴스[객체][객체]) -> 메모리주소

2. 메모리에 인스턴스의 메모리 주소가 저잗이 되는 것을 참조 타입 이라고 한다.

	String a;	// 참조타입
	String b;	// 참조타입

	int c;		// 기본타입
	int[] d;	// 참조타입 배열은 참조 타입이다.


	String e;
	e = "java";

	int f;
	f = 9;

 

2차원 배열 예(참조타입)

int[][] a = { {1,2,3},{10,20,30},{100,200,300} };

int[][] b = a;

System.out.println(a[0][2]); // 3

System.out.println(b[0][2]); // 3

a[1][1] = 2000;

System.out.println(a[1][1]); // 2000

System.out.println(b[1][1]); // 2000

b[2][2] = 9999;

System.out.println(a[2][2]); // 9999

b[2] = new int[] {111,222,333};

System.out.println(a[2][2]); // 333

System.out.println(b[2][2]); // 333

b = new int[][] {{33, 44}, {22, 11}}; // 이렇게 b 에 값을 만들어 준순간 a와 b의 주소 저장 값은 달라진다.

System.out.println(b[0][0]); // 33

System.out.println(a[0][0]); // 1

 


추가로 기존에 사용하던 이클립스에서 인텔리제이로 ide프로그램을 바꿨다 간단한 단축어 입력이 

편해진거 같은데 아직 적응 하는데 좀 걸릴거 같다 그리고 git Hub 기능도 사용 해서 집에서 편하게 

코드를 받아 사용 할 수 있게 되었다.

이번주 자바 배웠던 것을 정리하면

8/21(월) -> 메소드

8/22(화) -> 생성자

8/21(수) -> 상속

8/21(목) -> 다형성

오늘은 선생님께서 다형성을 알려주신다고 하신다.


정리

상속

  1. 부모 클래스의 모든 자원을 물려받는다. (private)
  2. 두 개의 클래스간의 관계를 설정
  3. 상속 받은 내용을 재정의(오버라이딩) 할 수 있다.
  4. 클래스 다이어그램 : 클래스와 클래스의 관계를 도형으로 그림
    1. (부모 클래스) ←— (자식클래스)
    2. 클래스 이름 - 맴버변수 / 멤버함수
  5. 부모클래스 = 상위클래스 = super클래스 = Base(기초)클래스 : (주는쪽) 자원(멤버변수 / 멤버함수) 주는 쪽 자식클래스 = 하위클래스 = sub클래스 : 자원( 멤버변수 / 멤버함수 ) 받는 쪽

객체가 생성 될 때 생성자가 자동으로 호출된다.

기본생성자(디폴트 생성자) : 매개변수가 하나도 없는 생성자

매개변수가 있는 생성자를 갖은 객체가 extends(상속)을 하면 반드시 super를 불러호출하고 생성자에도 변수를 써줘야 한다.

super 를 호출해야 하는 이유 :

  1. 안 하면 에러가 난다. (자기 방에 들어가려면 현관문을 열고 나서 들어가야 하기 때문에)
  2. super(부모클래스)에 자식클래스에서 만든 생성자(매개변수가 있는)와 같은 타입의 부모클래스의 생성자가 있어야 한다.

오버 로딩

위의 두 이미지와 같이 같은 a함수를 호출하지만 매개변수의 맞는 형태의 함수를 호출 하는것을 오버로딩이라고 한다.

 

오버라이딩

  1. 상속에서 생성된다.
  2. 이름은 같고 내용만 다르다(재정의)

오버라이딩을 쓰는 이유 -> 상속 받았을때 추가 기능을 사용하기 위해

 

-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

※ 오버로딩 : 메소드(함수)의 매개변수(갯수, 타입, 순서)에 따라 해당 하는 함수를 다르게 호출하여 처리하는것

※ 오버라이딩 : 상속 받은 메소드를 재 정의 (내용만 고친다) 하는 것 ( 메소드 이름, 메소드내의 매개변수 를 바꾸면 안됨 )

잘 기억해 두자!!!!!!

-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

다형성

다형성 : 부모 클래스의 결정에 따라 다양한 메소드를 선택 할 수 있다.
              부모 클래스의 안에 해당 메소드(멤버함수)의 유무에 따라 사용 여부를 선택할 수 있다.

 

다형성의 대상 : (인스턴스-상속)의 메소드

다형성의 필요성 : 선택의 범위가 넓다.

 

오늘은 다형성에 대해서만 배우고 지금까지 배웠던 기능을 한번더 사용하면서 익히는 방식으로 수업을 들었다.

자바 수업 마지막 날인 내일 총정리를 하며 다시 복습을 한다고 한다.

+ Recent posts