1. DOM(Document Object Model, 돔)

  • 웹 문서의 모든 요소를 자바스크립트를 이용하여 조작할 수 있도록 객체를 사용해 문서를 해석하는 방법
  • 웹 문서의 텍스트, 이미지, 표 등 → 객체
  • document를 사용하면 자바스크립트에서 웹 문서 소스를 전부 인식할 수 있음(document는 수많은 DOM 요소 중 하나)

2. DOM 트리

  • 문서 노드(Document Node): 트리의 최상위, DOM tree에 접근하기 위한 시작점
  • 요소 노드(Element Node): HTML 요소를 표현, HTML 노드는 중첩에 의해 부자 관계를 가짐
  • 어트리뷰트 노드(Attribute Node): HTML 요소의 어트리뷰트를 표현, 해당 어트리뷰트가 지정된 요소의 자식이 아니라 해당 요소의 일부로 표현
  • 텍스트 노드(Text Node): HTML 요소의 텍스트를 표현, 요소 노드의 자식이며 자신의 자식 노드를 가질 수 없음, DOM tree의 최종단

software.hixie.ch/utilities/js/live-dom-viewer

3. DOM 요소에 접근하기

  • 자바스크립트로 DOM 요소에 접근할 때 → ‘선택자’ 사용

1) getElementById()

  • id 선택자로 접근하는 함수

id 속성 값은 한 문서 안에서 유일
제목 요소에 접근

2) getElementsByClassName()

  • class값으로 찾아내는 함수
  • id 선택자와 다르게 웹 문서 안에서 여러 번 사용할 수 있음
  • 2개 이상의 웹 요소에 접근

배열의 인덱스를 사용하면 원하는 요소를 가져올 수 있음

3) getElementsByTagName()

  • id나 class 선택자가 없는 DOM 요소에 접근

4) querySelector(), querySelectorAll()

  • DOM 요소를 다양한 방법으로 찾아주는 함수
  • id, class 값을 사용해도 되고 태그 이름을 사용해도 됨
  • class 값 앞에는 마침표(.), id 값 앞에는 샵(#)을 붙임, 태그 이름은 기호 없이 태그 이름만 사용

*참고

  1. Do it! 자바스크립트 입문
  2. https://poiemaweb.com/js-dom

'오공완' 카테고리의 다른 글

정처기 3과목: 데이터베이스  (0) 2024.02.22
정처기 3과목: 자료 구조  (0) 2024.02.21
스프링 부트3 시작하기  (0) 2024.02.05
231121 오공완  (0) 2023.11.21
231120 오공완  (0) 2023.11.21

자바 백엔드 환경의 핵심은 스프링 부트!

JPA: 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

포스트맨: HTTP 요청을 보낼 수 있는 클라이언트 프로그램

 

[서버와 클라이언트]

  1. 클라이언트
  • 서버로 요청하는 프로그램
  • ex) 웹 브라우저에서 주소를 입력한 뒤 enter을 눌러 정보를 요청하는 행위 → ‘서버에 요청한다’
  1. 서버
  • 클라이언트의 요청을 받아 처리하는 주체

[데이터베이스]

  1. 데이터베이스
  • 데이터베이스 관리 시스템: MySQL, 오라클, 포스트그레SQL 등
  • 클라이언트에서 SQL(데이터베이스 조작 언어)로 데이터베이스 관리 시스템에 데이처 요청하면 데이터베이스 관리 시스템은 데이터베이스에서 데이터를 꺼내 응답
  1. RDB: Relational Database
  • 관계형 데이터베이스
  • 데이터를 행과 열로 이루어진 테이블로 관리하며 기본키를 사용해 각 행을 식별
  • 각 테이블 간에 관계를 지을 수 있음
  • 오라클, 마이에스큐엘, SQL 서버, 포스트그레큐엘 등
  1. SQL: Structured Query Language
  • 쿼리, 즉 데이터 검색을 하는 언어
  1. NoSQL
  • SQL을 쓰지 않음 or Not Only SQL
  • RDB의 성능을 올리기 쉽지 않은 문제들을 해결하기 위해 등장
  • 다이나모디비, 카우치베이스, 몽고디비 등

[아이피와 포트]

  • 아이피: 서버를 찾기 위한 번호
  • 포트: 그 서버에서 운용되고 있는 서비스를 구분하기 위한 번호

