Archive

JS Day 8 배열

|

JS Day 8 배열


  1. 배열

    • 순서가 필요한 작업을 할 때 배열을 이용하자
    • 자바스크립트의 배열엔 자료형의 제약이 없다. 함수, 객체 뭐든지 올 수 있음.
    • FIFO 자료구조인 큐(Queue)와 LIFO 자료구조인 스택(stack)을 구현 할 수 있다.
    /*
    *	pop() : 배열의 끝 요소를 제거하고 반환
    *	push() : 배열의 끝에 요소를 추가
    *	shift() : 배열의 앞 요소를 제거하고 반환
    *	unshift() : 배열의 앞에 요소를 추가
    */
    let zoo = ["fox","rabbit"]; //java와 다르게 []로 배열을 선언한다
       
    console.log(zoo.pop()); // rabbit
    zoo.push("mouse");
    console.log(zoo); // ["fox", "mouse"]
       
    console.log(zoo.shift()); // fox
    zoo.unshift("horse");
    console.log(zoo); // ["horse", "mouse"]
    
    • 배열의 앞 요소에 무언가를 하면 뒤에 있는 요소들을 전체 뒤로 밀거나 땡겨야한다. 이 배열의 길이가 1억이라면 어떨까? 그만큼 연산이 많아지고 당연히 shift나 unshift는 성능면에서 push나 pop보다 떨어진다.
    • 배열을 순회 할 때는 일반 for문을 돌려도 되지만 for-of 문을 사용하면 편리하다.
    let zoo = ["fox","horse","rabbit","mouse"];
       
    for(let animal of zoo){
        console.log(animal);
    }// fox부터 차례대로 출력된다
    
    • for-in과의 차이는 무엇일까? * for-in은 객체를 순회할 때 주로 쓰이는데 모든 프로퍼티를 대상으로 순회를 돈다. key가 꼭 숫자가 아니어도 순회의 대상이 되기 때문에 속도가 늦다.
    • 결론 : 배열에서는 for-of를 사용하자
    • 배열의 길이를 임의로 늘리는 것은 아무 효과가 없지만 줄이면 배열이 잘려나간다. 잘려나간 배열은 메모리에서 삭제되어 복구 할 수 없게 된다.
    let zoo = ["fox","horse","rabbit","mouse"];
       
    zoo.length = 10;
    console.log(zoo); // 비어있는 empty가 6칸 늘어난다.
       
    zoo.length = 2;
    console.log(zoo); // ["fox","horse"]
    console.log(zoo[3]); // undefined
    
    • java에서 처럼 new array(int length)로 배열을 생성 할 수도 있다. 하지만 잘 사용되지 않는다고 한다.
    • 다차원 배열 역시 생성 가능하다.
    • 배열엔 toString 메소드가 구현되어 있어 호출시 배열의 요소가 문자열로 반환된다.


  2. 배열 메소드

    • splice()

    • splice()는 배열의 추가, 삭제, 교체가 모두 가능한 유용한 메소드이다.
    • delete()는 배열의 요소를 삭제하고 빈 공간으로 둔다.
    • splice()는 삭제된 요소로 구성된 배열을 반환한다.
    • deleteCount를 0으로 주면 배열을 건드리지 않고 원하는 위치에 요소를 추가 할 수 있다.
    • index에 음수를 주면 뒤에서부터 센다.
    • deleteCount를 안적으면 index부터 모든 요소를 삭제한다.
    /*
    *	slice(index, (deleteCount), (element...)) - ()생략 가능
    *	index의 위치에 count만큼 삭제하고 element를 추가한다
    */
    let zoo = ["fox", "mouse", "rabbit"];
    let newZoo = zoo.splice(1,1);
    console.log(newZoo); // mouse
       
    zoo.splice(-1,0,"horse"); // ["fox", "horse", "rabbit"]
    zoo.splice(1); // ["fox"]
    
    • slice()
    • slice(start, end) : start부터 end-1 까지의 요소를 복사한 새로운 배열 반환.
    • splice()와 다르게 기존의 배열을 건드리지 않는다.
    • 음수를 적으면 뒤에서부터 센다.
    let zoo = ["fox", "mouse", "rabbit"];
    let newZoo = zoo.slice(0,2);
    console.log(newZoo); // ["fox", "mouse"]
    console.log(zoo); // ["fox", "mouse", "rabbit"]
    
    • concat()
    • concat(item1, item2…) : 기존 배열과 item들을 모두 모아 새로운 배열 반환.
    • item이 배열이면 배열을 모두 복사.
    • item이 객체면 객체 통으로 복사.
    let zoo = ["fox", "mouse"];
    zoo.concat("rabbit", "horse");
    console.log(zoo); // ["fox", "mouse", "rabbit", "horse"]
    
    • forEach()
    • 배열의 요소를 순회하며 주어진 함수의 기능을 수행한다.
    • 람다식 표현으로 많이 쓰인다.
    let zoo = ["fox", "mouse"];
    zoo.forEach(alert); // fox mouse
       
    //앞으로 요런식으로 많이 쓸거다
    zoo.forEach(name => name.addEventListener('click', sayHi));
    
    • indexOf(), lastIndexOf(), includes()
    • 값을 비교 할 때 === 연산자를 사용해서 비교한다. 값이 완전 같아야한다는 말.
    /*
    *	indexOf(item, from) : from부터 item을 찾아 index를 반환, 없으면 -1
    *	lastIndexOf(item, from) : 위랑 동일, 뒤부터 시작
    *	includes(item, from) : from부터 item을 찾고 있으면 true, 없으면 false
    */
       
    let arr = ["fox", 1, null, false];
    arr.indexOf(false); // 3
    arr.indexOf(0); // -1
    arr.includes(null) // true
    
    • find(), findIndex()
    • find()는 특정 조건을 만족시키는 값 한 개를 찾아 반환한다. 없으면 undefined 반환.
    • findIndex()는 위와 동일하나 index를 반환, 없으면 -1 반환.
    • 주로 객체로 구성된 배열에서 많이 쓰인다.
    let zoo = ["fox","mouse","horse"];
    zoo.find(name => name.length > 3); // mouse
    
    • filter()
    • find()는 조건에 맞는 값 하나만 찾는데 비해 filter()는 조건에 맞는 요소를 모두 찾아 배열로 반환한다.
    • 함수의 리턴값은 boolean 형태.
    let zoo = ["fox","mouse","horse"];
    zoo.filter(name => name.length > 3); // mouse horse
    
    • map()
    • filter()와 쓰임새는 비슷하나 리턴값으로 연산식을 수행 할 수 있다. 쉽게 말해, filter()는 조건식이 참이냐 거짓이냐로 판별 할 수 있는걸 걸고 map()은 더하고 빼고 등등 값을 적용시킨 새로운 배열을 만들 수 있다는 것!
    let num = [1,2,3,4];
    num.map(item => item * 3); // [3, 6, 9, 12]
    
    • sort()
    • 배열의 요소를 정렬해준다. 단, 문자열 형태로 변환하여 비교하기 때문에 정렬기준을 인자로 넣어줘야 한다.
    let num = [4,9,123,7,72,23];
    num.sort(( a, b ) => a - b ); // [4, 7, 9, 23, 72, 123]
    num.sort(( a, b ) => b - a ); // [123, 72, 23, 9, 7, 4]
    
    • reverse()
    • 배열의 요소를 뒤집는다. 더 이상의 설명은 생략
    • split(), join()
    • split()은 JAVA의 split() 과 같은 기능이다. 구분자를 기준으로 문자를 쪼개준다.
    • join()은 반대로 구분자를 이용해 붙여주는 역할을 한다.
    let zoo = "여우, 쥐, 토끼";
    let arr = zoo.split(', ');
    for(let name of arr) {
        console.log(`${name}가 똥을 싼다`);
    } //output은 생략하겠다
    
    • reduce()
    • for문 안에서 total += i 처럼 계속 누적되면서 계산이 되는 누산기 같은 녀석이다.
    let num = [1,2,3,4,5];
    let result = num.reduce((total, currentValue) => total + currentValue);
    console.log(result); // 15
       
    /*
    	초기값을 안적으면 배열의 첫번째 요소가 초기값(currentValue)이 된다
    	total = 1
    	다음 회차에 total에 2를 더하고
    	다음 회차에 total에 3를 더하고
    	.
    	.
    	이런 식이다.
    */
    




