[Java] Java Review2

JH·2023년 5월 1일

Java

목록 보기
19/21

1. TIL

A. 객체 지향

객체 지향의 목적 : 유지 보수성이 높은 언어를 개발하기 위해 사용

1. 인스턴스

  • 객체 : 속성과 행동으로 구성된 하나의 단위

  • 인스턴스 : new 명령문으로 heap메모리에 생성된 클래스(객체)

  • new : 메모리에 객체를 생성해주는 명령문

    • (1. heap 메모리에 멤버 변수 생성, 2. 생성자 호출)

2. JVM 메모리 구조

  • code 영역 : 실행 코드들이 사용하는 영역, Method영역 이라고도함

  • heap 영역 : new 명령문으로 생성된 인스턴스들이 사용하는 메모리

    • 멤버 변수는 heap 메모리에 만들어질 때 자동으로 초기화됨
    • 개발자가 접근할 수 없음
  • stack 영역 : 지역 변수들이 사용하는 영역

    • 메소드 실행 시 생성되고, 메소드 종료 시 삭제됨
    • 개발자가 접근할 수 있는 유일한 메모리

참조 변수 : heap 메모리의 주소 값을 가지는 변수

  • 참조 변수의 사용 목적 : heap에 생성된 인스턴스를 사용하기 위해서임

. 의 의미 : 참조 변수의 주소 값을 찾아가라는 의미

public void test() {
	Item item1 = new Item();
}	// item1 이라는 변수에 heap메모리에 생성된 인스턴스의 주소값을 할당함

3. static

static 키워드 위치

  • static 변수(클래스 변수) : main 메소드 실행 전 code 영역에 생성됨

  • static 메소드 : main 메소드 실행 전 사용 준비가 완료됨

  • static 블록 : main 메소드 실행 전에 실행할 실행 블록 (전처리 작업)

4. 생성자

생성자 역할 : 멤버 변수의 초기화

기본 생성자 : 생략될 경우 컴파일 할 때 자동으로 만들어줌

this : 현재 객체 자신의 주소를 가지는 키워드



B. 상속, 인터페이스

1. 상속

상속의 목적 : 클래스 간의 중복된 내용을 별도의 클래스에 중복된 내용을 정의하고 사용하기 위해 사용

상속의 조건

  • 공통 멤버를 가지는 클래스들 간의 공통점이 있는가?
  • is a 관계가 성립하는가?

상속 문법 : <자식클래스> extends <부모 클래스>

메소드 오버라이딩 : 부모로부터 상속받은 메소드의 내용을 재정의하는 것

  • 메소드 바디만 변경할 수 있음
  • 선언부의 접근 제어자는 동일 또는 큰 범위로 변경 가능함, 이외 선언부는 변경 불가
  • 자식의 메소드가 실행 순위가 높음

super : 부모를 지칭

  • 생성자를 실행할 때 super(); 가 없으면 무조건 1번 실행함
  • 자식 생성자를 실행하면 부모 생성자를 무조건 1번 호출함

부모 생성자 활용

public Person(String name, int age) {
	this.name = name;
    this.age = age;
}

public Student(String name, int age, String grade) {
	super(name, age)	// 부모 생성자를 호출
    this.grade = grade;
}

2. 추상

추상 메소드

  • abstract 키워드를 사용 (추상 메소드, 추상 클래스에서만 사용할 수 있음)

  • 추상 메소드를 하나라도 가지고 있으면 추상 클래스, 인터페이스가 되어야 함

  • 메소드 바디를 생략해도 됨

  • 상속받는 클래스는 메소드 바디를 구현해야함, 하지 않을 시 자신도 추상 클래스가 되어야 함

3. 인터페이스

  • 다중 상속 가능(인터페이스만), 복합 상속 가능

  • 변수 선언 : 컴파일 시 public static final 이 자동으로 붙으므로 public static final 으로 선언해야 함

  • 메소드 : 컴파일 시 abstract 가 붙으므로 추상 메소드로 선언해야함

  • default 메소드

    • 자바8부터 지원
    • 상속받는 모든 클래스에서 공통으로 갖는 기능 구현 (실행블록을 선언할 수 있음)
  • static 메소드

    • 자바8부터 지원
    • static 메소드이기 때문에 객체 생성 없이 사용할 수 있음


C. 다형성

1. 다형성

다형성이 가능한 이유 : Object로 시작되서 해당 클래스까지 상속되었기 때문에

Object 클래스 : 모든 자바 클래스의 루트 클래스

파라미터로 받을 때 부모 클래스(타입)로 받아서 다형성을 이용할 수 있음

