수업계획

8월말까지 자바

8월말에 DB

그담에 프론트. jquery를 넣을까 말까 고민중

다음 아두이노 ㅇㅅㅇ.

--

유클리드 호제법

두 양의 정수 a,b(a>b)에 대하여 a = bq + r (0<=r<b)라고 하면
a,b의 최대공약수는 b,r의 최대 공약수와 같다. gcd(a,b) = gcd(b,r)
a = 12345 / b = 1234

12345 = 1234*10 + 5 ( a = bq + r )
1234 = 5*246 + 4 ( a` = b`q + r )
5 = 4*1 +1 ( a`` = b``q + r )
4 = 1*4 (a``` = b```q + r )

while(b!=0){
int n = a % b;
a = b
b = n
if( n==0 ) return a; }

시간복잡도 O((log n)^2)
6*4 6*3
24 18
24 = 18 * 1 + 6
18 = 6*3
최대공약수 6?
최소공배수는 어케 하냐

24 48 72
18 36 54 72

뭔가 패턴이 보이는 거 같기도?

--

Math.pow(밑, 지수) WoW

2진수 8진수 16진수 변환..

int i = 127;
 
String binaryString = Integer.toBinaryString(i); //2진수
String octalString = Integer.toOctalString(i);   //8진수
String hexString = Integer.toHexString(i);       //16진수
 
System.out.println(binaryString); //1111111
System.out.println(octalString);  //177
System.out.println(hexString);    //7f

--

알고리즘을 공부하려면 컴퓨터 구조도 알아야하네?
드가자잇~

--

상속처럼 인터페이스 타입으로 변환된 객체도 원래 자아를 찾아 떠날 수 있다.
돌아가면 자아를 찾아서 자신만의 메소드나 필드를 다시 쓸 수 있지.
instanceof 쓰는것도 똑같다.
결국 상속의 상위호환이 인터페이스 아닐까 

--

멤버 클래스의 경우 컴파일 시 클래스별로 따로 저장되긴 한데,
A의 필드안에 있는 B클래스(멤버 클래스)라면 B.class가 아닌 A$B.class로 저장된다.
A의 메소드 안에 있는 B클래스(로컬 클래스)면 A$1B.class로 저장.

멤버 클래스 안에도 static 선언에 따라
선언X : 인스턴스 멤버 클래스
선언O : 정적 멤버 클래스로 분류된다.

인스턴스 멤버 클래스는 인스턴스 필드와 메소드만 선언이 가능하다. static성님 못만져!
정적 멤버 클래스는 다 가능 ㅇㅇ 성님 하고싶은대로 다 해버려~

로컬 클래스 : 접근제한자 필요없고~(차피 부르는 메소드 안에 있을거아녀) static 성님 못만져!
주로 비동기처리를 위해 스레드 객체를 만들때 사용한다.
메소드를 실행하는 스레드와 다르므로 메소드가 종료된 후에도 로컬 스레드 객체는 실행 상태로 존재할 수 있다.
자바는 컴파일 시 로컬 클래스에서 사용하는 매개변수나 로컬변수의 값을 로컬클래스 내부에 복사해두고 사용한다.
그런데 매개변수나 로컬변수의 값이 달라진다면? 망하지 않겠나.
자바 7 이전까지는 final키워드 없이 사용하면 아주 혼냄. 자바 8 이후부터는 final 없어도 사용이 가능하다.
왜냐? JVM성님이 알아서 final시켜줌 ㅇㅇ. final 안붙였다고 막 바꿀려고 하다가는 컴파일러 형님한테 혼나요~

중첩 클래스에서 바깥 클래스 참조하기.
this는 객체 자신의 참조. 바깥놈 이름이 A라면 A.this.필드 / A.this.메소드() ㅇㅋ?

중첩 인터페이스는 뭐냐 ㅁㅊ 클래스 안에 인터페이스가 있어? 뉴 월드네
인스턴스 멤버 / 정적 멤버 인터페이스 모두 가능.
인스턴스는 바깥 클래스의 객체가 있어야 사용 가능, 정적은 바깥 객체없이 바깥 클래스만으로 바로 접근
보통 정적으로 처리, UI프로그래밍에서 이벤트를 처리할 때 주로 사용.