참고 자료


JAVASCRIPT.INFO

Java Day 17 회원관리 프로그램 구현

|

Java Day 17 회원관리 프로그램 구현


  1. 회원관리 프로그램

    • GUI 없이 DOS창 내에서 회원을 관리하는 프로그램을 구현해보자!

    • 기본적으로 이름, 나이, 전화번호, 주소의 데이터를 사용한다. 회원 가입, 정보 수정, 탈퇴, 전체 회원 보기 기능이 있는데 수정과 탈퇴를 위해서는 우선 회원 검색을 해야한다. 회원 정보 수정에서는 전화번호와 주소를 수정 할 수 있다.

    • 자 그럼 순서도를 만들자.

      1. 회원 객체 생성 (이름, 나이, 전화번호, 주소)

      2. 매니저 객체 생성

        • 입력은 BufferedReader와 InputStreamReader를 사용
        • 회원을 ArrayList에 넣어 관리
        • 시작 메소드로 프로그램 실행 - 메뉴 선택 받아 switch문으로 각 메소드 호출
        • 가입 메소드 구현
        • 검색 메소드 구현 - index값을 저장
        • 정보 수정 메소드 구현 - 메뉴 선택
        • 탈퇴 메소드 구현 - 정말 탈퇴? 묻기
        • 전체 보기 메소드 구현
        • 종료 메소드 구현 - 정말 종료? 묻기
      3. Test 클래스의 메인 메소드에서 실행


  2. 코딩

    1. 회원 객체

      package kg.eduone.co;
            
      public class Customer {
      	//멤버
      	private String name;
      	private String age;
      	private String tel;
      	private String address;
            	
      	//생성자
      	public Customer() {}
      	public Customer(String name, String age, String tel, String address) {
      		this.name = name;
      		this.age = age;
      		this.tel = tel;
      		this.address = address;
      	}
            	
      	//메소드
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public String getAge() {
      		return age;
      	}
      	public void setAge(String age) {
      		this.age = age;
      	}
      	public String getTel() {
      		return tel;
      	}
      	public void setTel(String tel) {
      		this.tel = tel;
      	}
      	public String getAddress() {
      		return address;
      	}
      	public void setAddress(String address) {
      		this.address = address;
      	}		
      }
      


    2. 매니저 객체

      package kg.eduone.manage;
            
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.ArrayList;
      import kg.eduone.co.Customer;
            
      public class CustomerManager {
      	// 멤버
      	private boolean isStop;
      	private BufferedReader br;
      	private ArrayList<Customer> member;
      	int index;
            
      	// 생성자
      	public CustomerManager() {
      		isStop = false;
      		br = new BufferedReader(new InputStreamReader(System.in));
      		member = new ArrayList<Customer>();
      		index = -1;
      	}
            
      	// 메소드
      	public void start() throws IOException {
      		while (!isStop) {
      			int menu = -1;
      			// 메뉴판
      			System.out.println("**메뉴 선택**");
      			System.out.println("1. 회원 가입");
      			System.out.println("2. 회원 검색");
      			System.out.println("3. 정보 수정");
      			System.out.println("4. 회원 탈퇴");
      			System.out.println("5. 전체 보기");
      			System.out.println("0. 종료 하기");
      			System.out.print("메뉴 선택 : ");
      			// 입력값이 숫자가 아닐시 리턴
      			try {
      				menu = Integer.parseInt(br.readLine());
      			} catch (NumberFormatException nfe) {
      				menu = -1;
      			}
      			System.out.println();
      			switch (menu) {
      			case 0:
      				stop();break;
      			case 1:
      				addMember();break;
      			case 2:
      				searchMember();break;
      			case 3:
      				updateMember();break;
      			case 4:
      				deleteMember();break;
      			case 5:
      				showAllMember();break;
      			default:
      				System.out.println("올바른 메뉴를 선택하세요");
      				System.out.println();
      				break;
      			}// end switch
      		} // end while
      	}// end start
            
      	public void addMember() throws IOException {
      		// 기본 정보 입력
      		System.out.print("이름 입력 : ");
      		String name = br.readLine();
      		System.out.print("나이 입력 : ");
      		String age = br.readLine();
      		System.out.print("전화 번호 : ");
      		String tel = br.readLine();
      		System.out.print("주소 입력 : ");
      		String address = br.readLine();
            
      		// 입력받은 기본 정보를 갖는 회원 객체 생성
      		Customer customer = new Customer(name, age, tel, address);
            
      		// 멤버 리스트에 객체 추가
      		member.add(customer);
      		System.out.println();
      		System.out.println("회원가입에 성공하였습니다");
      		System.out.println();
      	}
            
      	public void searchMember() throws IOException {
      		// 검색할 이름 입력
      		System.out.println("검색할 회원 이름을 입력하세요");
      		String findName = br.readLine();
      		index = -1;
              //리스트를 순회하며 입력값과 동일한 객체의 index를 저장
      		for (int i = 0; i < member.size(); i++) {
      			Customer customer = (Customer) member.get(i);
      			if (customer.getName().equals(findName)) {
      				index = i;
      				break;
      			}
      		} // end for
            
      		if (index < 0) {
      			System.out.println(findName + "님은 가입된 회원이 아닙니다");
      		} else {
      			System.out.println(findName + "님의 검색에 성공하였습니다");
      		}
      		System.out.println();
      	}
            
      	public void updateMember() throws IOException {
      		boolean isLoop = false;
      		int menu = -1;
      		if (index < 0) {
      			System.out.println("회원 검색을 먼저 실행해주세요");
      			return;
      		}
      		Customer customer = member.get(index);
      		while (!isLoop) {
      			// 메뉴 선택
      			System.out.println("수정할 메뉴 선택");
      			System.out.println("1. 전화번호 수정");
      			System.out.println("2. 주소 수정");
      			System.out.println("0. 수정 취소");
      			System.out.print("매뉴 선택 : ");
      			try {
      				menu = Integer.parseInt(br.readLine());
      			} catch (NumberFormatException e) {
      				menu = -1;
      			}
      			System.out.println();
      			// 메뉴 구현
      			switch (menu) {
      			case 1:
      				System.out.print("수정할 전화번호 입력 : ");
      				String tempTel = br.readLine();
      				customer.setTel(tempTel);
      				System.out.println("전화번호 수정 완료");
      				System.out.println();
      				isLoop = false;
      				break;
      			case 2:
      				System.out.print("수정할 주소 입력 : ");
      				String tempAddress = br.readLine();
      				customer.setAddress(tempAddress);
      				System.out.println("주소 수정 완료");
      				System.out.println();
      				isLoop = false;
      				break;
      			case 0:
      				System.out.println("수정을 취소합니다");
      				System.out.println();
      				isLoop = true;
      				break;
      			default:
      				System.out.println("올바른 메뉴를 선택하세요");
      				System.out.println();
      				isLoop = false;
      			}
      		} // end while
      	}
            
      	public void deleteMember() throws IOException {
      		if (index < 0) {
      			System.out.println("회원 검색을 먼저 실행해주세요");
      			return;
      		}
      		Customer customer = member.get(index);
      		System.out.println(customer.getName() + "님의 정보를 삭제하시겠습니까? (y/n)");
      		String menu = br.readLine();
      		if (menu.equals("y") || menu.equals("Y")) {
      			System.out.println(customer.getName() + "님의 정보를 성공적으로 삭제하였습니다");
      			System.out.println();
      			member.remove(index);
      			index = -1;
      		} else {
      			System.out.println(customer.getName() + "님의 정보 삭제를 취소합니다");
      			System.out.println();
      		}
      	}
            
      	public void showAllMember() {
      		// 멤버 리스트의 회원을 순회하면서 정보 출력
      		for (int i = 0; i < member.size(); i++) {
      			Customer customer = (Customer) member.get(i);
      			System.out.println((i + 1) + "번 회원");
      			System.out.println("이름 : " + customer.getName());
      			System.out.println("나이 : " + customer.getAge());
      			System.out.println("전화 : " + customer.getTel());
      			System.out.println("주소 : " + customer.getAddress());
      			System.out.println();
      		} // end for
      	}
            
      	public void stop() throws IOException {
      		System.out.print("정말로 종료하시겠습니까? (y/n)");
      		String menu = br.readLine();
      		if (menu.equals("Y") || menu.equals("y")) {
      			isStop = true;
      		} else {
      			System.out.println("종료를 취소합니다");
      			isStop = false;
      		}
      	}// end stop
      }
      


    3. Test 클래스

      package kg.eduone.manage;
            
      import java.io.IOException;
            
      public class CustomerTest {
      	public static void main(String[] args) throws IOException {
      		CustomerManager cm = new CustomerManager();
      		cm.start(); //실행
      	}
      }
      


  3. 실행 화면

    1. 회원 가입

      가입

    2. 전체 보기

      전체

    3. 회원 검색

      검색

    4. 정보 수정

      수정

      수정완료

    5. 회원 탈퇴

      탈퇴

    6. 종료 하기

      종료


  1. 마치며

    숙련자의 입장에서는 아주 간단한 프로그램이겠지만 처음 객체지향을 접하고서 마구잡이로(?) 처음 만들었을때는 모듈화도 전혀 안되어있었고 한 클래스에 모든 것을 다 때려넣을려고 했었다.ㅋㅋ

    어찌어찌 구동은 됐지만 아주 좋지 않은 코드라는 것을 스스로도 느꼈었다.

    수업을 듣고나서 아! 객체지향을 이렇게 사용하는구나 하고 조금은 감을 잡은 후에 다시 도전했다.

    다시 처음부터 코딩을 하면서 분리시킬 수 있는 것은 따로 모듈로 나눠서 한 곳에서 조립한다는 느낌이 뭔지 이해가 갔다. 😎




