상세 컨텐츠

본문 제목

프로그래머 도전기 25일차

프로그래머가 될거야!

by Choyee 2023. 9. 22. 23:58

본문

오늘은

자바의 수업이 후반부로 접어들었습니다

배웠던것들은 응용하고 사용했던 메서드들을

좀 더 간편하게 해주거나 깔끔하게 만들어주는 메서드들을

조금씩 배워나가면서 기존의 코드들도 단순화도 시켜보고하는

수업을 하고있습니다

그에 맞춰 사용하고 있는 개념들을 다시 정리하는 시간도 가지며

배웠던 것들을 온전히 나의 것으로 만들고자 노력중입니다

 

 

JAVA 수업

Collection
List - ArrayList(속도), Vector(안정성), Stack, LinkedList(삽입삭제가 빈번할때 사용) : 순서가 있고, 중복 허용
Set - HashSet : 순서가 없고, 중복 불허
Map - Hash Map : 순서가 없고, 중복 불허 -> key = value
         사전(Dictionary)자료 구조

0

Stact(스택) - 후입선출(LIFO - Last In First Out) => 스택 메모리
    나중에 들어간 것이 먼저 나온다
    먼저 들어간 객체가 나중에 나온다
    push(), pop()

Queue(큐) - 선입선출(FIFO - First In First Out)
     먼저 들어간 객체가 먼저 나온다
     인터페이스이다 
     구현클래스(LinkedList)
      => 삽입, 삭제시 시간이 적게 걸림 : 물리적인 메모리는 떨어져 있어도
           논리적으로 앞뒤 순서(주소값)가 있음
      offer() poll() isEmpty()
      - 메시지(이메일, sms, kakaotalk) 큐
   

012

객체 지향 언어
클래스
인터페이스
- 함수형 인터페이스
   이름있는 함수 -> 이름이 없는 함수로 만듬(익명 함수)
   - 람다식(화살표 연산자)

함수형 프로그래밍 언어
Function(함수) : C언어
Method() : 자바, 파이썬

일반형 인터페이스 -> 구현 클래스(메서드 구현) -> 이름 있는 객체 생성 
함수형 인터페이스 -> 구현 클래스x => 익명 객체를 통해 익명 메서드 사용

람다식 = (str) -> {System.out.println.str;}
 -> 변수이름 = (매개변수) -> {실행문}
중괄호 생략하기 -> 한 문장인 경우 중괄호 생략
매개변수가 없거나 한개인 경우 소괄호 생략가능
return 생략 가능 => (x,y) -> x + y;

0123


- HashMap을 이용한 회원관리
1. MemberHashMap 클래스(DAO)
2. Main - 테스트

HashSet - hashCode(), equals() 재정의 필요
HashMap - 재정의 불필요. 되어있음

012

Stream 인터페이스
자료가 모여있는 배열이나 컬렉션에서 처리에 대한 기능을 선언해 놓은 인터페이스
스트림 인터페이스는 람다식으로 처리하는 반복자이다 => 자체적으로 람다식으로 처리하기때문에 클래스가 필요 없음
(배열, 자료구조 -> 효율적으로 저장, 검색 = lambda식 이용)

Arrays 클래스 - 배열을 처리하는클래스(복사, 정렬)
Arrays.sort( ) 정렬
Arrays.toString( ) 출력

0123

JAVA 복습

<<생성자>>
생성자 = 인스턴스를 초기화 할 때의 명령어 집합
생성자의 이름 = 그 클래스의 이름과 같음
생성자 => 메서드X -> 상속X, 리턴값X

디폴트 생성자 = 기본 생성자
                     하나의 클래스는 반드시 하나 이상의 생성자가 존재
                     프로그래머가 생성자를 기술하지 않는 경우 -> 디폴트 생성자가 자동으로 생김
                                                                               = 컴파일러가 코드에 넣어줌
                     매개변수X = ( )X , 구현부X = { }X
                     => 매개변수가 있는 생성자를 추가하면 -> 디폴트 생성자는 제공되지 않음
public 클래스 () {} 를 의미

생성자 오버로드 = 필요에 의해 생성자를 추가하는 경우 -> 여러 개의 생성자가 하나의 클래스에 있음
                     = 하나의 클래스에 여러 개의 생성자가 존재할 수 있다

생성자와 메소드의 차이
생성자는 반드시 클래스명과 동일하게 정의
생성자 앞에는 접근제어자만 올 수 있다
메소드는 static과 같은 수식어를 작성할 수 있다
반환값이 없으므로 void나 자료형을 작성할 수 없다
메소드는 void나 자료형이 있어야 한다

정보은닉 = private 접근 제어자
                 - 클래스의 외부 -> 클래스 내부의 멤버 변수나 메서드에 접근하지 못하게 함
                 - 멤버 변수나 메서드 -> 외부에서 사요하지 못하도록 하여 => 오류를 줄일 수 있음
                 - 변수에 대해서 -> 필요한 경우 = get(), set() 메서드를 제공


static = 정적. 고정된이라는 의미 => static변수, static메소드를 만들 수 있음 = 정적필드, 정적메소드
                                              => 이 둘을 합쳐 정적 멤버라고 한다(클래스 멤버라고도 함)
        = 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버 => 모든 객체가 메모리를 공유

* static 변수 = 다른 언어에서도 사용되는 명령어
  static     int       serialNum;
 예약어   자료형   변수 이름