[라이브러리와 프레임워크]

  1. 라이브러리
  • 애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드의 모음
  • 개발을 하는 과정에서 필요한 기능을 구현하기 위해 사용
  • 라이브러리는 독립적으로 라이브러리끼리 영향을 크게 주지 않음
  1. 프레임워크
  • 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경
  • 일(work)하기 위한 틀(frame)을 제공
  • 애플리케이션을 개발할 때 전체적인 구조를 잡기 위해 사용하는 것

[스프링 부트]

  1. 스프링과 스프링 부트
  • 스프링의 단점을 보완하여 출시됨
  • 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구
  • 스프링 부트는 스프링에 속한 도구
  1. 스프링 부트의 주요 특징
  • 톰캣, 제티, 언더토우 같은 웹 애플리케이션 서버(WAS)가 내장되어 있어서 따로 설치를 하지 않아도 독립적으로 실행할 수 있음
  • 빌드 구성을 단순화하는 스프링 부트 스타터를 제공
  • XML 설정을 하지 않고 자바 코드로 모두 작성할 수 있음
  • JAR를 이용해서 자바 옵션만으로도 배포가 가능
  • 애플리케이션의 모니터링 및 관리 도구인 스프링 액츄에이터(spring actuator)를 제공
  1. 스프링과 스프링 부트의 차이
  • 구성의 차이: 스프링은 개발에 필요한 환경을 수동 구성, 스프링 부트는 자동으로 로드
  • 내장WAS의 유무: 스프링 부트는 jar 파일만 만들면 별도로 WAS를 설정하지 않아도 애플리케이션 실행 가능

[스프링의 주요 콘셉트]

  1. 제어의 역전성과 의존성 주입

1-1. IoC (Inversion of Control): 제어의 역전

  • 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것
  • 스프링 컨테이너가 객체를 관리, 제공하는 역할을 함

1-2. DI (Dependency Injection): 의존성 주입

  • 어떤 클래스가 다른 클래스에 의존한다는 뜻
  • 클래스 A에서 B 객체를 쓰고 싶은 경우 객체를 직접 생성하는 것이 아니라 스프링 컨테이너에서 객체를 주입받아 사용

[빈과 스프링 컨테이너]

  1. 스프링 컨테이너
  • 빈을 생성하고 관리
  • @Autowired: 스프링 컨테이너에 있는 빈을 주입
  • 스프링 컨테이너가 생성하고 관리하는 객체

[관점 지향 프로그래밍]

  • AOP, Aspect Oriented Programming
  • 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으로 모듈화하는 것

[이식 가능한 서비스 추상화]

  • PSA, Portable Service Abstraction
  • 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스

!! 스프링 프레임워크는 IoC/DC를 통해 객체간의 의존 관계를 설정, AOP를 통해 핵심 관점과 부가 로직을 분리해 개발, PSA를 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용하도록 함

  • IoC: 객체의 생성과 관리를 개발자가 하는 것이 아니라 프레임워크가 대신하는 것
  • DI: 외부에서 객체를 주입받아 사용하는 것
  • AOP: 프로그래밍을 할 떄 핵심 관점과 부가 관점을 나누어서 개발하는 것
  • PSA: 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것

[스프링 부트 3 프로젝트 만들기]

Gradle 프로젝트를 스프링 부트 3 프로젝트로 바꾸는 방법: build.gradle 수정

http://localhost:8080/test

  • localhost는 아이피로는 127.0.0.1: 컴퓨터에서 사용하는 루프백 호스트명, 현재 사용중인 컴퓨터 의미
  • 8080: 스프링 부트의 포트 번호
  • test: 코드에 @GetMapping이라는 애너테이션으로 메서드와 매핑할 때 스프링 부트에서 설정한 경로

[스프링 부트 스타터]

  • 의존성이 모여 있는 그룹
  • 명명규칙: spring-boot-starter-{작업유형}
  •  

[자동 구성]

  • 스프링 부트에서는 애플리케이션이 최소한의 설정만으로도 실행되게 여러 부분을 자동으로 구성

[스프링 부트 3 코드 이해하기]

  1. @SpringBootApplication