참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

2020-12-22 TIL

|

2020-12-22 TIL


  • 오늘 한 것
    1. 이것이 리눅스다 Oracle 설치 및 운영 - MariaDB 때와 마찬가지로 이번에는 Oracle을 설치하고 세팅을 한 뒤 DB를 생성하는 것을 배웠다. 아주 단편적으로 소개한 내용이라 실질적으로 실무에서 쓰일만한 기술들은 따로 공부를 해야겠다.
    2. 학원 비대면 수업 (제네릭, 컬렉션) - 내용이 상당히 어려워지고 있다.. 전체적인 흐름은 이해를 할 수 있으나 실제로 어떻게 쓰일지가 감이 잘 안온다.
    3. 블로그 포스팅 (java day16 정리, Javascript Day 7, CentOS8/Oracle) - java에서 ArrayList의 forEach 메소드의 람다식 표현법을 봤는데 어디서 많이 봤다싶더니 javascript에서 상당히 많이 쓰이는 문법이었다. 오오오오 이렇게 다 이어지는군 ..!!
    4. 노마더코더 JS 유튜브 강의 - 이론 공부보다 일단 훨씬 재밌고 실제로 많이 쓰이는 기능들을 소개해줘서 참 도움이 많이 된다. 자바스크립트로 무엇이든지 할 수 있을것만 같은 기분이 든다.

  • 내일 할 것
    1. 이것이 리눅스다 Chapter 12 웹 서버 설치와 운영
    2. 학원 수업(15:30~22:00)
    3. 블로그 포스팅 (Java Day 17, Javascript Day 8)
    4. 노마더코더 JS 유튜브 강의

  • 끝으로