instanceof : 타입 확인을 위해 사용

타입 변경 : (데이터 타입(부모의 타입)) 참조 변수

2. 내부 클래스

한 클래스의 멤버로서 선언된 클래스

  • instance 클래스 : 기본 형태의 내부 클래스
  • Local 클래스 : 메소드 안에 선언된 내부 클래스
  • static 클래스
  • 익명 클래스

접근할 때 OuterClass.InnerClass 형식으로 접근함



D. 라이브러리

다양한 기능을 가진 코드들의 집합

1. API

자바API : 클래스 파일 형태로 제공하는 라이브러리

java.lang

  • Object

    • hashCode() : 인스턴스의 고유번호를 생성
    • getClass() : Class타입의 객체를 생성하여 리턴함
  • String : 원본 변경 불가

    • eqaulsIgnoreCase() : 대소문자 구분 x
    • charAt() : 인자로 지정한 위치에 대한 문자를 리턴함
    • valueOf() : 문자열로 바꿔줌
  • StringBuffer, StringBuilder (동시처리가능/ 동시처리 불가능) : 원본 변경 가능

  • Math

  • Wrapper : 기본 데이터 타입과 매핑되는 클래스 (데이터 타입을 객체로)

    • Boxing/Unboxing/autoboxing
    • parse<기본 데이터 타입>(String s): 인자로 문자열을 받아서 기본 데이터 타입으로 변환하는 메소드

java.util

  • Date/Calendar : 날짜, 시간에 관련된 기능을 처리하는 객체

  • SimpleDateFormat : 날짜와 시간의 포맷 지정을 처리하는 객체

  • MessageFormat, DecimalFormat : 문자의 포맷, 숫자의 포맷

  • StringTokenizer : 문자열을 분리하는 기능을 가진 객체

  • Random() : 난수를 발생하는 기능을 가진 객체

  • Arrays : 배열에 관련된 기능을 제공하는 객체



2. Collection API

List

사용 목적 : 배열의 크기 변경, 수정 시 처리 과정을 보완하기 위해서 사용함

ArrayList

  • 생성자 : 클래스<데이터 타입> 변수 = new 클래스<데이터 타입>();

  • 제네릭 <> = ArrayList에서 데이터 타입을 미리 지정해주는 것

  • get, indexOf, add, remove, clear, size, asList 등의 메소드 사용

  • Iterator() : Iterator 객체를 이용, 커서를 이용하여 접근함 (속도에서 유리)

Vector

  • ArrayList와 같지만 동기화 처리됨

LinkedList

  • 이전, 다음 데이터의 위치 정보로 구분


MAP

  • Key, Value가 쌍으로 구분되어 저장
  • Map.Entry : Key 와 Value 를 가지고 있음

HashMap

여러 개의 Map.Entry를 갖는 Collection 객체

TreeMap

  • Tree형태의 Map, 엔트리를 비교하여 정렬함

Hashtable

HashMap 동일, null 키와 null 값을 저장할 수 없음, 동기화 처리됨


Set

HashSet

저장되는 순서가 의미없음, 중복된 값을 저장할 수 없음

TreeSet

데이터 구조가 Tree 형태의 Set



E. 예외 처리

  • Throwable : 오류의 최상위 객체
    • Error : 시스템적인 오류
    • Exception : 프로그램적인 오류 (예외)

1. Exception

RuntimeException : 실행 시 발생한 예외

IOException : 입출력 시 발생한 예외

catch 처리 시 : Exception 한번에 예외 처리 할 수 있음 (다형성)

  • getMessage() : 예외에 대한 메시지를 받음
  • printStackTrace() : 실행한 코드를 단계별로 예외 출력

finally : 자원 반환, 해제를 위해 주로 사용, (파일을 닫거나 네트워크 연결을 종료)

try-with-resources

  • try(자원) {}catch {}
  • Java7부터 사용 가능
  • 자동으로 자원을 반환 (AutoCloseable 인터페이스에 정의된 객체만)

throws : 메소드 선언시 사용, 예외를 던짐 호출하는 쪽에서 처리해야함

throw : 오류를 강제로 발생시키는 명령문

사용자 정의 예외 : Exception을 상속받아야함



4. 느낀점

상속, 추상, 다형성을 그냥 사용했지만 개념을 살펴보니 서로 연관이 있었다.

API 부분은 너무 많은 메소드가 있어서 정말 공식문서를 이용하여 더 효율적으로 작업할 수 있을 것 같다.

코드적으로 사용하던 부분을 개념적으로 다시 살펴보니 더 기반을 다지는 것 같았다.

profile
잘해볼게요

0개의 댓글