JAVA 간략한 설명

Karim·2021년 4월 9일
6
post-thumbnail

Java란

객체지향 프로그래밍 언어
객체지향이란 데이터를 객체로 취급

객체지향 특징

캡슐화(정보 은닉), 상속(재사용, 확장), 추상화, 다형성

  • 캡슐화 : 관련된 메서드나 데이터를 하나로 묶어 사용, 재 사용성에 좋다.
  • 상속 : 상위(부모) class의 틀을 가져와 기능을 추가하여 사용하기 위해 자식 class에 extends를 사용하여 상속받는다.
  • 추상화
  • 다형성 : 하나의 class나 메서드가 다양한 방식으로 동작.
    • 오버 로딩
      class에서 같은 이름의 함수를 다양한 방식으로 동작
      매개변수의 수, 순서, 타입으로 구분
    • 오버 라이딩
      상속으로 자식class가 부모class의 기능을 가져오면서 재정의로 기능을 추가하여 사용 가능

Class

객체를 생성하기 위한 틀 (메모리에 할당되지 않은 상태)

인스턴스

객체를 생성해 메모리에 적재한 상태

  • Testclass testclass = new Testclass()

추상 class

Class 생성 시 public abstract class [명]{} 로 선언

  • 객체로 생성할 수 없다.
  • 안에 내용을 자세하게 선언하지 않았기 때문에 다양한 방식으로 사용될 공통 부분(?)의 메서드를 추상 class에 선언 후
    extends를 사용하여 상속 후 재정의하는 방식으로 사용된다.

인터페이스

자바에서 불가능한 다중 상속을 따라하기 위한 툴
public interface [인터페이스명]{}로 생성
추상메서드를 선언한다.
public으로 선언 해줘야 한다.

  • public abstract에서 abstract가 생략됨
    인터페이스 사용 시 implements를 사용한다.
  • Implements로 선언한 class는 인터페이스 안에 있는 메서드를 전부 구현해야 한다.

접근

  • Public
    접근 제한 없음
  • Private
    같은 class내에서만 접근 가능
  • Protected
    같은 패키지 또는 다른 패키지에서 protected로 선언한 class를 상속한 class만 접근 가능
  • Default
    같은 패키지에만 접근 가능

Final

Final로 정의된것들은 재 정의 할 수 없다.
처음의 초기값을 넣어줘야 한다.

스트림

데이터를 목적지로 입출력 하기 위한 방법
Fifo 구조
읽기 중 쓰기 불가

Thread

프로세스 내에서 동시에 실행되는 독립적 단위
크롬에서 여러 개의 창들

  • class에 Thread class를 extends 하는 방법
    public void run(){ 스레드 작성 }
    구현한 스레드를 사용 시 메인 메서드에서 스레드를 상속 받은 클래스 객체 생성 후 thread.start();
  • Class에 Runnable 인터페이스를 implements 하는 방법
    메서드 작성은 위 thread class 상속과 동일하다.
    Thread와 다르게 구현 시 thread객체 생성 안에 runnable 구현 class를 객체 생성 해줘야 한다.
  • 교착상태(deadlock)두 개 이상의 스레드가 자원을 기다리며 무한히 기다리는 현상
    • 해결방안
      회피, 예방, 무시 등등..

동기화

공유 객체에 여러 개의 스레드가 동시에 접근하는 것을 방지하기 위해 사용
동기화를 하지 않게 되면 공유 객체에 하나의 스레드가 값을 변경 했을 때, 그 전에 접근한 다른 스레드가 변경되지 않은 값을 가져가 처리를 할 수 있기 때문에 한 스레드가 공유 객체에 접근하고 있을 때 다른 스레드가 그 공유 객체에 접근하지 못하게 하는 방법

  • 공유로 사용할 class안 메서드에 synchronized를 선언하여 사용
    public synchronized void 공유 메서드 명(){}

예외처리 (Exception)

실행 중 발생하는 예외들을 처리하기 위해 사용
실행 중 예외가 발생하게 될 때 프로그램이 중지되지 않고 미리 예외처리를 선언하여 catch구문에 선언한 동작을 실행하게 만드는 작업

  • try / catch (finally) 문 사용
try{

  //예외가 발생할 수 있는 부분

}catch(Exception e){

//예외처리 발생 시 어떻게 처리 할지 선언

//System.out.println(e.getMessage());

//throw -> Main에서는 안써도 되지만, 그 외 class에서는 사용해줘야 한다. main으로 예외처리를 던져줘야 하기 때문

}

/*finally{무조건 실행}*/

Garbage collection

사용하지 않은 할당된 메모리 블록을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것

Arraylist

배열과 달리 동적으로 크기를 할당할 수 있는 자료구조

  • Arraylist<타입> 리스트명 = new Arraylist<>(); //객체 생성
    추가 : 리스트명.add(값);
    리스트명.add(순서, 값);
    삭제 : 리스트명.remove(순서);
    가져오기 : 리스트명.get(순서);

Static

프로그램이 컴파일 될 때 미리 메모리에 값을 올려 실행하기 위해 선언
main메서드가 static으로 선언되는 이유
main 메소드는 가장 먼저 실행되어야 하는 메소드이기 때문에 static으로 선언된다.
public으로 선언되는 이유
main 메소드가 어떤 패키지에 어떤 클래스에 선언되어 있어 있는지 모르기 때문에 public으로 선언된다.

변수

  • 전역변수
    클래스 내에서 사용하는 변수
  • 지역변수
    메소드 안에서 사용하는 변수
  • 매개변수
    클래스나 메소드 사이의 값을 전달하기 위한 변수
profile
나도 보기 위해 정리해 놓은 벨로그

0개의 댓글