😊이 글은 프로그래머스 - 자바 입문 강의를 듣고 작성하였습니다.
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 메소드 : 인터페이스에서 디폴트 키워드를 붙이면 바로 구현 가능
내부 클래스
- 중첩 클래스(인스턴스 클래스)
- 바같쪽 클래스 먼저 생성한 후 생성 가능 : Out o = new OUt(); OUt.In i = o.new In();
- 정적 중첩 클래스(스테틱 클래스) : 안쪽 클래스가 static인 경우
- 정적이기 때문에 바깥 클래스를 생성하지 않고 바로 접근 가능 : Out.in i = new Out.In();
- 지역 중첩 클래스(지역,로컬 클래스) : 매서드 안에서 클래스가 생성된 경우
- 메서드 안에서만 사용 가능 --> 메인 메소드에서 사용할땐 외부 클래스를 선언한 다음 메소드를 사용하면 그 안에서 이너 클래스가 작동
- 익명 중첩 클래스
- 선언할 때 생성자 다음에 나오는 중괄호 안에 (생성자 이름에 해당하는) 클래스를 상속받은 이름 없는 객체를 만든다는 것을 의미
- 중괄호 안에 매서드를 구현하거나 추가할 수 있음
- 쓰는 이유 : 상속받는 클래스를 굳이 만들어 낼 필요가 없을 때.
해당 클래스에서만 사용이 되고 다른 클래스에서는 전혀 사용할 필요가 없을 경우
한번만 쓰고 말 경우
예외처리
: 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{
생성자(String msg){
super(msg);
}
생성자(Exception ex){
super(ex);
}
}
- 이렇게 부모에게 오류 메세지와 오류를 넘겨줌
- 이후 throw에서 매개변수로 원하는 메세지 넣기
좋은 글 감사합니다. 자주 방문할게요 :)