Skip to content

jaecheolkimDev/java-notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 

Repository files navigation

JAVA 공부 노트

1. 기본

  • 상속(Inheritance)

    • 상위 개체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지고 있음을 의미하는 관계이다.
    • 부모 클래스의 속성을 자식 클래스가 물려받는 개념이다.
      • 상속은 이미 만들어진 클래스의 필드와 메소드를 물려받게 함으로써 자바 코드의 중복 작성을 방지하여 코드 작성에 드는 시간과 비용을 줄일 수 있게 한다. 즉, 상속은 코드의 재사용을 가능케 한다.
  • 다형성(Polymorphism) : 동일한 이름의 메소드를 다양한 형태로 사용할 수 있다.

    • 오버로딩과 오버라이딩을 통해 다양한 동작을 수행할 수 있습니다.
      • 오버로딩 : 동일한 이름을 가진 메소드의 파라미터(매개변수)를 다르게 하여 처리할 수 있도록 하는 것입니다.(여러 개를 읽는다.)
      • 오버라이딩 : 상속 관계에서 부모 클래스를 자식 클래스에서 재정의 하는 것을 말합니다.(무언가의 위에 올라탄다.)
  • 접근 지정자

    • public : 클래스 내부/외부에서 모두 호출 가능.
    • private : 클래스 내부 멤버들만 호출 가능.
    • protected : 클래스 내부 메소드들은 호출 가능하며, 다른 클래스 중 상속받은 서브 클래스만 호출 가능.
    • default(생략) : 동일한 패키지 내의 모든 클래스가 호출 가능함을 의미한다.
  • static : 전역변수, 전역함수

  • 객체 생성안하고 사용할수있음.

  • static멤버는 클래스당 하나만 생성되는 멤버로서 동일한 클래스의 모든 객체들이 공유한다.(꼭 공유해야 하는것만 static을 써야함.) :클래스당 하나씩 생긴다고 해서 클래스 멤버라고도 부른다. :non-static멤버는 각 객체마다 하나씩 생긴다고해서 인스턴스 멤버라고 부른다.

  • 어떤 객체도 생성되기 전 프로그램을 시작할 때 이미 생성된다. (메인이 만들어지기전에 사용준비 됨.) :그러므로 객체를 생성하기 전에도 static 멤버는 사용할 수 있다.

  • static 메소드는 오직 static 멤버만 접근할 수 있다. :static 메소드는 객체가 생성되지 않은 상황에서도 사용이 가능하므로 객체에 속한 인스턴스 메소드, 인스턴스 변수 등을 사용할 수 없다. 다만 static 멤버들만 사용 가능하다. 그러나 인스턴스 메소드는 static 멤버들을 모두 사용할 수 있다.

  • static 메소드에서는 this 키워드를 사용할 수 없다. :static 메소드는 객체가 생성되지 않은 상황에서도 클래스 이름을 이용하여 호출이 가능하기 때문에 호출 당시 실행 중인 객체를 가리키는 this 레퍼런스를 사용할 수 없다.

  • final ( 3 군데에서 사용 )

    • final 클래스 : 클래스를 상속 할 수 없음.
    • final 메소드 : 오버라이딩 할 수 없음. ( 자식이 무조건 상속받아 사용 )
    • final 필드, 상수 정의
      • public static final : 프로그램 전체에서 공유하여 사용할 수 있는 상수
  • 인터페이스 : 클래스의 청사진

  • 클래스

    • 추상 클래스 : 클래스의 청사진을 만드는데 사용되지만, 메소드 구현도 가능하다.
    • 콘크리트 클래스 : 청사진의 최종구현.
  • 예외(Exception) : 자바에서 기본적으로 예외가 발생했을떄 처리해주지 않으면 콜스택을 하나씩 제거하면서 최초 호출한곳까지 예외가 전파된다.

  • Compile(컴파일) : 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨)

    • 즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 컴파일러(Compiler)라 한다.
    • 자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다.
      • 자바 클래스 파일은 바이트 코드로 컴파일되어 static영역에 위치하게 된다. 때문에 클래스 네임만 알고 있으면 언제든 이 영역에 접근하여 클래스에 대한 정보를 얻을 수 있다.
  • 형변환

    • 묵시적 : 작은게 큰걸로
    • 명시적 : 큰게 작은걸로
호출 방식 영향 종류
call-by-value(값에 의한 호출) 동일한 값 복사되서 넘어가기 때문에 한쪽이 변해도 영향이 없다 기본 타입, 메소드 호출 인자 전달 방식
call-by-reference(참조에 의한 호출) 레퍼런스 값만 복사되어 전달되는데, 동일한 객체를 가리키므로 변경에 영향을 받는다 객체 레퍼런스, 배열

  • 🧠 Java 메모리 구조: Stack vs Heap

자바 프로그램이 실행될 때 메모리는 스택(Stack)힙(Heap) 으로 나뉘어 객체와 변수들이 관리된다.
이 두 영역은 메모리 관리, 생명주기, 접근 방식에서 큰 차이를 가진다.