객체지향을 지나 개념이 점점 어려워지면서 학원 친구들도(특히 비전공자) 많이 힘들어하는 모양이다. 나도 못따라갈 정도는 아니지만 많이 어려워졌음을 실감하고 있다. 연습해서 적응하는 수밖에 없겠지? 그럴려먼 일단 예제를 풀던 뭘 만들던 계속 쓰면서 코드에 적용을 해봐야겠다.

오늘의 한 줄 총평 : 연습만이 살 길..


CentOS8 Oracle 설치 및 운영

|

CentOS8 Oracle 설치 및 운영


이것이 리눅스다 의 Chapter11 데이터베이스 서버 구축과 운영의 실습내용입니다.



시중에서 아주 많이 사용하는 DBMS인 Oracle을 설치해서 사용해보자.

교재와 같은 실습환경으로 진행하기 위해 Oracle Database Express 11g를 다운받자.

우선, server 컴퓨터의 터미널을 열고 dnf -y install libnsl 명령으로 필수 패키지를 다운받자.

dnf


www.oracle.co.kr 에 접속하여 oracle EBMS를 다운받는다.

oracle


터미널로 돌아와서 다운로드 디렉토리로 이동한다.

unzip 명령으로 다운 받은 패키지의 압축을 풀고 Disk1으로 디렉토리를 이동한다.