@SpringBootApplication
public class SpringBootDeveloperApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDeveloperApplication.class, args);
    }
}
  • 스프링 부트 사용에 필요한 기본 설정
  • @SpringBootConfiguration: 스프링 부트 관련 설정을 나타냄
  • @ComponentScan: 사용자가 등록한 빈을 읽고 등록, @Component라는 애너테이션을 가진 클래스들을 찾아 빈으로 등록
  • @EnableAutoConfiguration: 스프링 부트에서 자동 구성을 활성화, 서버가 실행될 때 스프링 부트의 메타 파일을 읽고 정의된 설정들을 자동으로 구성
  1. 테스트 컨트롤러 살펴보기
@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        return "Hello, world!";
    }
}
  • @RestController: 라우터 역할, HTTP 요청과 메서드를 연결, 클라이언트의 요청에 맞는 메서드를 실행
  • TestController를 라우터로 지정해 /test라는 GET 요청이 왔을 때 test() 메서드를 실행하도록 구성
  • @Compponent 애너테이션이 있는 클래스는 빈으로 등록되며, @Controller, @RestController, @Configuration, @Repository, @Service 모두 @Component 애터네이션을 가지고 있음

[스프링 부트 3 구조 살펴보기]

  1. 계층
  • 프리젠테이션 계층: HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할, 컨트롤러
  • 비즈니스 계층: 모든 비즈니스 로직을 처리, 서비스
  • 퍼시스턴스 계층: 모든 데이터베이스 관련 로직을 처리,리포지토리

[테스트 코드]

  1. given-when-then 패턴
  • given: 테스트 실행 준비단계
  • when: 테스트 진행 단계
  • then: 테스트 결과 검증 단계
  1. JUnit
  • 자바 언어를 위한 단위 테스트 프레임워크
  • 테스트 방식을 구분할 수 있는 애너테이션을 제공
  • @Test 애너테이션으로 메서드를 호출할 때마다 새 인스턴스를 생성, 독립 테스트 가능
  • 예상 결과를 검증하는 어설션 메서드 제공
  • 사용 방법이 단순, 테스트 코드 작성 시간이 적음
  • 자동 실행, 자체 결과를 확인하고 즉각적인 피드백을 제공
import org.aspectj.lang.annotation.After;
import org.junit.jupiter.api.*;

public class JUnitCycleTest {
    @BeforeAll      // 전체 테스트를 시작하기 전에 1회 실행하므로 메서드는 static으로 선언
    static void beforeAll() {
        System.out.println("@BeforeAll");
    }

    @BeforeEach     // 테스트 케이스를 시작하기 전마다 실행
    public void beforeEach() {
        System.out.println("@BeforeEach");
    }

    @Test
    public void test1() {
        System.out.println("test1");
    }

    @Test
    public void test2() {
        System.out.println("test2");
    }

    @Test
    public void test3() {
        System.out.println("test3");
    }

    @AfterAll       // 전체 테스트를 마치고 종료하기 전에 1회 실행하므로 메서드는 static으로 선언
    static void afterAll() {
        System.out.println("@AfterAll");
    }

    @AfterEach      // 테스트 케이스를 종료하기 전마다 실행
    public void afterEach() {
        System.out.println("@AfterEach");
    }
}

[데이터베이스]

  1. 데이터베이스 관리자
  • DBMS, database management system
  • 관계형 DBMS = RDBMS(relational): 테이블 형태로 이루어진 데이터 저장소
  1. 데이터베이스 용어
  • 테이블: 데이터를 구성하기 위한 가장 기본적인 단위
  • 행 row: 가로로 배열된 데이터의 집합, 고유한 식별자인 기본키를 가짐, 레코드 record라고 부르기도 함
  • 열 column: 행에 저장되는 유형에 데이터
  • 기본키 primary key: 행을 구분할 수 있는 식별자, 테이블에서 유일해야 하며 중복값을 가질 수 없음, 수정되어서는 안 되며 유효한 값이어야 함(NULL이 될 수 없음)
  • 쿼리 query: 데이터를 조회하거나 삭제, 생성, 수정 같은 처리를 하기 위해 사용하는 멸여문