구분 Stack 영역 Heap 영역
정의 메서드 실행 시 생성되는 지역 변수, 매개변수, 호출 정보가 저장되는 메모리 공간 new 연산자를 통해 생성된 객체(인스턴스)가 저장되는 동적 메모리 공간
관리 주체 JVM 스레드(Stack Frame) 단위로 자동 관리 GC(Garbage Collector) 가 자동으로 관리
저장 대상 기본형 변수, 참조형 변수의 참조 주소값, 메서드 호출 정보 참조형 변수의 실제 객체 데이터
생명주기 메서드 호출 시 생성되고, 종료 시 자동 소멸 객체에 대한 참조가 모두 사라질 때 GC에 의해 해제
메모리 크기 상대적으로 작음 (스레드당 할당) 상대적으로 큼 (JVM 전체 공유)
속도 매우 빠름 (LIFO 구조) 상대적으로 느림 (동적 할당 필요)
공유 여부 스레드마다 독립적 모든 스레드가 공유 가능
예외 발생 예시 StackOverflowError OutOfMemoryError

2. 심화

  • JDBC : 관계 데이터베이스에 접근하는 자바 API.

  • process : 실행 동작의 단위

    • 싱글 프로세서 : 한 컴퓨터에서 하나의 프로그램 실행.
    • thread : 하나의 process에서 실행동작의 단위
      • sleep, join, notify, notifyAll, priority, yield, wait
      • 쓰레드는 경쟁관계임. Synchronized(작업이끝날때까지 할당받는것)가 필요할 때도 있음.
      • 블럭상태 : 어떤 조건을 만족할때까지 runnable이 못되게 함.
      • lock을 요청했을때 누군가 사용중이면 기다림.
      • 스레드 객체를 생성하는 두가지 방식
        • Thred 클래스를 직접상속

        • Runnable 인터페이스를 상속

          yield() : 양보 - 블럭상태에 빠지는건 아님.
          sleep() : 	   잠들면서 os에게 권한을 주고 깰 때 요구함.
          join()  :	  어떤 쓰레드가 끝난 다음 작업함.
          wait()  :    쓰레드간 협업. / 작업을 일시중지.
          notify():	 block에 있는 것 중 하나가 풀림.
          notifyAll() :Block의 모든 것들이 runnable로 들어감.
          Synchronized() : lock을 얻고, 끝나면 lock을 양보함.
          
  • Iterator : 자바의 컬렉션 프레임웍에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 하였는데 그 중 하나가 Iterator이다.

    • 모든 컬렉션(Collection)으로 부터 정보를 얻을 수 있는 인터페이스.
    • 즉, 자신이 컬렉션(List, Set 등)이라면 이터레이터 인터페이스를 사용할 수 있다.
    • 도서관에 비유
      • 우리가 책을 보관하는 책장(컬렉션)이 있고, 그 곳에는 책(컬렉션 안에 들어갈 객체)이 있습니다.
      • 이 책장은 도서관 사서(이터레이터)가 관리하게 됩니다.
      • 사서는 단순 무지한 녀석이라 책장 처음부터 끝까지 한번에 하나씩 밖에 못 가져옵니다.
    • 메서드
      • boolean hasNext() : 다음 값이 있는지 없는지 확인, 있으면 true를 리턴하고 없으면 false를 리턴 --> if나 while문에서 쓰면 되겠죠?
      • E next() : 다음 값을 리턴합니다. 어떤 형태인지 모르기 때문에 리턴 유형을 E로 하겠습니다.
      • void remove() : 삭제 하는 메서드
  • 정규표현식

    • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어다.
    • 텍스트 편집기나 스크립트 언어에서 문자열의 검색과 치환을 위해 지원하고 있다.
    • java.util.regex.Pattern
      • boolean b = Pattern.matches(String regex , String str) : 특정 문자열(str)이 주어진 정규식(regex)에 매칭되는지를 테스트해볼 수 있다.
      • Pattern.compile(String regex) : 주어진 정규표현식으로부터 패턴 생성
      • Pattern.matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true 반환
      • Pattern.asPredicate() : 문자열을 일치시키는데 사용할 수 있는 Predicate 작성
      • Pattern.pattern() : 컴파일된 정규표현식을 String 형태로 변환
      • Pattern.split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리
  • java.util.regex.Matcher

3. 1.8 version 부터 도입

  • Consumer 인터페이스 : 제네릭 타입의 매개변수를 전달받아 특정 작업을 수행해야 하는 경우 사용됩니다.

    • 인터페이스 이름이 소비자(Consumer)인 이유는 데이터(매개변수)를 소비(사용)하고 아무것도 생성(반환)하지 않기 때문입니다.
  • 더블콜론(::)

메서드 참조 종류

어떠한 메서드를 참조하여 실행하느냐에 메소드 참조도 종류가 나뉘게 된다.

종류 람다 표현식 메서드 참조
정적 메서드 참조 (x) -> ClassName.method(x) ClassName::method
인스턴스 메서드 참조 (x) -> obj.method(x) obj::method
매개변수의 메서드 참조 (obj, x) -> obj.method(x) ClassName::method
생성자 참조 (x, y) -> new ClassName(x, y) ClassName::new

About

JAVA 공부 노트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published