Disk1


List에 패키지가 제대로 있는지 확인을 하고 dnf 명령으로 설치를 해준다.

설치


설치 완료 후 service oracle-xe configure 명령으로 환경설정을 시작한다.

[8080]은 웹 접속 포트번호, [1521]는 SQL*Plus 접속 포트 번호이다. Enter를 눌러 넘기자.

비밀번호를 설정 한 후, 부팅이되면 자동으로 Oracle이 활성화 되도록 y를 눌러주자.

환경설정


. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh’ 입력 후 gedit으로 /etc/bashrc 파일을 열고 맨 마지막에 ‘. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh’을 추가 후 저장하고 닫는다.

이제 firewallcmd 명령으로 Oracle과 관련된 포트를 열어주자.

설정

firewall


브라우져를 열고 192.168.111.100:8080/apex 혹은 127.0.0.1:8080/apex에 접속한다.

workspace는 internal로 username은 admin으로 password는 아까 설정한 것을 입력한여 로그인한다.

웹oracle

비밀번호 재설정 후 다시 로그인을 해보면 Oracle 관리자 화면이 나온다!!!

관리자


이제 MariaDB때처럼 Oracle을 운영해보자.

Oracle의 클라이언트 프로그램인 SQL * Plus로 Oracle에 접속하자.