[ORM, object-relational mapping]

  1. ORM
  • 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법
  • 장점: SQL을 직접 작성하지 않아도 됨
  • 단점: 프로젝트 복잡성이 커질수록 사용 난이도 올라감, 복잡하고 무거운 쿼리는 해결 불가능한 경우도 있음
  1. JPA (java persistence API)
  • 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 인터페이스이므로 실제 사용을 위해서는 ORM 프레임워크를 추가로 선택해야함
  • 하이버네이트: JPA 인터페이스를 구현한 구현체, 자바용 ORM 프레임워크, 내부적으로는 JDBC API 사용

[엔티티]

  1. 엔티티
  • 데이터베이스의 테이블과 매핑되는 객체
  • 본질적으로는 자바 객체이나 테이블과 직접 연결된단든 특징이 있어 구분지어 부름
  • 데이터베이스에 영향을 미치는 쿼리를 실행하는 객체
  1. 엔티티 매니저
  • 엔티티를 관리해 데이터베이스와 애플리케이션 사이에서 객체를 생성, 수정, 삭제하는 등의 역할
  • 엔티티 팩토리: 엔티티 매니저를 만드는 곳, @PersistenceContext 또는 @Autowired 사용
  1. 영속성 컨텍스트
  • JPA의 중요한 특징 중 하나로, 엔티티를 관리하는 가상의 공간
  • 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩
  1. 엔티티의 상태
  • 분리 detached: 영속성 컨텍스트가 관리하고 있지 않는 상태
  • 관리 managed: 영속성 컨텍스트가 관리하는 상태
  • 비영속 transient: 영속성 컨텍스트와 전혀 관계가 없는 상태
  • 삭제 removed: 삭제된 상태

[스프링 데이터와 스프링 데이터 JPA]

  1. 스프링 데이터 JPA
  • 리포지터리 역할을 하는 인터페이스를 만들어 데이터베이스의 테이블 조회, 수정, 생성, 삭제 같은 작업을 간단히 할 수 있음
public interface MemberRepository extends JpaRepository<Member, Long>{
}         // 기존 CRUD 메서드를 사용하기 위한 JpaRepository 상속 예
  • 리포지토리: 엔티티에 있는 데이터들을 조회하거나 저장, 변경, 삭제를 할 때 사용하는 인터페이스
  • JpaRepository 클래스를 상속받을 때, 엔티티 Member와 엔티티 기본키 타입 Long을 인수로 넣어

'오공완' 카테고리의 다른 글

정처기 3과목: 자료 구조  (0) 2024.02.21
자바스크립트: 문서 객체 모델(DOM)  (0) 2024.02.20
231121 오공완  (0) 2023.11.21
231120 오공완  (0) 2023.11.21
231115 오공완  (0) 2023.11.16

데크 deque

- 양쪽에서 삽입과 삭제가 모두 가능한 자료 구조
- deque: Doubly-ended Queue
- Stack과 Queue를 합친 상태
- 데크의 기본 구조는 양방향에서 삽입&삭제 가능한 구조
- 입력 제한 데크(Scroll): 한쪽의 입력을 제한한 데크
- 출력 제한 데크(Shelf): 한쪽의 출력을 제한한 데크

해시테이블(=해시맵, 해시표)

- 키(key), 값(value)을 대응시켜 저장하는 데이터 구조
- 키를 통해 해당 데이터에 빠르게 접근 가능
- 해싱: 키를 특정 계산식에 넣어 나온 결과를 사용하여 값에 접근하는 과정

해시테이블 구조

- 키: 해시 테이블 접근을 위한 입력 값
- 해시 함수: 키를 해시 값으로 매핑하는 연산
- 해시 값: 해시 테이블의 인덱스
- 해시 테이블: 키-값을 연관시켜 저장하는 데이터 구조

해시 충돌

- 해시 테이블의 같은 공간에 서로 다른 값을 저장하려는 경우
- 서로 다른 키의 해시 함수를통한 해시 값이 동일한 경우
- 해시 충돌 해결 방법으로는 크게 개방 주소법과 분리 연결법이 있음

개방 주소법(open address)

- 충돌시 테이블에서 비어 있는 공간의 hash를 찾아 데이터를 저장
- hash와 value가 1:1 관계유지
- 비어 있는 공간 탐색 방법에 따라 분류:선형탐사법, 제곱 탐사법, 이중 해싱

선형 탐사법(linear probing)