중첩 클래스 - 이놈이 특정한 한 녀석과만 소통할 때 그냥 안에 집어 넣어버려라?
멤버들 접근도 편하고 외부에는 보이지도 않으니 복잡성 Down
인스턴스 멤버 클래스, 정적 멤버 클래스, 로컬 클래스 3개로 ㅇㅇ

--

 

인터페이스 내부 - 변수 > 상수, 메소드 구현부 X > abstract, 
디폴트 메소드 > 오버라이딩 되고 뭐 알아서 써라, 정적 메소드 > 객체 없이도 써라.
디폴트 메소드 : 이미 짜여진 코드를 나중에 기능을 추가할 경우? 아니면 공통적인 특성이지만 다형성이 필요없을 경우?

선택에 따라 객체를 다르게 만든다.
선택 이후 객체를 핸들링해야 하는데? 이름이 같으니 못찾는다.
객체를 반환하는 메소드? >> 그냥 미리 맹글어두고 집어넣어버리기~

--

Anonymous 익명객체
조건 : 상속하거나 구현해야 함. ( 왜 예제는 상속 구현 안했는데 되냐? ㅡㅡ )
부모클래스(or 인터페이스) + 변수 = new 부모클래스(or 인터페이스)(생성자 파라미터 맞춘 인자값){ ... }
바로 실행문이 있는걸 보면 그냥 이걸 해라! 이런건가
재사용되지않고 특정 위치에서 사용할 경우 생성한다는데 이때만 쓸 일회용품으로 실행문까지 쓰는거지
부모 생성자 불러서 호다닥 만들어서 써먹고 버려~
필드 메소드 선언 가능 주로 부모 메소드 오버라이딩 ㅇㅇ 생성자는 당연히 불가능

자식 클래스의 필드에도, 메소드에도 다 올 수 있다.
필드에 초기값으로 박히거나, 메소드에서 로컬 변수마냥 ㅇㅇ
메소드의 매개변수가 부모 타입일 경우(???) 메소드를 호출하는 코드에서 익명객체 생성해서 매개값으로 익명 자식 ㅎㅇ

익명 자식 객체에 새롭게 정의된 필드와 메소드는 내부에서만 사용, 외부에서는 접근 금지. 차피 부모 타입 것만 쓰니까? 근데 오버라이딩하는 메소드는 부름ㅋ 신기방기~

인터페이스를 부모로 생성하는 익명 객체는 추상화 된 모든 메소드들을 살려야 안혼나겠지?

익명 스레드 객체를 사용할 때. 메소드 종료 후에도 스레드가 살아있다면? 그리고 그 메소드의 매개변수나 로컬변수를 익명 객체가 쓴다면? Holy S**t
알아서 JVM 성님이 final로 선언해줍니다.. 로컬클래스 복습 하러갓!

 

--

 

예외가 생기면 프로그램은 그 즉시 죽는다. 죽지마!!
예외도 일반 예외, 실행 예외로 나뉘어진다. 맞지. exception을 상속받는 runtime exception
핸들링한다면 예외 처리 가능! 프로그램 잘 돌아가게 잘 짜야해
실행 예외는 컴파일러가 바로 잡지 않기 때문에 경험과 기본기가 있어야 한다.
다중 catch! 하위 예외 클래스부터 이쁘게 작성하자. Object가 맨 위에 있으면 안되지
throws로 메소드 호출한놈한테 예외 떠넘기기.
API봤는데 생성자와 메소드에 throws 있는 놈 쓸려면, 예외처리를 해야한다.
main에서 짬때리는 놈은 JVM이 최종적으로 예외처리 함. 콘솔에 출력하는 방식으로 ㅇㅇ. >> 비추

'2022_Java > 메모' 카테고리의 다른 글

7월 5주차 끄적임  (0) 2022.07.31
7월 4주차 끄적임  (0) 2022.07.22

배열의 정렬과 검색.

버블 정렬, 선택 정렬을 증명?

배열은 컴파일 타입
컴파일할때 크기가 결정된다.

리스트는 런타임 타입.
프로그램 실행 과정에서 호에에엥 가능.

 

-

 

잊지마라 enum