우선 데이터를 저장할 디렉토리를 하나 만든다.

sqlplus 명령을 실행하고 system 사용자로 로그인한다.

SQL> 프롬프트가 나온다면 성.공.적

create tablespace (DB이름) datafile ‘DB파일경로’ size (사이즈); 명령으로 DB를 생성한 후

select tablespace_name from dba_data_files;로 DB의 생성을 확인하자.

DB생성


create table (테이블명) (…) tablespace (DB이름); 명령으로 table을 생성하자.

한글이 들어갈 내용은 nchar로 지정한다.

테이블 삭제는 drop table (테이블명); 이다.

table생성


desc (테이블명); 명령어로 생성된 테이블을 확인해보자.

table확인


insert into (테이블명) values (내용); 명령으로 테이블에 데이터를 추가하자.

select * from (테이블명); 명령어로 생성된 데이터를 확인한다.

데이터확인


이상으로 아주아주 단편적인 Oracle의 사용법이었다. 😂




참고자료


이것이 리눅스다 Chepter 11 데이버베이스 서버 구축과 운영

JS Day 7 문자열

|

JS Day 7 문자열


  1. 문자열

    • JAVA처럼 한 글자를 담는 char 자료형이 없다.
    • 문자열 내 특정 위치에 접근하려면 [] 혹은 charAt() 메소드를 이용한다.
    let str = "안녕?";
    console.log(str[1]); // 녕 출력
    console.log(str.charAt(1)); // 녕 출력
       
    console.log(str[999]); // undefined 출력
    console.log(str.charAt(999)); // '' 빈 문자열 출력
    
    • for( variable of String ){…} : for-of 반복문으로 문자열을 순회 할 수 있다.
    for(let char of "안녕하세용"){
    	console.log(char);
    }//안  녕  하  세  용  출력
    
    • 문자열은 한 번 선언되면 수정 할 수 없다.
    let str = "안녕?";
    str[2] = "!"; //적용이 안된다
    
    • 대문자로 전환 : toUpperCase();, 소문자로 전환 : toLowerCase();
    • index를 이용하여 특정 위치의 문자만 전환하는 것도 가능
    console.log('show me the money'.toUpperCase()); //SHOW ME THE MONEY
    console.log('show me the money'[0].toUpperCase()); // S
    
    • 문자열 검색
    • indexOf(찾을값, 시작위치(생략가능)); : 찾으면 index 반환, 못찾으면 -1 반환
    let str = "show me the money";
    console.log(str.indexOf('money')); // 12
    console.log(str.indexOf('z')); // -1
    
    • includes(찾을값, 시작위치(생략가능)) : 특정 문자를 포함하면 true, 아니면 false 반환
    let str = "show me the money";
    console.log(str.includes('me')); // true
    
    • 부분 문자열 추출
    //slice(시작위치,종료위치);  *시작위치부터 종료위치-1 까지 추출
    let str = "show me the money";
    console.log(str.slice(0, 7)); // show me
    console.log(str.slice(-5, -3)); // mo  *음수값을 넣으면 뒤에서부터 센다
       
    //substring(시작,종료);  *slice와 동일하지만 시작,종료 위치 바뀌어도 됨, 음수허용x
    console.log(str.substring(0, 7)); // show me
    console.log(str.substring(7, 0)); // show me
       
    //substr(시작,길이);   *시작지점부터 길이만큼 추출, 음수 뒤에서 시작하여 길이만큼
    console.log(str.substr(3, 5)); // w me
    console.log(str.substr(-5, 3)); // mon
    
    • 문자열 비교
    • codePointAt(문자) => 아스키코드값 반환, fromCodePoint(숫자) => 해당 아스키코드의 문자
    • str1.localeCompare(str2); : str1이 크면 양수, str2가 크면 음수, 같으면 0 반환




참고 자료


JAVASCRIPT.INFO