Giter Club home page Giter Club logo

bit-java's Introduction

비트교육센터 자바 프로그래밍

🐣 20년 8월

🐥 2학기 자바 A+을 위하여

https://github.com/namsk/bit-java


Day 5 note

변수의 값 비교

switch (변수){ case 변수1: break; case 변수2: break; case 변수3: break; default: //해당 내용이 없을 때 break; }

자바는 case에 char,String도 올 수 있음. default란? 나머지 처리하는 else와 동일함.

!86쪽 연습문제 풀기

코드 반복 실행.. 코드 낭비 줄이고.. while 반복문 : ~하는 동안 while 안이 참인 동안. 내부블록을 반복하여 실행한다. condition 안이 false이면 내부 블록은 실행되지않음. condition값이 계속 true이면 무한반복 초기의 condition값이 시작했을 때,, 실행되지않는 부분있을수잇음 while 은 조건 설정 중요함. (무한반복을 빠져나갈 조건 설정중요)

while문은 시작하기 전 앞쪽에서 반복문 체크. 단 한번도 실행 한될 수 있음. 조건에 상관없이 최소 한번은 시행하고 싶을 때. 몇번 반복할 지 정할 수 있음 for(초기화;조건검사;증감연산){ }

디버그 진행순서, 변수 변화를 보고 싶을 때. 디버그 하는 방법. 코드를 중간에 중단 시킬 수 있음. 하고싶은 줄 왼쪽 더블클릭 점이 생김->브레이크 포인트(중간점) 디버그 실행중에 중단점을 만나면 자바의 디버거가 거기에서 대기. 한줄씩 코드를 하나씩 넘어가면서 실제 실행결과를 확인해 볼 수 있다. 벌레모양 누르거나 우클릭 디버그 애즈 자바 어플리케이션. 스위치 누르면 디버그 모드로 변환. 오른쪽 화면 잘 봐야함. 상단 보면 빨간버튼, 삼각혀 ㅇ버튼, 화살표 버튼.. step over(다음코드 실행해주세요:이걸 제일 많이 쓸거임) 두번째 화살표 그러면 오른족에 생긴게 뜬다. 화살표: 최종적으로 남은 코드 실행.

continue와 break 반복문 내에서 continue를 만나면 아래쪽 이후 문장은 수행하지 않음. 반복 블록을 벗어나지않고 블록 가장 마지막으로 이동, 다시 반복조건 검사.

break 반복문 수행을 중단하고 반복블록 다음 문장 실행 자기를 감싸는 바로 바깥쪽 반복문만 나감. 중첩된 반복문에서 한단계 씩 반복문을 벗어남.

!연습문제 반복문 연습 풀기. 별찍기.. %6==0 %14==0 인것찾아내기. 반복 횟수 알때:for, 반복횟수 알 수 없을 때 :while.

Day 6 Note

-난수발생 int num = (int)(Math.random()*최댓값)+최솟값; math.random=>0.0< <1.0까지 랜덤.1.0은 포함이 안됨. 그래서 1 더해주는거임 int num =(int)(Math.random()*6)+1 정수처리하면 0이상 5미만. 그래서 +1해주면 1이상 6미만값 정의됨.

-참조타입 스택메모리-변수같은 것, 기본타입. 힙메모리 - 배열 참조타입에 만든다 . 메모리 주소를 참조. 주소를 담아둔다. String s = "Hello" stack에는 주소랑 s이름만. s부르면 걔가 힙에 가서 가져옴 null type: 참조타입은 힙 메모리상의 뭔가를 가리키고있음. 널 타입은 가르키는게 없다(주소가 비어있다.)

객체 타입은 힙메모리에 만들어지고, 스택에 이름 주소가 있음. 이게 힙을 가르킴

    데이터 타입

기본타입 참조타입 널타입 불린 수치형 문자열

 인티저   플로팅

바이트 쇼트 플로트 더블 롱 캐릭터 인트

참조 타입의 비교. 기본 타입 ==<-같다. 주의 Person p = new Persom(); Person p2 = new Person(); (new라는 거니까 새로운 person객체 생김) Person p3 = p2; p3==p2 -> True. 참조형 == ->주소가 같다는 뜻 .equals() ->값이 같은가? 메서드 써줘야함.

refVall() == refVal2:refVal1 (주소 동일?) refVall() != refVal2:refVal1 (주소 다름?

참조변수 null인지 늘 체크 !

문자열 저장위해 String으로 선언. 선언 -> 초기화. 리터럴: 직접 소스코드 상에 입력한 것. carName = "문자열" -> 리터럴 String valName = new String("문자열"); 문자열 String은 편하게 쓰라고 만들어 둔거. 참조타입 만들때는 new로만들기. new-->heap메모리에 객체를 만들어라 그리고 주소가 리턴된다. 주소를 받아서 valName에 넣는다.

strVal1.equals(StrVal2); vlq1과 val2가 같은가? 라는 뜻 객체는 데이터와 기능들을 같이 가지고 있다.

%f -> 실수 %s -> 문자열 %d -> 10진수 %.2f -> 소수 둘재자리까지.

-열거형(enum) 몇가지로 한정된 값만을 가지는 경우 요일, 계절, 성별 등.. 열거 상수는 모두 대문자로 작성 enum타입이라면 제한된 자료의 데이터 타입을 새로 만든다. DayOfWeek d ={}명시된 값 이외에는 절대 담을 수 없다. 실제 담기는 데이터들 = 열거상수 열거상수는 모두 대문자로 작성.. 여러 단어로 구성될 경우 _로 연결. (관례) java는 상수와 enum많이 사용./ 가독성을 높일 수 있음. ,오타 방지(값 제한 지정) valueOf(String name) 주어진 문자열 열거객체 리턴. values() 모든 열거 객체를 배열로 리턴.

-배열 배열도 객체임. 참조타입. new로 생성되는 참조 자료형이다. 배열 안이 기본자료형 일 수도 있고 참조 자료형 일 수도 있다. 배열도 힙에 있음 배열은 메모리 효율 좋지만 융통성은 없음 .

int [] arr 선언부에는 사이즈를 집어넣으면 안된다. 미리 넣고 싶으면 변수 선언과 동시에 해주어야한다.

배열의 초기화 new 연산자로 배열 생성 int[] intArray = new int[3]; 힙 만들어진 다음에 스택에 연결하기때문에 선언부에 길이 지정할 수 없음. 배열 안쪽에 length라는 멤버가 생김. 마지막 인덱스는 length-1이다.

정수 배열하나 만들었다면 int i[]

int[] j = i

자바의 다차원배열. 일차원 배열이 또 배열로 구성되어있다. m행n열 table.length -> 행이 나옴 table[0].length -> 열이 나옴

각 행의 길이가 다 달라도 노상관임.

배열은 접근 효율이 좋음. 한번 생성하면 크기변경 할 수 없음

점수배열| 0 | 0 | 0 | 추가하고 싶으면 큰 배열 만들고 복사해줘야함

system.arraycopy()로 배열을 복사 할 수도 있다. 원본 배열과 시작 인덱스

system.arraycopy(원본배열, 시작인덱스, 복사할길이);

Day 7 Note

객체지향 프로그래밍 절차지향 프로그램 안에 기능이 다 녹아있음 책 객체에 제목,저자,출판사,가격(필드) 필드: 기본타입:단일 데이터 객체:여러개의 데이터 담을 수 있음.

책장 객체 : 책갯수,책 객체를 관리하는게 주 목적(책 정보찾아주기 , 책 객체 반환하기->단일 책임의 원리)즉. 책을 관리한는 역할만 충실히 해주면 고객관리 등 이런게 책장이 신경 쓸 부분이아님/

객체를 어떻게 나누느냐? 얼마나 역할을 잘 부여하는가?가 목표

책장은 여러개의 책을 가질 수 있고 그 책을 관리할 수 있다. 객체와 객체의 관계다.

객체이름(UML) 해당 객체가 다루어야할 데이터(필드,속성)

객체:속성들+해당객체이용기능(메서드). 즉 데이터와 속성을 같이 가지고있다.

고객 고객장부 정보 ---------> 고객정보 메서드 0..* 1

중요하지않은 것 없애는 것 = 일반화 (추상화와 비슷하다)

모든게 중요한 것은 아니다. 관점에 따라 속성,기능 다르게 표현. 관점을 어디에잡고 어떻게 설계..

재사용.관점 잘 파악, 요구사항에 맞게 설계 중요. 설계도를 그려두면 양산이 가능.

클래스(설계도)->실제사용가능 객체.인스턴스로 만든다(인스턴스화) 인스턴스는 다른객체(외부객체)참조, 사용할 수 앗게됨 <-인스턴스가 사용하는 다른객체: 레퍼런스,참조객체

1.설계도:클래스 2.실체화:인스턴스 3.참조:레퍼런스

설계도 new 키워드. 실제 힙메모리상에 올려줌. heap메모리 상에 책이 만들어짐. 이게 인스턴스임. 그 주소를 책 b1로 넘겨줌. 그 객체는 책이라는 설계도로 만들어졌어. 책 b1 = new 책(); new는 새 객체를 인스턴스화 c2 ISBM 교체, -> c1 ISBM도 변화

c1=null; 주소가 null. 연결 x이게 됨.(책 인스턴스가) GB가 책인스턴스와 stack메모리상에 연결된 정보가 하나도 없다면 책 인스턴스를 지워준다. 메모리 관리는 메모리컬렉터가.

자동차 설계 공통 요소: 달리다() 버스+안내방송, 뒷문열기 스포츠카+ㅊ천자 움ㄴ 열기.. 공통점 추출.

자동차에거 추가기능 추가. (일반화, 추상허ㅣ 시킨 자동차) 공통점 뽑아낸 거 => 부모클래스 버스,스포츠카,->슈퍼클래스, 증 부모 클ㄹ래스, 상위클래스

자동차 확장(상속)->추가기능 추가 -=>자식클래스, 서브클래스

버스는 자동차다 스포츠카는 자동차다. 참조 값 받을 때 조상 Type의 레퍼런스 변수ㅡㄹㄹ 후손 인스턴스 레버런런스 할 수 있

b.drive("달리기")-- 알아서 와.

car c2 = new sc(); Sc s = new Sc();

주차장. 주차공간 여려개. 레퍼런스 타입 클래스에 설계되어 있는 경우만 사용. 물러받은거+자기자신이 설계한 부가적인 기능만 사용가능. 조상설계도로 받았을때는 자기 기능과, 부모로 부터 불려받은 기능. 설계도에 구현된 부분 위외 기능으 ㄹ사움하기 실ㅀ

주차

Bus[] park = new Bus3; // 이 주차장 자리에는 bus만 들어갈 수 있

Car[] park = new Car3; //리 주차장 자리는 크기 노상관. 자ㅗㄷㅇ차 가지고 <-Shapl

기본기능 확장:스포츠카<-car 달리는 기능 완화싶어. 확장 하 ㄴ수 메세지 오버라이드:덮어쓰기/ ***부모와 같은 모양이지만 내부 기능ㅇㄹ 별도로 구현. ***

부모클래스로 참조타입 잡으면 자동차 확장안:모든 객체를 다 담을 수 있음. //부모의 기능과 완전히 같은 모양으로 내용을 다시 선언 -> 메서드 오버라이드

코드 부품화, 재사용이 주 목적 문제가 생겼을 때 해당역할 수행객체만 수정하면된다. 객체 구성요소: 속성정보(필드) + 동작(메서드) 객체 정의 설계도(클래스)-> 인스턴스(객체)/객체=인스턴스.객체가 메모리에 할당되어 실제 사용될 때 인스턴스라 부른다. 설계도->실제사용(인스턴스) 인스턴스 화

상속성, 캡슐화, 다형성, 추상화

1.상속: 확장 이미 만든 객체와 비슷하지만 필드와 메서드가 약간 차이나는 객체를 생성. 더 필요한 필드와 메서드 추가 필드(나이,이름) 메소드(밥먹기, 보기) 자식코드가 간결해짐. person class 확장 -> employ class

2.캡슐화:객체의 실제 구현 내용 감추고,, 접근 방법만 노출 은행 계좌 클래스 필드:잔금, /누가 잔금에 맘대로 값 넣으면 큰일남. 그래서 감춰야함. 외부 객체가 볼때는 객체 내부구조를 알지 못함.** 정보은닉 ** 객체가 노출하여 제공하는 필드와 메서드만 이용할 수 있음. 객체 작성 시 숨겨야할 필드, 메서드, 공개필드 메서드, 필드 구분하여 작성해야함.

캡슐화 왜?: 잘못된 사용으로 객체 손상 피아기 위하여. 접근 제한자 (Access modifier)를 사용하여 객체의 필드 메서드 사용범위 제한..

3.다형성 : 하나의 메서드나 클래스를 다양한 구현으로 사용가능하게 하는 개념. 오버로드, 오버라이드

java Class 필드:속성. 데이터, 상태를 저장하는 변수 기본타입 또는 참조타입으로 정의 멤버변수라고도 함.

접근자. 접근 제한자. 객체의 필드와 메서드에 접근을 제한하기 위해 사용. 정보은닉(캡슐화)를 위한 방법 public,> protected,> default,> private. 접근제한자 안쓰면 디폴드 상태/. 클래스 내부에서는 허용, 같은 패키지안쪽 클래스 접근 가능

메서드는 객체의 기능, 행동을 정의한다. 결과객체의 타입과 리턴타입의 타입이 무조건 같아야한다. 어떤 결과 반환 하지않을 때 void.

매개변수(파라미터) 메서드 선언할 떄 괄호 안에 표현 된 input값을 나타내는 변수 구체적인 값은 인자

반환타입 0개 혹은 1개의 값을 output으로 반환할 수 있음. 반환 값은 메서드 선언에서 정의된 반환타입과 일치해야함.

메서드 이름(명명규칙) 식별자 규칙,숫자로 시작할 수 없다. 관례따라 소문자로 작성... 두번째 시작은 대문자 기능 쉽게 알 수 있도록 작성하는게 좋음.

가변인수 메소드의 매개변수 개수를 알 수 없을 때 사용. return a + b; 첫번째 방법. 배열로 전달. 두번째 . ...을 이용하여 선언 double sum(double ...values){} ->배열처럼 자동으로 변환 sum(1,2,3,4,5);<-이런식

메소드 이름 같아도 된다. 다형성 overloading

객체의 데이터는 객체 외부에서 직접 접근 막는게 좋다ㅏ(은닉) 접근 우회경로를 만들어 필드에 접근하자. int price -> 읽기 위해서 getPrice()만들기 -> 쓰기 위해서 setPrice(int price)만들기 readonly :읽기전용 하려면 setPrice 없으면 됨. getter만 writeonly setter만.

Day 8 Note

1.생성자 Stack Heap String s=new String "안녕"

new 연산자와 같이 사용. 클래스로부터 객체를 생성할 때 호출되고 객체의 초기화를 담당 생성자 실행시키지않고 클래스로부터 객체를 만들 수 없음. 객체 생성 시 1회 메모리에 올려줌. 모든 클래스는 반드시 하나이상의 생성자 필요. 생성자는 리턴이 없다. 생성자는 여러개 있을 수 있다->생성자 오버로딩 생성자가 없다면? 만약에 클래스 내 생성자가 하나도 없다->컴파일 과정에서 JVM이 강제로 기본 생성자 삽입

기본 생성자 : 매개변수가 없는 생성자. 클래스에 생성자 없으면 컴파일러가 기본 생성자를 추가. 필요에 따라 생성자 여러 개 가능

This. 매서드 호출을 받는 객체. 현재 사용중인 객체 그 자체를 의미. 생성자 만들 때 , 생성자가 여러개라면

오버로딩: 하나의 클래스에 같은 이름 메서드 여러개 존재 가능. 메서드들은 매개변수 타빙, 개수, 순서로 구별 반환값이 다른것은 오버로딩이 아님.

생성자 여러개->생성자 오버로딩

메모리 범위 (Scope) static , instance , local 변수. java 는 블록 단위. if(){}<-이게 블록. 메서드 만들었을때 거기 안쪽의 변수. 바깥을 벗어나면 접근 불가함. (지역변수) 메서드 영역, 블록 안쪽. 클래스 영역 -인스턴스 변수 -클래스 변수 : static이라고 붙은거. (정적) static 영역에서

인스턴스 변수. 각 인스턴스의 개별정인 저장공간. 인스턴스 생성 시 생성되고, 참조변수 없을때 가비지 컬렉터에의해 자동 제거. 클래스변수: Static 같은 클래스의 모든 인스턴스가 공유. new없이(인스턴스 생성 없이) '클래스이름.클래스(static)변수명'으로 접근 지역변수:메서드 안쪽 선언. 메서드 안에서만 . 메서드 끝나면 소멸함. 인스턴스 변수는 인스턴스가 생성 될 때마다 생성. 인스턴스마다 다름 클래스 변수는 모든 인스턴스가 하나의 저장공간을 갖게되는 공유영역. static영역에서 인스턴스 영역으로 접근 불가함.

static 멤버. 전역변수와 전역함수를 만들 때 사용. 모든 클래스에서 공유하는 전역변수나 전역함수를 만들어 사용. static메서드 내에서는 this사용 불가. this는 인스턴스 자신을 가르키기때문. static 메서드 내에서는 static만 접근 가능함. 정적 영역이 아니면 객체화를 시켜야해서 . 객체화 시키지않고도 실행해야해서. main은 static임. 인스턴스는 인스턴스화 없이는 접근이 안됨. 정적영역에서 인스턴스영역 접근 안됨. 스태틱 변수 -> 초기화. static멤버의 초기화는 static블록에서 할 수 있다. static { //스테틱 변수 초기화 ) 1.static 블록 실행. 2.생성자-> instance 만든다. 공유 영역이다.

디자인 패턴의 대표적인.. -단독 -타패턴 가장 많이 활용되는 패턴.. 싱글턴 디자인 패턴 이때 static을 활용한다. 전체 프로그램 상에서 동일한 인스턴스를 사용해야할 경우 활용. 절대 두개이상이면 안되는.. ex) 전체 프로그램이 내부적으로 같은 데이터를 유지해야한다면. 어떤 상황에서도 단 하나의 인스턴스만 유지. = 싱글패턴. ex)스마트폰 주소록.. 여러 앱이 하나의 스마트폰 주소록 사용.

패키지 서로 관련 있는 클래스 ,인터페이스 묶음 관리 위해서. 패키지 이용 장점: 클래스들 묶음단위 제공. 필요할 때 만 가져올수있음.클래스 이름 혼란 막고 이름충돌막음 사용법. import 패키지명.클래스명 -> import.java.applet.Applet -> Applet 클래스 가져와서 사용할수있다. import 패키지명.io.* 모든 클래스 불러오겠다. 패키지는 디렉토리 구조.. 페키지 위치시킬 디렉토리에 패키지의 계층구조, 동일한 디렉토리 구조 생성

접근 제한자 외부에서 접근 O, 없는 것을 구분하는 것이 바람직함. 가급적 field는 private으로 . 우회경로인 게터와 세터 이용해서.. class , member등에 적용가능. 생략하면 default제한자.

상속. 상속 or 확장 : 부모의 필드와 메서드를 자식이 물려받음. 클래스 사이 멤버 중복선언 불필요. 필드 , 메서드 재사용.. 클래스 간결 부모가 잘 만들어져있어야.. 상속의 깊이가 깊어지면, 의심을 해야한다. -> 문제 찾기가 힘들다. ->깊은 상속 가급적 피하자 다중 상속 지원 X (다중상속,, 두개 동시에 상속) 최상위 클래스는 java.lang.Object extends 상속과 생성자. 자식에 특별 지시가 없으면 부모의 기본 생성자가 선택됨. 부모 기르는 키워드 super. child(){}아무것도 안써 있어도 안에서 부모 생성자 호출. 부모클래스 생성자는 자식에서 반드시 호출 해주어야한다. 부모의 필드내에서도 접근시에는 SUPER키워드 사용.

메서드 오버라이딩(덮어쓰기) / 메서드 오버로딩 부모와 자식 사이에서 발생하는 관계 같은 이름, 같은 매개변수로 재선언.

어노테이션 컴파일러에게 @Overriding(부모로 가서 진짜 그게 있는지 감시,체크)

참조자료형이 부모일수도 자신일수도. 참조 자료형 설계도에 있는 내용만 수행.

Day 9 Note

-캐스팅 업캐스팅(promotion) 차 상속받아 버스, 트럭 만들었다. 버스도 차, 트럭도 차. Bus b = new Bus() 참조의 설계도가 bus로 되어있음. 이건 자동차의 모든 기능을 물려받을수있고 버스 자체의 기능도 모두 이용가능.

Car b = new Bus() Car t = new Truck()

주차장 Bus[]park = new Bus[5] -> Car [] park = new Car[5] 명시적으로 타입변환 하지않아도 된다.

다운캐스팅 명시적으로 타입변환 해야함. 책임은 개발자가.
Car b = new Bus(); Car 설계도 내부 기능만 이용할수있다. b . 안내방송기능() X (Bus)b.안내방송

instanceof 를 사용하면 어떤 클래스 객체화한것인지 알수있음.

다형성: 같은 타입이지만 실행결과가 다른 객체를 이용할수있는 성질 자식 -> 부모로의 타입ㅂ변환 허용함.

public class Dog extends Animal{ // }

에러의 이유? 생성자의 문제. 만약 개발자가 생성자를 하나도 만들지 않았다면 자바 컴파일러가 기본 생성자를 만들것이다. 내부에서 부모의 기본 생성자를 호출한다. 저기에 부모의 기본 생성자가 없어서 에러나는 거임.

public Dog() {

}

super가 생략되어있어서 에러가 나는거임.

애니멀을 상속받아 Dog 와 Cat을 만들었음. Cat이 Dog를 캐스팅 할 수 없다.

byte int long flaot double( 이

(추상 클래스, 인터페이스 유사함.) -추상 클래스 OOP중 추상화가 핵심되는 컨셉. 추상화는 객체의 속성,기능 중 중요한것만 남기고 필요없는거 없애는것. 객체들 공통되는 특성 추출하는것 new Animal() -> 무슨 동물이지? 모름. 추상화된 컨셉일 뿐이고 이걸 객체화 시킨다는건 사실상 불가능함. 이런게 추상 클래스. 실제 클래스의 공통적인 특성 추출하여 선언. 실체 클래스 만들기 위한 부모클래스로만 사용 : 스스로 객체가 될 수 없음. 자식에게 개념 등을 물려주기 위한 용도로만 사용. 추상클래스가 되려면 하나 이상의 추상메서드를 가짐. 속성필드와 기능 메서드 정의 할 수 있음. -추상 메서드 구현이 불가. 선언만함. 실제 자식 클래스는 추상 메서드를 반드시 구현 해주어야함. 추상메서드는 추상 클래스안에서만 존재할 수 있다. 실제 클래스 (concrete)클래스 안에 추상 메서드는 있을 수 없다.

public abstract class 클래스명 { --> new로 생성할 수 없음. } 상속은 extends로. 추상 클래스 상속하는 클래스는 반드시 추상클래스 안쪽 추상 메서드 만들어줘야함. 특정 기능의 구현을 강요하는 측면.

ex) Car (추상)/정지기능 만들어주세요 선언/ -> Bus(실체)/정지기능 무조건 만들어줘야함/ 실수 줄어든다. 자식에게 특정 메서드를 강제.

그림판 도형 : 위치, 면적,

  Shape
  x,y
  draw

Circle Lectangle x,y x,y draw draw (자식은 자기만의 그리기 구현)

public class Circle extends Shape{

}

에러의 원인. 1.생성자의 문제, 2.추상 메서드

Math.pow(radius, 2) 제곱 메서드 radius^2

-인터페이스

사용자 접점. 사람 <-인터페이스->사람 관계가 없는 물체들이 상호작용을 위해 사용하는 장치나 시스템. 클래스 구조 상 직접적 관계없이 클래스들에 의해 구현될 수 있는 규약

if Point(점만 찍고싶은데.. Shape 억지로 상속 받는 상황 ) 다른 방법? 사용법인터페이스만 보고도 내부객체 안쪽의 기능을 사용할수있다. 상속 많을 수록 유지보수 힘들어서.. 인터페이스 위주로 . 깊은 상속 하지않아도 프로그램 깔끔정리가능

public interface 박정연 {} -> 실체화 X public class Point implements 박정연{}

extends 부모 하나. implements 여러개가능

일반클래스만 객체화간 된다.

DAY 11 NOTE

-깊은복제 String,Stringbuffer Arrays Wrappers(기본타입을 객체타입으로 변환해주는)

얕은복제. objcet clone으로 얕은 복제

객체가 있다라고 했을 때 .Clone()하면 그대로 복제. x,y값까지 복제 얕은 복제는 단순히 필드값을 복사하는 방식으로 객체복제

배열(참조타입) 메모리 어딘가의 주소값을 담고있는거임. 배열.clone() 배열 담겨있던 값이 그대로 복제. 즉 객체는 복사 되었으나 참조타입은 복제가 안됨 내부필드를 모두 복제하고 새로나온 참조 값을 가르키도록 하는게 깊은 복제.

얕은 복제: 주소만 복사. 내부필드를 공유하는 상황 깊은 복제: 참조하는 객체도 복사. 이걸하기위해 clone을 오버라이드. clone() throws CloneNotSupportedException{} 객체 안에 클론 메서드를 오버라이드 하고 arrays.copyOf() 1.참조타입 필드 가진 객체 clone() 2.1문제 확인, 깊은 복제 해보기 (중요)

클론() 에서 참조타입 필드를 복제해주어야한다. -> override

object의 클론 복제는 얕은 복제. Object

-문자 = 기본 자료형 (char) 2byte 부호없는. 선언 char letter; 문자 할당 letter = 'A' 문자 사용 sysout(letter)

-String 클래스. 연속된 문자들을 저장하고 다루기 위한 클래스. H | E | L | L | O 캐릭터의 연속이다. length를 잡을 수 있다. 개별 캐릭터의 접근이 가능하다. 특수문자의 표현 이용할 수 있다.

\n개행 \t탭 " " \

문자열 연산. char이 쭉 나열된 배열과 같은 형태로 저장되어있다. +연산자는 문자열 연결. 문자열과 다른 타입 연결은 문자열로 변환되어 연결. ->문자열 연결 후 새로운 객체가 만들어 진 후 반환된다. 연결할 때 마다 새 객체가 튀어나온다. -> 메모리 낭비다.

charAt(position) 해당 위치 문자 반환 Substring(start,end) start부터 end까지 문자들 새 문자열로 반환 -> 마찬가지로 새 문자열이 튀어나옴.

toUpperCase() 대문자 변환 마찬가지로 새로 튀어나옴. concat("??") -> +랑 같음.

String 객체는 한번 생성하면 변경할 수 없고, 새로만들어진 객체로 참조만 바뀐다. 재할당시 새로운 String 클래스 객체가 생성된다. 복잡한 문자열 +로 연결하는건 적합한 방법 아님.

StringBuffer클래스. StringBuffer는ㄴ 그 안쪽에 문자열 담아둘 수 있는 버퍼.. 값 추가, 삭제, 변경 가능 복잡한 문자여 ㄹ조합일때 StringBuffer가 더 적합.

왼 리턴타입.

substring indexof tp:pwerCase replase() split

유틸리티 클래스. 배열 다루기. 배열 조작 기능 가진 API.. 정렬 sort 검색 search 자바 유틸리티. java.util안에..

자바가 내부적으로 객체로 받아들여서 기본 타입 받지 못할 때가 있다.

기본 java : 기준 값. sort를 통과시키면 어떤 기준으로 정렬할지 자바가 알수 없음. sort의 컨셉은 안쪽에 담겨있는 객체 두개씩 꺼내서 선후관계 비교후 다시 넣기/ 객체의 선후관계를 우리가 정해줘야함. (우ㅡ리가만든 객체니까.) compareto에서 하나씩 빼서 비교, 다시 넣음.

검색. 자료를 반으로 나눈다. 거기에 검색어를 대입. binary search? -> 기본적으로 데이터 중간을 찾아감. 그래서 바이너리 서치의 전제는. 내부 데이터가 미리 정렬되어잇어ㅑㅇ한다.

Day 12 Note

https://github.com/InventoryBox/InventoryBox_Android

좋아보임.. 이런식으로 프로젝트 하고싶음 참조하자

-Wrapper Class

primitive 타입(기본자료형. 더이상 쪼갤 수 없는 단순데이터) : 비어있을 수 없음(null허용하지않음)

reference(객체) :수치데이터임에도 null을 허용해야할 때가 있음. 그래서 생긴게 Wrapper클래스: 기본 데이터형을 객체로 다루기위한 포장클래스 정수형 Wrapper, 실수형 Wrapper클래스 모두 부모로 Number부모클래스 가짐.

자바는 객체대상으로 처리를 많이해서 Wrapper가 존재함. 특정클래스는 객체만을 다뤄서 기본 데이터형 사용할수없음. 문자열을 기본타입으로 변환할때 (Static method -> new사용안하고도 사용할 수 있는 메소드) utility method제공

Integer 데이터 메소드

deprecated ? : 기존버전에서 다른 방법으로 변경 되었는데 잠시놔두는..

타입간 변환 정수->실수, 문자열 -> 정수 (utility method) 문자열을 기본 데이터 값으로 변환 또는 그 반대

Integer.parseInt("-123") ; 문자열을 int로

ten,intValue(); ->언박싱

자동박싱, 자동 언박싱

자바는 객체 주로 다루기 때문에 기본타입이 아닌 참조타입으로 요구하는 때가 많음. 객체 다루다보면 null이 있어야 할 경우가 있음.(기본타입 받지않는 상황0 그래서 wrapper사용함.

-Utility class : Data, Dalendar : 편리한 기능을 모아놓음

-Generics -> 데이터 처리에 중요한 요소 ->나아가서 Collection

Collection Framework :중요~~

Date 날짜 시간.. 메서드들 많았는데 현재 생성자만 주로 사용. 날짜에 관련된 기능들은 calendar 클래스 허용.

Data Format oooo년 oo월 oo일 언어마다 포맷이 다 다름. 해당 언어에맞는 포멧문자 확인하기 yyyy-mm-dd HH:

import java.util.Date; Data사용 전 import해줘야함.

Calender 클래스 날짜와 시간정보 표현. 단 한개의 캘린더를 유지. 여러 객체 생성 X Singleton getInstance()호출하면 캘린더 객체 얻을 수 이ㅣㅆ음.

날짜 관련 연산 기능.

get(Calender.YEAR) 상수 부여 해주면 값 받을 수 있음. set(Calender.MONTH,10) 월을 10으로 셋팅. Add(Calender.MONTH, 10 ) 현재 얻어온 날짜로 부터 10월 더해라.

-Generic 클래스 내부에서 사용할 데이터 타입을 나중에 사용할 때 확정. 다운캐스팅은 위험할 수 있음. 인스턴스 생성할 때 바깥에서 데이터 타입 넘겨주는.. 클래스 안쪽 private T[] pArray

타입을 파라미터로 가지는 클래스와 인터페이스 class 안에 들어가서 instance됨., 설계시에는 어떤 데이터 타입인지 결정하지않고 객체 생성시 결정 class GenericBox E,R.... <>안이 하나일 필요 없음, T content; public T getContent(){ return content; }

Box intBox = new Box..

컬렉션: 다수의 데이터, 데이터 그룹을 의미 프래임워크: 라이브러리 코드의 집합. 절차를 만들어서 뼈대를 만들어뒀다. 컬렉션 프래임워크 : 컬렉션 저장 클래스를 표준화 ->순차형 ->해쉬..집합 ㄱ- Vector,ArrayList..

List 순서가 잇는 데이터의 집합 . O O O O O . 길이가 있음. index가 있음 Set 집합. 안쪽 데이터가 있다. 순서는 중요하지않음. Map 인덱스이용한 접근 X. Key. Value의 쌍이다. Key와 Value의 쌍. 순서는 유지 X. Key의 중복이 없다. 우편번호..지역번호 등

배열 V s 리스트 느린접근. 배열처럼 자료들을 붙여서 담을 수 없음. 참조자료 유형만 사용가능.(참조자료이니까 공간 어떻게 할지 모름.) 필요할 때 필요한 만큼 할당

                    가변적 크기 

Vector() 안쪽에 어떤 데이터 담을 수 잇는 버퍼르 ㄹ만들어둔다. remove(객체) remove(인덱스) size(크기) capacity(용량 : 버퍼의 크기 알 수 잇음.)

컬렉션 프래임워크는 primitive 타입 넣을 수 없음. collection 만. vector의 결과는 항상 object 적절한 type으로 변환 후 사용. generics로 지정하징낳으면 여러타입ㅇ러 지정가능.

size:0 , capacity: 10 객체 갯수 버퍼 사이즈. 미리 버퍼 만들어놓는 ㅣ융? 메모리 할당, 해제작업이 CPU라던가 메모리를 많이 소요하는 작업.. 때문에 미리

없는 객체의 인덱스 검색은 -1을 반환한다.

객체 삭제

short integer long gloatr double

첨에 부르면 enumeration이 맨 앞에.. 순서대로 데이터 뽑아낼 수 잇따. 뒤에 몇개 더 남았는지 알수 없기때문에 while불러줘서..

Day 13 Note

-Collection Framework

List(배열)

Set(집합. 데이터 중복 허용 X)

Map(딕셔너리, 순서 중요 X, key의 중복 허용 X. 집합 자료형. 키값,value값., )사전 찾을 때 index로 찾는 것처럼..

배열: 고정된 크기, 비효율적 메모리 점유 List는 유동적, 가변적인 크기 , 참조자료 유형만 사용가능. primative 타입 쓰고 싶으면 Wrapper로 써줘야한다.

Linked List Linked List 생성하면 head 만 생김. List 인터페이스 (설계도) index 통한 참조접근 불가. head로 부터 링크 따라가면서 접근 . 인덱스 접근 할 수 있는 메서드가 있기는 함. 객체 생성 , 링크 끊음. 다시 연결 삽입, 삭제 (메모리 효율적으로 움직임)

List Vector LinkedList ArrayList모두 추상클래스 AbstractList상속받은 동적 자구.

add(어디에,뭐를) set() get() remove() List 설계도

ArrayList 배열과 비슷 중간 객체 삭제되면 뒤의 객체 당겨서 인덱스 재구성. LinkedList에 비해 효율 떨어짐.

List l = new LinkedList()

Stack push(0 pop peek empty -> 안쪽에 데이터 있는지 비었는지 확인

13일차 List, Stack 자료형

Hash set hash알고리즘. 해시코드란 객체를 식별할 하나의 정수값. "car"->HASH -> 정수 //이걸로 찾음

 student class    -> new student  -> new student 
 name                박정연          박정연
 id                  1               1

hashcode가 메모리 주소 반환. 같은 이름가진 같은 학번임에도 hash set에 들어감. 이게 문제임/

동일한 객체를 동일한지 아닌지 어떻게 비교할 것인가?

  1. object가 가진 hashcode비교.
  2. equals() 내부 값이 동일한지 비교.
  3. 그렇다면 두 객체는 동등 객체임.

Day 14 Note

-Stream과 IO 표준 입출력 : System.in(키보드)/ System.out(모니터) +file + network IO다루기 위한 자바의 표준 API

System.out - PrintStream이라는 클래스를 연결해둔거임 System.in - InputStream이랑 연결.

Stream이란 무엇인가? :흐름. 한방향으로 프로그램과 IO객체를 연결. Stream또한 객체로 취급함. 스트림객체 -> 객체 생성->소스연결 ->데이터 출력

ByteStream 2진파일(이미지,사운드,프로그램) CharacterStream 문자,텍스트형태의 데이터

FileInputStream

read 메서드 수행하면 데이터가 순서대로 흘러들어옴.

OutputStream write method 데이터를 흘려보낼 수 있게된다.

input은 불러와야하니까 read계열.. close() 다 사용하면 닫아줘야한다.

write할때는 flush() -> close()해주는 것이 좋다. (내부버퍼비우기)//타겟의 상황 알기 위해서

inputStream read() : 1바이트 읽고 4바이트 int타입으로 리턴 더 이상 입력 스트림으로부터 바이트 읽을 수 없다면 -1반환. read() = 1byte읽어서 4byte로 반환

read(byte[] b) method 버퍼를 활용한 메서드 b.length 만큼 바이트 읽고 배열에 저장

while 이 -1이 아닐 동안만 loop돌기

read(byte[] b, int affset, ine len) offset만큼 건너 뛴 후 읽기

다 쓰고나면 close()

write int 중 끝에있는 1byte만 전송

flush() output은 바로 출력 X. 내부의 작은 버퍼에 쌓여있다가 순서대로 나가.ㅁ 버퍼에 남은 내용 모두 출력시키고 버퍼를 비운다. 그래서 flush 뒤에 close해주는게 좋음

FileStream (2진 Stream) ajva.io 패키지에서 제공 파일정보, 파일 조작, 디렉토리 관련 파일 객체를 생성한것이지 파일을 생성한것은 아님 exists method 이미 존재하는 파일인지 체크 createNewFile() 새 파일 생성 / 부모 없으면 못만든다. mkdirs() 경로상에 없는 모든 디렉토리를 생성

실제 복사는 버퍼를 만들어두고 블록별로 전송함. 지금한건 안쪽의 data를 1byte씩 불러와서 저장 = 효율 안좋음. BufferStream 에서 해소하자.

chracter Stream reader method : 입력 스트림으로부터 한개의 문자 (2byte) 4바이트 int타입으로리턴 writer method :int를 char로 변환하면 읽은 문자 읽을 수 있음.

보조 스트림 stream and IO

단독 사용 X 데코레이터 패턴 객체의 추가적인 요건 동작으로 첨가 subclass만들어서

보조 스트림은 자체적으로 입출력수행할 수 없다. (중요) 그래서 주 스트림이 있어야함. 주 스트림 (데이터 소스로부터(연결해서)데이터 읽어오기) filterInputStream(추가기능) read와 write override해주면 됨.

BufferdInputStream 입출력 효율 높임. FIS -> string 얻어옴 -> BIS ->bis.close 하면 fis도 닫힘.

BufferedReader 와 BufferedWriter

readLine() 줄단위로 읽어옴. newLine() 개행문자 전송

DataInputStream 과 DataOutputStream //보조 스트림 . 기본타입 할 수 있음. inpustream과 outputstream은객체(binary)만 입출력 가능. 기본타입 입출력 못함

중요. dataoutputstream을 가지고 문자열 ,int,double출력했다면 dis도 문자열, int,double순서대로 가져와야한다.

Day 15 Note

  • Stream과 IO마무리

Input stream Output Stream 주 스트림(IO작업 여기서) 보조스트림(IO 수행하는데 +부가기능추가/데코레이터기능)

두가지로 나뉜다.. 객체가 가진 추가적인 요건을 동적으로 첨가 기능을 유연하게 확장할 수 있는 방법 제공/ 여러가지 붙어도 됨

콘솔 키보드(입력) 모니터(출력)통한 입출력을 표준 입출력. JVM시작되면 자동적으로 생성되는 스트림 System.in System.out System.err / 표준입력 표준 출력

(중요) 정상수행하면 java가 알아서 파일을 close해줌 Network Scanner IO Stream Database / 얘들은 알아서 됨. close()해줘야 읽을 수 있다 파일에서 입력과 출력을 동시에 할 수 있으나 Transaction관점에서 바람직하지않음

StringTokenizer 문자열을 특정 구분자로 분리기능. readLine() -> String -> 기준으로 분리 .split() Text->구분자->분리 뒤에 더 있는가 확인->다음거 넘어가게 hasMoreTokens->nextToken

StringTokenizer 생성자 StringTokenizer (String str) -> 기본 구분자,( 탭,개행문자)/t/n/r StringTokenizer (String str, 구분자) #- -> #or-

Comma seperated Values : 컴마로 구분된 데이터 형태 readLine() -> 컴마로 분절.

Scanner는 next계열.. 로 parsing 사용 가능. 읽을 거 없을때 exception을 throw try catch로 예외잡기. hasnextline()등으로 확인. next() nextfloat() 으로 불ㄹ러 올 수 있ㅇ다.

bufferedreader는 readLine() null값 return

-Thread

Thread란 프로그램의 실행 흐름:process내의 하나의 작업 흐름 process : 실행중인 하나의 프로그램

프로세스하나 - 스레드 하나 처음 프로세스 생성되었을때 생기는 스레드(Main thread) 메인 스레드 실행되고 부가적인 기능 넣고싶으면 main thread가 다른 스레드 생성. 특별한 지시 없이는 수행끝날때까지 별도의 작업을 수행 멀티 스레드-힘든작업. 어렵기도 함.

thread의 상태를 봐야함. thread생성되어서 메모리에 올라옴 : NEW New+start() : RUNABLE runable + run():RUNNING

MultiThread 프로그램 작성 방법 Thread클래스 상속, 로직작성 Runnable 인터페이스 이용. runnable interpace 구현해서 -> implements 로직작성->thread에 전달

Thread run(Runnable)

Thread run <- Runnable Logic Thread클래스->복잡한 thread구현가능 start메소드 : 1.스레드 생성, 2.run 호출. 내가 run 호출하면 안됨.

Runnable interface이용 -> Thread Logic 간단. thread logic만 가지고있어야함. class implements Runnable 내부 설계도 메소드 오버라이드.(implement)니까. 여기는 run 만 정의되어ㅣㅇㅆ음.

Thread상속코드 ->멀티스레드 Runnable 구현코드

경우에 따라서 시스템의 자원이 부족하다면, 스레드의 우선순위를 ㄹ잡아줄 수 있다. setpriarrety (1~10) 까지 잡아줄 수 있음. 일반:5

JavaThread 메모리영역 공유시켜줄 수 있음 메모리 공유객체를 다루고자할때 데이터를 변경시키는 영역은(임계영역) /함부로 바뀌면 안되는 해당 객체를 Lock해야 다른 사람이 변경 X.

Network and Thread TCP Socket: 인터넷의 기반이되는 프로토콜 IP:주소(엔드포인트,위치) TCP:데이터 전송위한 프로토콜 식별주소 판단. IP/위치지정 데이터 전송 : TCP

소캣:양쪽에 소켓 연결된 상태에서 통신가능 UDP는 연결유무 상관없이 데이터를 주고받음.빠름.게임에서 많이 사용. TCP연결지향. 연결되었는지 계속 확인작업이 필요함. 그래서 속도가 좀 느림.정확도는 높음. 신뢰성 | | FTP HTTP (들이 TCP기반) 연결지향:한번 연결되면 끊어질때까지 송신데이터가 차례대로 목적지 소캣에 전달 서버소켓 만들어뒀다가 대기를 (클라이언트 접속할때까지) 소캣 생성역할

서버 /클라이언트 여러 클라이언트의 요청 처리할 수 있어야 | 서버상에 접속,데이터 요청, 서버데이터받아서 처리 서버소캣 하나 있어야함. 일단 주소 연결. 네트워크 장비의 IP주소와 | 서버소캣주소로 접속 시도. 연결(binding) 대기. 연결요청 받아들임. 이러고나면 소캣객체가 나옴.

서버 소캣객체와 클라이언트 소캣객체가 통신하는거임. EchoServer : 클라이언트가 메세지보내면 반대로 다시 돌려보내주는 서버. 채팅.웹서버 구현가능..

ServerSocket생성->바인드->클라이언트 소캣만들고->ip주소+포트(연결요청) ->accept() ->포트가 할당. 소캣끼리 통신. 소캣에서 inputstream과 outputstream을 뽑아낼 수 있다.

INET addr 에 대하여..

cmd ipconfig : 내 local 주소

www -> 여러개의 서버를 동시에 돌리고있음. (로드발란싱) 유효자원으로 연결. 하나의 호스트이름이 반드시 한개의 아이피에 연결되어있다고는 할 수 없음.

Day 16 Note

서버의 역할과 클라이언트 구분 해주어야한다. 서버가 대기를 해주고있어야하고 서버소캣 객체를 만들어줘야함. 접속 대기를 해줘야함. 데이터 전송용 소캣 만든다. Local host = 내가 나를 부를 떄(지칭할 때 ) 포트는 중복되면 안된다. Http = 80번 port. 그래서 임의로 정해진 포트 사용. 포트내에서 프로그램 실행하면 안된다. 다른 process들과 겹치지않는 숫자로..

접속 됐으니까

outputStream에서 bufferedWrite 보조스트림 사용. 서버 소캣이 그거 받아들임

                           (여기에 write실행하면, Os server에 전송된다.)
                            |

Os 앞에다가 -Writer (덧붙여줌)- BW - 우리의 process -Java Socket IO

-Echo Server (Socket + Thread) 만들기

More about git

project 관리 위해서 LocalRerpository가 필요하다.

변경된 파일을 로컬 레퍼지토리에 올린다(Staging된 것임)//commit commit하면 log와 함께 기록이 남음. (로컬레퍼지토리에)

   |
   |
 (push)
   |

remote Repository (원격 레퍼지토리)

fetch(remote repository의 로그만 확인한다) pull(remote repository에서 파일을 가져오는)

새 프로젝트 -> 로컬레퍼지토리를 생성해야 commit할 수 잇다. ->Team -> ShareProject -> 위치를 잡아달라고 한다. git디렉토리 안에 저장소 생성 프로젝트 파일의 위치와 저장소가 같은 내용이 아니다. 파일을 만들어준다. ->디렉토리 생성. .get 이 파일이 저장소 정보 관리하는 정보파일들을 담고있는 파일. (보기->숨김파일 표시 하면 보임)이러면 연결된거임. ->Team -> commit -> unstaged .아직 git저장소에 저장될 준비 안된거. -> unstage를 옮기면 staging단계. 여기서 commit하면 로컬레퍼지토리로. (커밋 메세지가 반드시 있어야한다. ) 기록이니까 제대로 써주기. ->Author랑 Commiter 잘 지정해주기. ->Propertiy->git에서 설정할 수 있나봄 commit 만 하면 로컬브렌치까지 반영되는거임. ->git에서 레퍼지토리 생성. 그러면 저장소의 주소가 나온다. 그걸 복사해서 우리 로컬 레퍼지토리의 remote로 등록해주어야함. 주소 복사 Remotename에 붙여넣기. 서버계정 아이디 패스워드 입력해주기. 하나의 브랜치. master로 서버에 올려줌.

원격 브랜치 | | (변경사항있는가 ? 확인 : fetch) A B (fetch하면 변경사항이 내려옴. 변경사항 다운로드 : pull) text.txt

기본적으로 마스터라는 브랜치가 생김

  B의 head.. ->o->

master | | -> o master의 head 마스터가 재배열(A나 B와 merge) (처음에는 아무것도 없음. 여기가 Head) | | 마스터에서 A로 : checkout 변화가 생기면 변경기록이 남음. A의 head ->o->o->o-> o->o->o-> commit 하고나면 head가 이동.(o로) 또 커밋하면 헤드 이동.

만약 공동작업을 한다면? : 같은 파일을 고친다거나.. 충돌이 일어날 수 있음. 그래서 브랜치를 만든다. 브랜치는 새로운 작업의 흐름을 만드는 거임.

master는 쭉 가도록 내버려두고 개발 브랜치 따주고 거기에서 작업자 브랜치를 또 따주기 master로 직접 머지는 권장하지않음. 특정 규칙에 따라서 계속 merge 출시일 되면 master로 땡겨줌. test브랜치라던가 몇개정도는 관리해주는게 좋음 master는 함부로 건드리지 않는게 좋음. gitflow 를 찾아보렴 제품이기도 하면서 컨셉임. 브랜치의 운영전략 개발자 별로 브랜치 따기 dev따서 거기에 합치기..

bit-java's People

Contributors

jeongyeon-park avatar codemaxim avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.