생성자 없고 메소드 없고 필드만 있지.
필드의 '상수'들을 enum name 데이터 타입으로 나타내주는?

enum 상수들은 모두 대문자로 + snake표기법

다른 클래스에서 Week today = null; 가능. 참조타입이니까.
Week enum은 메소드 영역에서 바로 힙 영역 쏘는중.
이넘 변수가 생기면 그건 스택에서 참조값만 베껴서 생성.
 > 그 말은 곧 메모리의 주소가 같다. 동등 비교 연산자 == 쌉가능~

--

객체 모델링 : 객체의 멤버와 메소드를 어떻게 해볼까아

java 파일 한개에 여러 클래스 가능. 하지만 public은 하나죠?
무서운 사실 : 컴파일하면 클래스별로 따로 각각 클래스파일 생성

new 연산자 : 힙 영역에 객체를 생성시킨 후 그 주소를 리턴. void가 아니네!

초기화를 하지 않은 필드 속 char타입 멤버의 초기값은 무엇일까요?

생성자가 하나라도 명시되어 있다면 기본 생성자는 생성되지 않는다. Class(){} 하나 더 만들어줘잉

this() : 다른 생성자 호출. 반드시 생성자의 첫 줄에 와야한다.
매개변수의 순서가 같아야 할 듯?

Board(String title, String content, String writer, String date, int hitcount){
this.title = title; ... this.hitcount = hitcount }
Board(String title, String content, String writer){
this(title, content, writer, "응애", 0) }

호오~

메소드에서 매개 변수의 개수를 모를 경우?
매개 변수를 배열 타입으로 선언 (main친구 맨날 String[] args 끼고 살더니 그렇게 큰 뜻이?)
int sum(int[] values){ ~ }
아니면
int sum(int ... values){ ~ } 쩜쩜쩜 왜 귀엽냐ㅋㅋㅋㅋㅋ

클래스 인스턴스 생성. ex) Member member = new Member();
다 써먹었어. 그래도 계속 member 변수가 참조해서 GC 안할거 아냐?
다 써먹었다고 null로 일일이 잡아야하나? 그러진 않을 거 같은데
다 지역변수로 쓰나?
 > 이렇게 낭비가 안되게 클래스를 써먹어야 이쁜 프로그래밍이 아니겠나!

static을 다른 클래스에 해놓아.
JVM은 main부터 돌린다 했는데, static이 어딨는지 알고 돌림? 
이 친구는 다른 클래스에 얌전히 짱박혀있잖슴?
컴파일할때 static있으면 여기 스태틱 있어요!!! 챙겨가세요!! 하나?

 

--

 

c++은 다중상속이 된다.

그럼 두개의 메소드 명과 파라미터가 같다면? 우째?

두가지 해결이 있다.
abstract or virtual?
하지만 해결을 못한다?

absract를 하면 결국엔 상위클래스는 고자되는거 아녀?
원래는 할일 잘 하던 애였는데 ㅇㅅㅇ
결국엔 인터페이스마냥 고자만든다는 이야기로 들리는걸

--

진짜로 ArrayList LinkedList가 이렇게 동작할까?
생각보다 느린걸
그러면 배열에 하나씩 담아서 색인하는게 낫나 노드로 묶어서 색인하는게 낫나에서는
배열이 빠르다? 메모리의 연속성? 역시 컴퓨터구조를 알아야..?

--

Object클래스에 정의된 toString() 메소드는 
getClass().getName() + "@" + Integer.toHexString(hashCode()); 이다?

ㅇㅅㅇ,,?

--

Git - 리눅스 개발자인 형님이 깃 또한 만들었다.(리누스 베네딕트 토르발스) 외계인인가?
PNG파일도 되네? 결국 모든건 프로그램이니 다 되는걸까?

--

VS Code
Extensions > Live Server : 알아서 보여주넹

--

싱글톤 : 메소드 빼고는 다 그냥 private로 막아버린다는거 아님?
필드에 private static Singleton singleton = new Singleton(); 이걸로 객체 한개 만들어 놓는다는거 신기하네.

static final 타입 상수 = 초기값;
상수 이름은 ALL 대문자 + snake표기법