=> 여러개의 인스턴스 -> 같은 메모리의 값을 공유하기 위해 사용
      = 인스턴스A, 인스턴스B, 인스턴스C -> static 변수 공유

=> 전체 프로그램이 메모리에 로드될 때 할당이 되어 -> 데이터 영역의 메모리에 생성된다
     = 인스턴스의 생성과 관계없이 클래스 이름으로 직접 참조 됨 = 클래스 변수라고도 한다
                                                                                      (멤버변수 = 인스턴스 변수)

* this가 하는 일 = 자신의 메모리를 가리킴
                            생성자에서 다른 생성자 호출
                            자신의 주소를 반환
                             => 생성된 인스턴스 스스로를 가리키는 예약어

파라미터 = 메소드 수행에 필요한 입력값을 저장하는 변수
              return 값이 없는 경우 반환 타입은 void

 

 

JavaScript 공부

<문자열>

배열 = 인덱싱 된 조합
0부터 시작
문자열이름[인덱스번호] = 해당 인덱스 번호에 있는 문자
문자열이름.length = 문자열에 있는 총 문자 수
ctrl + L = 리셋

접합 = 문자열도 더하기가 가능 => "lol" + "lol" = "lollol"
                                       => 1 + "hi" = "1hi" = 숫자와 문자열을 더하면 문자열이 된다
한번에 한 문자만 수동으로 업데이트 불가
let firstName = "River";
firstName = "river";
=> 두개는 다른 문자열이다 업데이트 된 것이 아님
새 문자열을 덮어 써서 새 값을 주어야 한다

문자열 메서드 = 특정 문자열을 사용해 수행할 수 있는 동작
=> 문자열이름.method( ) 의 형식

문자열이름.toUpperCase() = 모두 대문자로 바꿔줌
             .toLowerCase() = 모두 소문자로 바꿔줌

문자열이름.trim() = 문자열의 처음과 끝에 오는 공백을 전부 없애준다

인수(arguments) = 메서드로 전달되어 메서드의 동작을 변경하는 입력값

.indexOf() = 문자열에서 주어진 인수가 나타나는 문자열의 첫인덱스와 그 자릿수를 반환한다
               없는걸 찾으려고 하면 -1 값을 반환          // 중간에 같은 문자가 있는경우는?

.slice() = 한개 이상의 인수를 받을 수 있음
           문자열의 일부를 추출, 잘라냄 => 그 부분을 새로운 문자열로 반환해줌
           두개의 숫자를 전달 -> 자르려는 인덱스 지정
           한개의 숫자만 적은경우 = 시작점
           두개의 숫자를 적은 경우 = 시작점, 끝지점(끝지점 해당 인덱스 앞까지만 나온다. 해당 인덱스는 출력X)
           끝지점을 문자열 인덱스보다 길게 한 경우 뒷부분은 공백이 나온다
           음수를 사용해 뒤에서부터 슬라이스 가능

.replace() 특정한 문자열 대신에 패턴을 교체할 수 있다
            두개의 인수 필요 => 첫번째 값 = 교체되어야 하는 값, 두번째 값 = 교체해서 들어가려는 값
.replaceAll은 지원하지 않는 경우가 많음 크롬도 안됨

.repeat() 반복하고 싶은 만큼 입력값을 넣는다

문자열 쉽게 합치기
템플릿 리터럴 - 백틱(back-tick) 기호를 쓴다   " ` "
`hello!` => "hello!"
백틱 안에서 ${  } 시퀀스 사용 => 표현식을 평가해서 문자열로 바꿔준다
"You bought " + qty + " " + product + ". total is: " + price * qty
= "You bought 5 Artichoke. total is: 11.25"
=> `You bought ${qty} ${product}. total is: ${price * qty}`  
= "You bought 5 Artichoke. total is: 11.25"
$기호를 문자열에 넣고싶다면 $${ }로 사용하면 된다
=> `You bought ${qty} ${product.toUpperCas()}. total is: $${price * qty}`  
= "You bought 5 ARTICHOKE. total is: $11.25"


기본타입 = 원시 데이터
숫자, 문자열, 불리언, null, undefined = 다섯가지 기본 타입 => 원시값

null, undefined = 원시값, 단일한 값, 숫자도 문자열도 불리언도 아닌 기본값
undefined = 값을 잘 모르겠다. 정의가 되지 않은 것, 아무것도 정의된 것이 없는 것
null = 일부러 값을 지정하지 않는 걸로 설정하는 것, 아무것도 없다고 정의된 것


=======================기본값 끝 =======================


내장 Math 객체
= 수학과 관련있는 특성과 메서드의 모음
Math.round( ) = 반올림
Math.abs( ) = 절대값
Math.pow( ) = 몇제곱 -> (2,3) = 2의 3제곱 = 8 = 2**3
Math.floor( ) = 버림 => 소수점 뒤를 없앤다
Math.ceil( ) = 올림 => 소수점 뒤를 올린다
Math.random( ); = 0과1사이의 소수점 숫자를 임의로 생성, 1은 제외
                     => 자연수를 곱해서  0과 자연수 사이의 소수점을 가진 수를 임의로 생성할 수 있다
                     => 자연수를 곱하고 Math.floor()과 같이 사용하면 랜덤한 자연수를 얻을 수 있다

 

 

 

2023. 09. 22 (금)

관련글 더보기