[CS][Java]

윤경·2022년 1월 2일
1

CS

목록 보기
3/6

직렬화

: 메모리 내 존재하는 정보를 보다 쉽게 전송 및 전달하기 위해 byte 코드 형태로 나열하는 것

즉, 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술(직렬화)과 byte로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)를 아우른 것을 말한다.

시스템적으로는 JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해 JVM으로 상주시키는 형태를 같이 이야기 한다.


추상 클래스 vs 인터페이스

인터페이스

  • 클래스가 아니며 클래스와 관련이 없다.
  • 추상 메소드와 상수만을 멤버로 가진다.
  • 한 개의 클래스가 여러 인터페이스를 구현할 수 있다. (다중구현 가능)
  • Java 8부터 default 메소드가 추가되었다.
    default 키워드가 붙은 메소드는 구현할 수 있으며(일반 메소드처럼), 자식 클래스에서는 이를 오버라이딩 할 수 있다.
    인터페이스가 변경되면 이를 구현하는 모든 클래스들이 해당 메소드를 다시 구현해야 하는 번거로운 문제가 있었다. 이런 문제를 해결하기 위해 인터페이스에 메소드를 구현할 수 있도록 변경되었다.

default method

기본 구현을 가지는 메소드로 앞에 default라는 예약어를 붙인다.
추상 메소드와는 달리 {} 즉, 몸통이 필요하다.

접근 제어자는 public으로 생략 가능하다.

이미 인터페이스에 구현되어있어 인터페이스를 구현한 클래스에서 코드를 구현할 필요가 없지만 재정의는 가능하다.

  • Java 8부터 static 메소드가 추가되었다.
    인터페이스에 static 메소드를 선언 가능하게 함으로써, 간단한 기능을 가지는 유틸리티성 인터페이스를 만들 수 있게 되었다.

static method

인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 메소드이다.
마찬가지로 접근 제어자는 public으로 생략 가능하다.

정적 메소드를 사용할 때에는 인터페이스를 직접 참조하여 사용한다.

참고

목적: 구현 객체의 같은 동작을 보장하기 위해 사용

추상 클래스

  • 클래스이며 클래스와 관련이 있다. (주로 베이스 클래스로 사용)
  • 추상 메소드 및 일반 메소드와 멤버도 포함할 수 있다.
  • 한 개의 클래스가 여러 개의 클래스를 상속받을 수 없다. (다중상속 불가능)
  • 상속을 받아 기능을 확장시키는 데 목적이 있다.

목적: 기존의 클래스에서 공통된 부분을 추상화하여 상속하는 클래스에게 구현을 강제화한다. 메소드의 동작은 구현하는 자식 클래스로 위임한다.
공유의 목적임


클래스 vs 인스턴스

클래스

: 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것

인스턴스

: 클래스에서 정의한 것을 토대로 실제 메모리 상에 할당된 것으로 실제 프로그램에서 사용되는 데이터

인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다. 하지만 해당 클래스의 모든 메소드는 해당 클래스로부터 생성된 모든 인스턴스가 하나의 메소드를 공유하게 되는 특징을 갖고 있다.


오버라이딩 vs 오버로딩

오버라이딩

: 상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의해 사용하는 것

상속시, 상위 클래스의 private 멤버를 제외한 모든 멤버를 상속받는다.

오버로딩

: 같은 이름의 메소드를 여러 개 가지면서 매개변수의 타입과 개수를 다르게 하여 정의하는 것

즉, 시그니처를 다르게하여 정의하는 것

  • 메소드 이름: (오버로딩)동일 / (오버라이딩)동일
  • 매개변수, 타입: (오버로딩)다름 / (오버라이딩)동일
  • 반환 타입: (오버로딩)상관없음 / (오버라이딩)동일

non-static 멤버 vs static 멤버

non-static 멤버

  • 공간적 특성: 해당 멤버는 객체마다 별도로 존재
    - 인스턴스 멤버라고 부름

  • 시간적 특성: 객체 생성시 멤버 생성
    - 객체가 생성될 때, 멤버가 생성되므로 객체 생성 후 멤버 사용 가능
    - 객체가 사라지면 해당 멤버도 사라짐

  • 공유의 특성: 공유되지 않음
    - 멤버는 객체 내 각각 독립된 공간을 유지하므로 공유되지 않음

static 멤버

  • 공간적 특성: 해당 멤버는 클래스 당 하나만 생성
    - 해당 멤버는 객체 내부가 아닌 별도 공간에 생성
    - 클래스 멤버라고 부름

  • 시간적 특성: 클래스 로딩 시 멤버가 생성
    - 객체가 생성되기 전에 이미 생성되므로 객체를 생성하지 않고도 사용 가능
    - 객체가 사라져도 해당 멤버가 사라지지 않음
    - 해당 멤버는 프로그램이 종료될 때 사라짐

  • 공유의 특성: 동일한 클래스의 모든 객체들에 의해 공유됨
    - 하나의 클래스로부터 생성된 여러 객체가 공유함


java.lang.StringBuilder

String과 같이 문자열을 다루는 클래스로 문자열 값을 변경하지 못하는 String과 달리 같은 인스턴스 안의 문자열 필드 값을 추가하거나 변경할 수 있다.

메소드

  • charAt(): 특정 인덱스 위치 문자 반환
  • indexOf(): 문자열 검색해 위치 반환
  • length(): 문자열 길이 반환
  • replace(): 검색된 문자열 교체
  • substring(): 특정 인덱스 범위 내 문자열을 복사해 새로 생성된 인스턴스 반환
  • toString(): 문자열 출력
  • append(): 맨 끝으로 문자열 추가
  • capacity(): length()는 실제 데이터가 들어있는 문자열 자체의 길이, capacity()는 현재 배열 사이즈
  • delete(): 매개변수로 전달받은 인덱스 사이의 문자열 제거
  • deleteCharAt(): 특정 인덱스의 한 문자만 삭제
  • insert(): 특정 인덱스 문자열 삽입
profile
개발 바보 이사 중

0개의 댓글