패키지 이름은 모두 소문자.
java로 시작하는 패키지는 자바 표준 API에서만 사용하니 안되용.
패키지도 중복될 수 있다. 
com.kakao.projectname 이렇게 도메인 역순으로 하면 개꿀

이클립스는 패키지 선언 없는 클래스를 default패키지에 넣는다.
JDK8 이전 버전에서는 패키지 없어도 되지만 11부터는 컴파일 에러 맨~
난 정말 Java의 소스파일을 JDK8에서 열면 될지도?

import : 사용하려는 클래스 또는 인터페이스가 다른 패키지에 있을 때. 맨날 쓰다보니 이거 정의는 거의 처음보네
상위 패키지를 import했다고 하위 패키지까지 import되는 것은 아니다. 그럴거면 java.*해버리면 되지
또한 두 패키지에 같은 이름의 클래스가 존재한다면 조지기때문에 
com.pearlabyss.projectname.Love 이렇게 정확하게 패키지가 포함된 클래스 전체 이름을 써야한다.
근데 요즘엔 IDE가 알아서 다 잘해줌 ㅎ

접근제한자
클래스는 public, default 두개 ㅎ
생성자는 4개 전부 다. default생성자는 클래스와 동일
필드와 메소드도 4개 전부 ㅎ

필드 타입이 boolean일때는 Getter는 get말고 is로 쓰자.
isStop? 요로케 ㅎ 

상속이라고 다 받는게 아니다. 아빠한테도 프라이버시가 있어! (private, default의 경우겠죠?)
부모 없는 자식 없다. 자식 클래스의 객체를 만들더라도 부모 객체를 상속해야 하니 부모는 존재한다!
super();을 자동으로 해준다고! 부모 클래스에 기본 생성자가 없으면 귀찮다.
매개변수 받는 생성자만 있으면(그럼 default생성자는 없것지?) 반드시 부모 생성자 호출을 하기 위해
똑같이 맹글어서 호출해야한다. 그것도 생성자 첫줄에! ( this(); 이거랑 비슷한거여? )

오버라이딩 : 접근 제한을 더 강하게 재정의할 수 없다? 반대는 된다? 왜 와이
부모 public > 자식 무조건 public // 부모 default > 자식 public 가능
부모의 메소드와 동일한 시그니처를 가져야한다. ( 리턴타입, 메소드이름, 매개 변수 목록 ) < 안그러면 오버로딩이것지?
새로운 예외를 던질 수 없다.
아빠 메소드 다시 쓰고 싶으면 super.method();해라

final : 변수에게는 const의 단단함을, 클래스와 메소드에게는 완벽함을 알려주는 느낌.

 

--

 

Q1157

touppercase();하고
알파벳을 charArray로 조져?
그담에 sort해?
그리고 for문 돌리면서
같으면 cnt++ 다르면 cnt = 0
max 잡아두고?

그럼 중복 단어는 어케 잡냐?

--

sort할 필요 없다.

아니지 sort해서 for문을 덜돌자?

그냥 알파벳 크기만한 배열을 넣어서 오호
제일 큰 값 어딧냐

--

Q9020

4이상의 모든 짝수는 두 소수의 합으로 나타낼 수 있다.
테스트 개수 T
테스트 한줄 짝수 n
두 소수 출력, 작은거부터. 여러 가지인 경우 두 소수의 차이가 가장 작은걸로.

n<=10000까지니까
5000까지 소수 뽑자? 아니네 1만까지 쫙 뽑자.

 > 에라토스테네스의 체 복습 겸 구현
프라임 배열 10001
0 1 트루
2부터 제곱까지. 

--

sleep 리하이~

--

Q7568

2차원 배열로 해볼까?
초등부 문제에 끙끙대다니 자존감 하락중

--

JAVA Collection 시간 복잡도/특징 정리 : https://www.grepiu.com/post/9 이거 말고도 많이 있네 ㅇㅇ

공간복잡도랑 같이 한번 정리해놔야할덧

--