- 빈 공간을 순차적으로 탐사하는 방법
- 충돌 발생 지점부터 이후의 빈 공간을 순서대로 탐사
- 일차 군집화 문제 발생
- 반복된 충돌 발생 시 해당 지점 주변에 데이터가 몰리는 경우 발생

제곱 탐사법(quadratic probing)

- 빈 공간을 n제곱만큼의 간격을 두고 탐사하는 방법
- 충돌 발생 지점부터 이후의 빈 공간을 n제곱 간격으로 탐사
- 일차 군집화 문제 일부 보완
- 이차 군집화 문제 발생 가능성

이중 해싱(double hashing)

- 해싱 함수를 이중으로 사용
- 해시 함수1: 최초 해시를 구할 때 사용
- 해시 함수2: 충돌 발생 시 탐사 이동 간격을 구할 때 사용
- 선형 탐사, 제곱 탐사에 비해 데이터가 골고루 분포됨

분리 연결법(seperate chaining)

- 해시 테이블을연결 리스트로구성
- 충돌 발생 시 테이블내의 다른 위치를 탐색하는 것이 아닌 연결 리스트를 이용하여 해당 테이블에 데이터를연결

'오공완' 카테고리의 다른 글

자바스크립트: 문서 객체 모델(DOM)  (0) 2024.02.20
스프링 부트3 시작하기  (0) 2024.02.05
231120 오공완  (0) 2023.11.21
231115 오공완  (0) 2023.11.16
231105 오공완  (0) 2023.11.05

#짝수는 싫어요

#숫자 문자열과 영단어

#9012

'오공완' 카테고리의 다른 글

스프링 부트3 시작하기  (0) 2024.02.05
231121 오공완  (0) 2023.11.21
231115 오공완  (0) 2023.11.16
231105 오공완  (0) 2023.11.05
231102 오공완  (0) 2023.11.03

알고리즘  복잡도
복잡도(Complexity)
- 알고리즘 성능을 나타내는 척도
- 시간 복잡도: 알고리즘 필요 연산 횟수
- 공간 복잡도: 알고리즘 필요 메모리
- 시간 보갖ㅂ도와 공갑 복잡도는 trade-off 관계

자료구조 data structure
- 자료를 효율적으로 관리하기 위한 구조
- 관리: 저장, 삭제, 탐색 등
- 선형 자료구조: 배열, 연결리스트, 스택/큐/데크, 해시 테이블
- 비선형 자료구조: 트리, 그래프, 힙/우선순위 큐, 트라이

자료구조의 구현
- 추상자료형 adt: 자료 형태와 자료에 대한 연산을 정의한 것, 구체적인 구현 방법은 명시하지 않음 (*추상클래스, 인터페이스 참고)
- 대부분의 자료구조는 자바에서 클래스로 제공

배열
- 많은 수의 데이터를 다룰 때 사용하는 자료구조
- 각 데이터를 인덱스와 1:1 대응하도록 구성
- 데이터가 메모리 상에 연속적으로 저장됨
- 장점: 인덱스를 이용하여 데이터에 빠르게 접근 가느으
- 단점: 데이터의 추가/삭제가 번거로운 편(미리 최대 길이를 정해서 생성해야 함)

'오공완' 카테고리의 다른 글

231121 오공완  (0) 2023.11.21
231120 오공완  (0) 2023.11.21
231105 오공완  (0) 2023.11.05
231102 오공완  (0) 2023.11.03
231101 오공완  (0) 2023.11.02

다차원 배열

public class Main {
    public static void main(String[] args) {
        System.out.println("==일차원 배열==");
        int[] myArray = {1, 2, 3};
        System.out.println("myArray[1]= " + myArray[1]);
        for (int i = 0; i < myArray.length; i++) {
            System.out.println(myArray[i]);
        }
        for (int i : myArray) {
            System.out.println(i);
        }

        System.out.println("==이차원 배열==");
        int[][] myArray2 = {{1, 2, 3}, {4, 5, 6}};
        System.out.println("myArray2[1][2] = " + myArray2[1][2]);
        for (int i = 0; i < myArray2.length; i++) {
            for (int j = 0; j < myArray2[i].length; j++) {
                System.out.println(myArray2[i][j]);
            }
        }

        for (int[] ints : myArray2) {
            for (int anInt : ints) {
                System.out.println("anInt = " + anInt);
            }
        }
        
    }
}

컬렉션 프레임워크

