[Java] 자바 입문 - 정리

이진이·2023년 8월 10일
0
post-thumbnail

😊이 글은 프로그래머스 - 자바 입문 강의를 듣고 작성하였습니다.

JAVA : 객체 지향 언어

class

 : 붕어빵 틀 --> 붕어빵 여러개 만들 수 있음

instance(객체) : 붕어빵이 새로 메모리(heap)에 생성

  • new 사용해서 생성 : 참조형 <--> 변수에 직접 값 입력 : 기본형

string(class) 

  •  new없이 ""로 바로 생성 가능! 
    •  "" 안에 문자열이 상수 영역에 저장
    • 같은 문자열로 새로운 변수를 만들면 같은 상수가 있는 주소를 가리킴
  • 불변클래스
    • 한번 생성된 클래스 내부의 값은 변하지 않음(다른클래스는 X) ex.str.subString();해도 변하지 않아
    • 값을 바꾸고 싶으면 다시 그 변수에 저장해주기 ex. str = str.substring();

field : 이름 번호 등 속성 --> 상태

  • 각 인스턴스마다 속성이 다름 

method : 클래스가 가지는 기능 --> 행동

  • 매개변수나 인자로 값을 받을 수 있고, 결과값을 돌려줄 수 있음
    • 매개변수 : 전달된 인자를 받아들이는 변수
    • 인자(argument) : 어떤 함수를 호출 시 전달되는 값 
  • 클래스 안 메서드는 클래스 인스턴스를 생성해야 사용 가능(예외 : static)

string class method

  • length(); 길이
  • concat(""); 뒤에 문자열 붙이기
  • substring(3, 6); 3번 인덱스부터 6번 인덱스 !!전!! 까지 잘라줌

생성자 : public 클래스이름(){}

  • this : 객체 자신을 참조하는 키워드! 클래스 필드(내꺼)라는 것을 알려줌. 매개변수와 같이 사용할때 씀.
  • 오버로딩 가능

오버로딩 : 같은 메소드 명으로 여러 메소드를 만들 수 있음

  • 매개변수의 개수||타입||리턴값 등이 달라야돼

Scope

  • globalScope : class 내에서 사용 가능
  • localScope, 매개변수 : 메서드 안에서 사용 가능
  • static : 인스턴스화 하지 않아도 사용 가능 // static 키워드 안에서 사용 가능
    • 클래스 변수 : static한 변수. 값을 저장할 수 있는 공간이 하나밖에 없어서 값을 공유함

enum : 열거형

  • 이름 {열거1, 열거2, ...} // 특정 값만 사용해야 될 때

패키지 : 관련된 클래스들을 묶어서 관리

  • 패키지 이름 쓰는 법 : com.naver.javastudy --> 도메인 주소 거꾸로+파일(프로젝트)명
  • 다른 패키지를 사용할때 import(ctrl+shift+o) 해야됨 --> import com.naver.javastudy.*(클래스이름);

상속(extends) : 포함된 관계이면 상속 받고 상속 할 수 있음

  • ex.버스는 차에 포함됨-->버스:자식-차:부모
  • 부모가 가진 메소드는 자식이 모두 사용 가능
  • super() : 부모를 가르키는 키워드 ex.super.run(); //자식 클래스에서 사용 가능
    • 부모가 기본생성자가 있다면 알아서 부모가 먼저 호출되지만, 부모가 기본 생성자가 없을 때 직접 생성자를 호출해야 돼
    • super("name");
  • 부모 타입으로 자식을 가리킬 수 있다 but 부모가 가지는 내용만 사용 가능 ex.Car c = new Bus();
    • 강제 형변환 가능 : Bus bus = (Bus)c;

추상 클래스 : 음식, 새, 가구 등 모호한 클래스

  • 객체화는 불가, 부모로 쓰기 좋음
  • abstract : 추상메서드(가 하나라도 있으면 추상클래스가 됨)

접근제한자 : 캡슐화 - 관련된 내용을 모아서 가둠

  • public : 모든 범위 허용
  • protected : 같은 패키지만 허용, 다른패키지라면 상속받은 자식만
  • default : 같은 패키지 내에서 허용
  • private : 자기 자신만

interface : 꼭 필요한 기능들을 모아서 이거 만들거야! 하고 선언해 두는 것.

  • 구현은 하지 않아.
  • 상수도 선언 가능
  • 인터페이스 밑에 메소드를 abstract로 만들지 않아도 돼.
  • 인터페이스 자체가 객체를 생성하진 못해. --> implements 이용

implements : 인터페이스를 구현하겠다. 모든 메소드 구현해야 돼(오버라이드)

default 메소드 : 인터페이스에서 디폴트 키워드를 붙이면 바로 구현 가능

내부 클래스

  1. 중첩 클래스(인스턴스 클래스)
    • 바같쪽 클래스 먼저 생성한 후 생성 가능 : Out o = new OUt();  OUt.In i = o.new In();
  2. 정적 중첩 클래스(스테틱 클래스) : 안쪽 클래스가 static인 경우
    • 정적이기 때문에 바깥 클래스를 생성하지 않고 바로 접근 가능 : Out.in i = new Out.In();
  3. 지역 중첩 클래스(지역,로컬 클래스) : 매서드 안에서 클래스가 생성된 경우
    • 메서드 안에서만 사용 가능 --> 메인 메소드에서 사용할땐 외부 클래스를 선언한 다음 메소드를 사용하면 그 안에서 이너 클래스가 작동
  4. 익명 중첩 클래스 
    • 선언할 때 생성자 다음에 나오는 중괄호 안에 (생성자 이름에 해당하는) 클래스를 상속받은 이름 없는 객체를 만든다는 것을 의미
    • 중괄호 안에 매서드를 구현하거나 추가할 수 있음
    • 쓰는 이유 : 상속받는 클래스를 굳이 만들어 낼 필요가 없을 때. 
      해당 클래스에서만 사용이 되고 다른 클래스에서는 전혀 사용할 필요가 없을 경우
      한번만 쓰고 말 경우

예외처리

: try-catch(예외클래스 변수명)-finally

  • try : 수행할 코드. 예외가 발생할 수 있는 블록
  • catch : 예외를 처리해주는 블록, 여러개 사용 가능, Exception클래스를 사용하면 모든 예외를 받을 수 있음
  • finally: 예외 발생 여부에 관계없이 반드시 실행 (없어도 됨)

throws : 오류 떠넘기기

  • 메서드 선언부 뒤쪽에 >>throws 발생할예외클래스<< 이렇게 적으면 메서드를 호출할 때 오류를 처리해주세요
    --> 메소드 호출할 때 try 구문을 사용하면 됨

throw : 오류 발생시키기 

  • throw new Exception종류("오류가 발생했습니다");
    -->catch(Exception e){ sysout(e.toString); }

사용자 정의 Exception

public class 클래스명 extends Exception{  //or RuntimeException{
	생성자(String msg){
		super(msg);
	}
	생성자(Exception ex){
		super(ex);
	}
}
  • 이렇게 부모에게 오류 메세지와 오류를 넘겨줌
  • 이후 throw에서 매개변수로 원하는 메세지 넣기
profile
프론트엔드 공부합니다. 블로그 이전: https://jinijana.tistory.com

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

좋은 글 감사합니다. 자주 방문할게요 :)

답글 달기