클래스에도 타입 변환이 있다.
자식 타입을 부모의 타입으로! 그러면 부모 필드와 메소드만 사용할 수 있따..ㅠ
하지만 오버라이딩된 메소드들은 이쁘게 그대로 쓰니까 해-피
그렇게 메소드 매개변수에 부모를 지정해놔도 자식을 집어넣으면 어떤 자식이 가느냐에 따라
메소드의 실행 결과가 다 다르니까! 매개 변수의 다형성도 해-피
자식 타입을 원래대로 다시 자식타입으로 강제 캐스팅도 된다. (int)랑 똑같다.
 > 그러면 죽었던 자식의 필드와 메소드가 살아난다? ㅁㅊ

instanceof : 객체 타입을 확인하는 연산자. 주로 형변환 가능 여부 확인용으로 사용, 왼쪽은 참조변수 오른쪽은 클래스
매개값의 타입을 조사할때 쓴다. 강제 타입 변환 할 때 매개값이 뭔지 instanceof로 확인하고 안전하게 ㅇㅋ?
그럼 int도 자기 따까리들 다 상속하는건가?

추상 클래스에도 생성자를 선언할 수 있다. 어차피 객체도 안만들텐데 왜? > 자식 객체가 생성될때 super(...)를 호출해서 조지니까?
추상 메소드는 실행 내용인 중괄호가 없다. 

인터페이스는 상수 필드와 추상 메소드만 가진다.
생성자 필요가 하덜덜없어~ 상속도 안하는걸 ㅎ
그냥 필드 입력하더라도 컴파일에서 알아서 public static final을 해서 상수해버려~ 변수명 다 대문자로 조져 + 선언과 초기화를 무조건 동시에!
메소드도 그냥 다 public abstract로 가버렷~

인터페이스를 구현하는 메소드들은 다 public이 될 수 밖에없네. 엄마가 public이니까? ㅇㅅㅇ..
왜 받는 친구들의 접근제한자는 더 강하게 설정할 수 없을까.

구현 클래스를 만들고(ex Tv) 생성한다고 다 인터페이스를 사용한 것이 아니다?
Tv tv = new Tv(); 이건 아니다?
Control cnt; 이렇게 인터페이스 타입 변수 cnt를 선언하고 cnt = new Tv(); 구현 객체를 대입해야 한다?
Control cnt = new Tv(); 가능? 이러면 Tv객체 어디서 찾음? 그냥 cnt.remote()하면 되나? 되네?
Tv tv = new Tv(); Control cnt = tv; 가능 그럼 tv.remote()도 되고 cnt.remote()도 되나?
tv.remote()는 그냥 가능, cnt.remote()도 되네? 신기해

클래스를 선언할 때 인터페이스는 필드, 생성자 
또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있습니다?
이렇게 구현 객체가 인터페이스 타입에 대입되면 인터페이스의 추상 메소드를 개발 코드에서 사용할 수 있게 된다?
개발 코드에서 rc로 메소드 쓰면 구현 객체의 메소드로 자동 실행. 당연한거 아녀?

 

--

 

자료구조 구현 다 조진 뒤에
정렬도 한종류씩 구현해보기.

 extends T : 상한 경계
? super T : 하한 경계

<?> : 와일드 카드(Wild card)

--

Q2941

j 아니면 = 로만 나눠도 될듯?

dz= 있으면 한개로 컷하고 나머지 =는 컷해 - 찐따들도 ㅇㅇ
lj nj 잇어도 한개로 컷하고 끗.

contain해서 ㅇㅇ
&&하면 될듯

--

Q1316

split으로 나눴는데 배열의 개수가 1이나 2가 아니면 컷 아닌가? aba보니 아니네

aabbbccb는 컷~
a 한개만 있어도 인정.

'2022_Java > 메모' 카테고리의 다른 글

8월 1주차 끄적임  (0) 2022.08.06
7월 4주차 끄적임  (0) 2022.07.22

수업개요

단톡방, 노션에 자료
툴은 intellij eclipse vscode 섞어서
jquery 보단 react
spring boot
java c c++ 섞어서
코테 python > c++ 
필요한 어느정보의 os, 컴퓨터구조의 내용은 전달할 것.

-

프로그래밍 : 코딩 + 알고리즘? 이분검색

컴파일러 언어 / 인터프리터 언어 / 스크립트 언어?

node js from 크롬의 V8엔진? 강력한 js인터프리터 > 백엔드 개이득?

java특 : 네트워크와 분산 환경 지원, 멀티스레드 지원, 동적 로딩 지원