import java.util.*;

public class Main{
    public static void main(String[] args) {
        //1. List
        //1-1. ArrayList
        ArrayList list1 = new ArrayList();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        System.out.println("list1 = " + list1);
        list1.remove(Integer.valueOf(2));
        System.out.println("list1 = " + list1);
        list1.add(0, 10);
        System.out.println("list1 = " + list1);
        System.out.println("list1.size() = " + list1.size());
        System.out.println("list1.contains(1) = " + list1.contains(1));
        System.out.println("list1.indexOf(10) = " + list1.indexOf(10));

        //1-2. LinkedList
        System.out.println("== LinkedList ==");
        LinkedList list2 = new LinkedList();
        list2.add(1);
        list2.add(2);
        list2.add(3);
        System.out.println("list2 = " + list2);
        list2.addFirst(10);
        list2.addLast(20);
        System.out.println("list2 = " + list2);
        list2.remove(Integer.valueOf(1));
        System.out.println("list2 = " + list2);
        list2.removeFirst();
        list2.removeLast();
        System.out.println("list2 = " + list2);
        System.out.println(list2.size());
        
        //2. Set
        //2-1. HashSet
        System.out.println("== HashSet ==");
        HashSet set1 = new HashSet();
        set1.add(1);
        set1.add(2);
        set1.add(3);
        System.out.println("set1 = " + set1);
        set1.remove(1); //값으로 인식
        System.out.println("set1 = " + set1);
        set1.add(2);
        set1.add(3);
        System.out.println("set1 = " + set1); //중복처리 되어서 추가로 출력되지 않음
        System.out.println(set1.size());
        System.out.println(set1.contains(2));

        //2-2. TreeSet
        System.out.println("== TreeSet ==");
        TreeSet set2 = new TreeSet();
        set2.add(1);
        set2.add(2);
        set2.add(3);
        System.out.println("set2 = " + set2);
        set2.remove(2);
        System.out.println("set2 = " + set2);
        set2.clear();
        System.out.println("set2 = " + set2);
        set2.add(10);
        set2.add(5);
        set2.add(15);
        set2.add(15);
        System.out.println("set2 = " + set2);
        System.out.println(set2.first());
        System.out.println(set2.last());
        System.out.println(set2.lower(10));
        System.out.println(set2.higher(10));

        //3. Map
        //3-1. HashMap
        System.out.println("== HashMap ==");
        HashMap map1 = new HashMap();
        map1.put(1, "kiwi"); //키값과 데이터
        map1.put(2, "apple");
        map1.put(3, "mango");
        System.out.println("map1 = " + map1);
        map1.remove(2);
        System.out.println("map1 = " + map1);
        System.out.println("map1.get(1) = " + map1.get(1));

        //3-2. TreeMap
        System.out.println("== TreeMap ==");
        TreeMap map2 = new TreeMap();
        map2.put(10, "kiwi");
        map2.put(5, "apple");
        map2.put(15, "mango");
        System.out.println("map2 = " + map2);
        System.out.println(map2.firstEntry());
        System.out.println(map2.firstKey());
        System.out.println(map2.lastEntry());
        System.out.println(map2.lastKey());
        System.out.println(map2.lowerEntry(10));
        System.out.println(map2.higherEntry(10));

    }
}

'오공완' 카테고리의 다른 글

231120 오공완  (0) 2023.11.21
231115 오공완  (0) 2023.11.16
231102 오공완  (0) 2023.11.03
231101 오공완  (0) 2023.11.02
231031 오공완  (0) 2023.11.01

📓 Do it! 자바 프로그래밍 입문

자바 입출력과 스트림

1. 스트림

- 자바는 입출력 장치와 무관하고 일관성 있게 프로그램을 구현할 수 있도록 일종의 가상 통로인 스트림을 제공

- 자료를 읽어 들이려는 소스(source)와 자료를 쓰려는 대상(target)에 따라 각각 다른 스트림 글래스를 제공

- 입출력 기능: 파일 디스크, 키보드, 모니터, 메모리 입출력, 네트워크 등

2. 입력 스트림과 출력 스트림

- 스트림은 단방향으로 자료가 이동하기 때문에 입력과 출력을 동시에 할 수 없음

- 입력 스트림: InputStream이나 Reader로 끝나는 이름의 클래스