loose coupling? 동적 바인딩?

-

 

강의 노잼이면 알고리즘 ㄱㄱ

 

강사님 퇴근 타임.
화 목 남아있음. 질문타임 ㄱㄱ
월 수 칼퇴
금요일 랜덤

시험 문제 : 강의시간에 알랴줌

-


*짧게 운영체제에 대하여.

Unix로 시작. Unix를 만들기 위해 C등장!
첨에 Unix는 기계어였음..ㄷㄷ
처음 Unix는 WorkStation의 기능. 다중 사용자 지원. 터미널로 쓱쓱 > 사용자관리, 보안 강화

MS사의 Window. 개인형 PC를 조지자. Personal computer. 그러니 사용자관리, 보안, 개발 빼버렷
Unix의 다운그레이드 버전이랄까?

Mac은 순수 Unix느낌? 그러니 보안/개발에 편리? Window에서 개발할라면 뭘 그리 깔아야해ㅡㅡ
iOS는 그럼 Micro Unix?

Linux 또한 Unix의 자식. PC용. 이정도면 unix가 object급?
Unix의 라이센스 비용 내기 싫어서 다 까버림.
하지만 이거 써먹다보면 함정에 빠질 수 있다.(소스파일 다 까버렷)

Android > Linux 위에 JVM을 얹은 느낌? 그래서 안드 개발에 java쓰나

Unix하나 조지면 나머지 것들 다 기본은 알아갈듯?

-

 

필터스트림의 중첩관계에서의 논리

OutputStream 
> DataOutputStream 
> BufferedOutputStream 이게 틀렸다?

--

OutputStream 
> BufferedOutputStream 
> DataOutputStream 이게 맞다?

--

빅오표기법

O(1) : 데이터의 양에 상관없이 항상 같은 실행속도. 이상적이지?
Hash 알고리즘으로 충돌없이 배열을 무한대로 생성가능하다면 가능. 하지만 이론적 물리적으로 에바쎄바

O(logN) : 데이터 양이 증가할수록 실행 시간도 '약간' 증가하는 경우
일반적으로 효율이 높은 검색 알고리즘이 해당 된다.
이분검색맨?

O(N) : 처리해야 할 데이터양과 비례해 실행 시간이 증가하는 경우 (1부터 100까지 더하는 반복문)
재귀호출도 여기에 해당 된다.

O(NlogN)
처리해야 할 데이터양보다 실행 시간이 좀 더 빠르게 증가한다. 효율이 높은 정렬 알고리즘이 해당 된다.

O(N2)
반복문이 2번 중첩된 경우의 알고리즘
제곱맨~

O(N3)
반복문이 3번 중첩된 경우의 알고리즘
데이터양이 증가하면 실행 시간은 그의 세제곱만큼 증가하므로 좋은 알고리즘이라고 볼 수 없다.

--

 

기본타입은 선언할때 소문자로 시작한다. (int char etc)
참조타입은 선언할때 대문자로 시작하네? (String ArrayList System) 헐.

--

에라토스테네스의 체를 이용해 1~n까지의 소수를 알고 싶다면,  
n까지 모든 수의 배수를 다 나눠 볼 필요는 없다. 

만약 n보다 작은 어떤 수 m이 m=a*b라면 a와 b 중 적어도 하나는 루트N 이하이다. 
즉 n보다 작은 합성수 m은 보다 작은 수의 배수만 체크해도 전부 지워진다는 의미이므로,
루트N 이하의 수의 배수만 지우면 된다. 

1~100인 경우, 11^2 = 121이니 10까지?
만일 표에 11^2보다 큰 수가 있다면 11을 제외한 11의 배수를 지워야 하는데, 
이 과정에서 최초로 지워지는 수는 121이다. 이는 주어진 범위를 초과하는 수다.

--

String str = new String("A");
String str1 = "A"; 해도 다르다! 희안하네.

--

세미 프로젝트 = 시간표 9 : 인터페이스 구현
파이널 프로젝트 = 시간표 14 15 16 ㅇㅋ?

--

'2022_Java > 메모' 카테고리의 다른 글

8월 1주차 끄적임  (0) 2022.08.06
7월 5주차 끄적임  (0) 2022.07.31

+ Recent posts