- 출력 스트림: OutputStream이나 Writer로 끝나는 이름의 클래스

3. 바이트 단위 스트림과 문자 단위 스트림

- 원래 자바의 스트림은 바이트 단위로 자료의 입출력이 이루어짐

- 자바에서 하나의 문자를 나타내는 char형은 2바이트이기 때문에 1바이트만 읽으면 한글 같은 문자는 깨짐

- 입출력 중 가장 많이 사용하는 자료인 문자를 위해 문자 스트림을 별도로 제공

- 바이트 스트림: Stream으로 끝나는 이름의 클래스

- 문자 스트림: Reader나 Writer로 끝나는 이름의 클래스

4. 기반 스트림과 보조 스트림

- 기반 스트림: 읽어들일 곳(소스)이나 써야할 곳(대상)에서 직접 읽고 쓸 수 있으며 입출력 대상에 직접 연결되어 생성되는 스트림

- 보조 스트림: 직접 읽고 쓰는 기능은 없으며 항상 다른 스트림을 포함하여 생성됨

자바 스트림 클래스 이름에서 스트림 특성 유추하기
ex)
FileInputStream
- InputStream = 입력 스트림
- Stream = 바이트 단위로 처리
- File = 직접 읽고 쓰는 기반 스트림

표준 입출력

1. Scanner 클래스

- java.util 패키지에 있는 입력 클래스

- 문자뿐 아니라 정수, 실수 등 다른 자료형도 읽을 수 있음

- 콘솔 화면뿐 아니라 파일이나 문자열을 생성자의 매개변수로 받아 자료를 읽어올 수 있음

- Scanner scanner = new Scanner(System.in)

예외 클래스

1. 오류와 예외

- 실행오류: 시스템 오류(error), 예외(exception)

- 오류는 프로그램에서 제어할 수 없지만 예외는 제어 가능

- 예외: 프로그램에서 파일을 읽어 사용하려는데 파일이 없는 경우, 네트워크로 데이터를 전송하려는데 연결이 안 된 경우, 배열 값을 출력하려는데 배열 요소가 없는 경우 등

- 오류 클래스는 모두 Throwable 클래스에서 상속받음

2. 예외 클래스의 종류

- 입출력 예외 처리(IOException)

- 실행 오류 예외 처리(RuntimeException)

'오공완' 카테고리의 다른 글

231115 오공완  (0) 2023.11.16
231105 오공완  (0) 2023.11.05
231101 오공완  (0) 2023.11.02
231031 오공완  (0) 2023.11.01
231030 오공완  (0) 2023.10.31

📓 Do it! 자바 프로그래밍 입문

상속

1. 클래스 상속 문법 extends

class B extends A {
}

- A가 가지고 있는 속성이나 기능을 추가로 확장하여 B 클래스에 구현

- 'B 클래스가 A 클래스를 상속받는다'

- 상위 클래스가 하위 클래스보다 일반적인 개념이고, 하위 클래스는 상위 클래스보다 구체적인 클래스

2. 클래스 생성과 형 변환

- 하위 클래스가 생성될 때는 상위 클래스의 생성자가 먼저 호출됨

- super: 부모를 부르는 예약어, 상위 클래스에 선언한 멤버 변수나 메서드를 하위 클래스에서 참조할 때도 사용

- super( ): 상위 클래스의 디폴트 생성자가 호출됨

- 모든 하위 클래스는 상위 클래스 자료형으로 형 변환(업캐스팅)될 수 있지만 그 역은 성립하지 않음

3. 메서드 오버라이딩

- 상위 클래스에서 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 경우에 하위 클래스에서 이 메서드를 재정의하는 것

- 반환형, 메서드 이름, 매개 변수 개수, 매개변수 자료형이 반드시 같아야 함

- @Override: 이 매서드는 재정의된 매서드라고 컴파일러에 명확히 알려주는 역할

 

*참고) 정수, 문자열 변환

int num = Integer.parseInt("12345");
String str = Integer.toString(12345);

'오공완' 카테고리의 다른 글

231105 오공완  (0) 2023.11.05
231102 오공완  (0) 2023.11.03
231031 오공완  (0) 2023.11.01
231030 오공완  (0) 2023.10.31
231028 오공완  (0) 2023.10.28

+ Recent posts