하나의 인스턴스를 여러 개의 참조변수가 가리키는 경우는 가능 합니다. 하나의 참조변수가 여러개의 인스턴스를 가리키는 경우는 불가능 합니다. 기본형 매개변수는 당연하다고 생각해서 어렵지 않았다. 하지만 참조형 매개변수는 메서드의 입력에 우리가 아는 기본형 변수를 입력하지
클래스는 객체를 생성하기 위해 필요 합니다. 객체를 사용한다는것은 객체가 가진 속성과 기능을 사용하는 것 입니다. public 클래스는 하나의 java 소스 파일에 하나만 존재 해야 합니다. public 클래스의 이름과 java 소스 파일의 이름이 같아야 합니다. (대
보통 출력할려고 할 때 println을 많이 사용 할 것 입니다. 하지만 println 의 단점이 있는데 이것은 출력형식을 지정할 수 없다는 것 입니다. 좀 더 구체적으로 단점을 알아보자면 1\. 실수의 자리수를 조절할 수 없습니다.그냥 실수 그대로 출력 된다는 말 입
인스턴스 생성 후에 메서드를 호출하고 싶을 때 참조 변수.메서드이름()으로 사용할 수 있다. 메서드 내에서 인스턴스 변수 사용 가능하고 인스턴스 멤버와 관련된 작업을 하는 메서드이다. 인스턴스 생성 없이 메서드를 호출하고 싶을 때 클래스이름.메서드이름()으로 사용할 수
가끔 리터럴의 개념이 모호해질때가 있다. 그래서 정리 해 보았다. 변수(Variable) 👉 하나의 값을 저장하기 위한 공간 상수(constant) 👉 한 번만 값을 저장 가능한 변수 리터럴(literal) 👉 그 자체로 값을 의미하는 것 코드에서 뭐가 변수,상수
한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것메서드 이름이 같아야 한다.매개변수의 개수 또는 타입이 달라야 한다.반환 타입은 영향이 없다. 위의 코드는 add 메서드를 오버로딩한 코드 입니다.위의 코드는 인스턴스를 생성하고 각각의 메서드를 호출해보는 코드와
인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드 입니다. 인스턴스 생성시 수행할 작업(인스턴스 변수 초기화)에 사용 됩니다. 생성자의 이름이 클래스 이름과 같아야 한다. 리턴값이 없다. 하지만 생성자는 이름 앞에 void 를 붙이지 않는다. 그 이유는 항상 반
지역변수는 수동 초기화 해야한다. 인스턴스,클래스 변수는 0,false,null등으로 자동 초기화 된다. 자동초기화 : 변수를 선언하면서 자동으로 초기화 간단초기화 : "=" 대입 연산자를 사용하여 초기화 복잡 초기화 : 초기화 블럭({}(인스턴스 변수 초기화 할때
기존의 클래스로 새로운 클래스를 작성하는 것을 상속이라고 합니다. 상속은 코드를 재사용 하는 것 입니다. 두 클래스를 부모와 자식으로 관계를 맺어주는 것 입니다. 상속으로 클래스를 작성하는 방법은 위의 코드처럼 작성 합니다. 자손은 조상의 모든 멤버를 상속 받는다.(생
상속받은 조상의 메서드를 자신에 맞게 변경하는 것선언부가 조상 클래스의 메서드와 일치해야 합니다. 접근 제어자를 조상 클래스의 메서드보다 좁은 법위로 변경할 수 없습니다. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없습니다. 오버로딩 : 기존에 없는 새로운 메서드
참조변수 super 객체 자신을 가리키는 참조변수, 인스턴스 메서드(생성자)내에만 사용 가능하고 static 메서드 내에서는 사용 불가 합니다. 조상의 멤버를 자신의 멤버와 구별할 때 사용 합니다. 참조변수 super java 예시 코드 부모,자식 클래스에 중복되는
서로 관련된 클래스의 묶음 입니다. 클래스는 클래스 파일, 패키지는 폴더, 하위 패키지는 하위 폴더 클래스의 실제 이름은 패키지를 포함 합니다. (예 : java.lang.String) 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언 합니다.같은 소스 파일의 클래스
클래스를 사용할 때 패키지이름을 생략할 수 있다. 원래는 클래스를 사용할때 패키지이름을 모두 적어야 합니다. 하지만 import 문을 사용하면 클래스를 사용할 때 패키지 아름을 생략할 수 있습니다.컴파일러에게 클래스가 속한 패키지를 알려주는 역할을 한다.여기서 의문이
👉 클래스 정의 대상 : public, default👉 인스턴스 변수와 메소드 대상 : public, protected, default, private👉 public : 어디서든 인스턴스 생성이 가능하다.👉 default : 동일 패키지로 묶인 클래스 내에서
사용할 수 있는 멤버의 개수를 조절하는 것을 말합니다.참조변수의 형변환은 조상,자손 관계일때만 가능 합니다. 참조변수의 형변환 가능여부 확인에 사용한다. 형변환이 가능하다면 true를 반환한다. 형변환 전에 반드시 instanceof로 확인해야 한다. 정리 :참조변수의
참조형 매개변수는 메서드 호출시에 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다. 조상타입의 배열에 자손들의 객체를 담을 수 있다.위 코드는 매개변수의 다형성을 이용해 Buyer 클래스에 buy 메서드의 입력 매개변수에 다형성을 이용하여 Product 클
미완성 설계도,미완성 메서드를 가지고 있는 클래스를 추상 클래스라고 한다. 다른 클래스 작성에 도움을 주기 위한 것, 인스턴스 생성이 불가능 하다.상속을 통해 추상 메서드를 완성(구현)해야 인스턴스 생성이 가능하다.미완성 메서드, 추상 메서드( {} 구현부가 없는 메서
추상 메서드의 집합을 인터페이스라고 한다.구현된 것이 전혀 없는 설계도. 모든 멤버가 public 이다.상수는 포함할 수 있다. 인스턴스 변수, 클래스 변수는 가질 수 없다.인터페이스는 아래와 같이 선언할 수 있다. 인터페이스 내에 추상 메서드는 public abstr
인터페이스에 디폴트 메서드 , static 메서드 추가 가능인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움. 이 문제를 해결하기 위한것이 디폴트 메서드이다.기존의 인터페이스 원칙을 변경한 것이다. 여러 인터페이스의 디폴트 메서드 간의 충돌 => 인터페이스를
클래스 안의 클래스 내부 클래스에서 외부 클래스의 멤버들을 쉽게(객체 생성 없이도) 접근할 수 있다.코드의 복잡성을 줄일 수 있다. (캡슐화)인스턴스 클래스외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스멤버처럼 다루어진다. 주로 외부 클래스의 인스
이름이 없는 일회용 클래스 입니다. 정의와 생성을 동시에 합니다. 아래의 코드는 익명 클래스의 문법 입니다. 익명 클래스는 위의 두가지의 문법이 있습니다.
컴파일 에러 : 컴파일 할 때 발생하는 에러 , 프로그램 실행이 안된다.런타임 에러 : 실행 할 때 발생하는 에러 , 프로그램이 실행되다가 종료 된다.논리적 에러 : 작성 의도와 다르게 동작 , 프로그램이 종료되지 않고 실행 된다. java의 런타임 에러에러 (erro
예외가 발생하면 예외 객체가 만들어진다. 객체의 타입은 발생하는 예외에 따라서 정해진다. 그 객체에 예외에 대한 정보가 들어있고 메서드들을 가지고 있다. 예외가 일치하는 catch 블럭 내에서 참조변수를 통해 발생한 예외 객체를 사용할 수 있다.예외발생 당시의 호출스택
연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다.Exception e = new Exception("예외 발생!);키워드 throw를 이용해서 예외를 발생시킨다. throw e; checked 예외 : 컴파일러가 예외 처리 여부를 체크(예외 처리(t
예외를 처리하는 방법 :try-catch문 사용 예외 선언하기,떠넘기기 은폐,덮기 (빈 catch 블럭을 사용하는 것), 무시하기메서드가 호출시 발생가능한 예외를 호출하는 쪽에 알리는 것 메서드를 throws를 통해 예외처리를 하지 못하고 던지다가 main 메서드한테
직접 예외 클래스를 정의할 수 있다. 조상은 Exception과 RuntimeException중에서 선택 Exception : 사용자가 발생시키는 예외 (필수처리, try-catch 의무 사용) RuntimeException : 프로그래머의 실수로 발생 (필수처리 아님
한 예외가 다른 예외를 발생시킬 수 있다. 예외 A가 예외 B를 발생시키면, A는 B의 원인 예외, 이 두 예외를 연결한 것을 연결된 예외라고 한다.여러 예외를 하나로 묶어서 다루기 위해서, 하나의 예외에 여러 예외를 포함시켜 한번에 예외를 던짐checked예외를 un
Object 클래스의 equals()는 참조변수가 같은 주소를 가지고 있는 판단해주는 메서드이다. 같으면 true 다르다면 false를 반환 합니다. 객체의 해시코드(hash code)를 반환하는 메서드, 해시코드 값 : 정수 값Object클래스의 hashCode()는
모든 클래스의 최고 조상이며 오직 11개의 메서드만을 가지고 있습니다.객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true,다르면 false을 반환한다.반환타입은 boolean이다.Object클래스의 equals()는 객체의 주소(참조변수 값)를 비
두개의 값을 비교하여 int형 값을 반환해주는 메서드 입니다.입력되는 매개변수 str과 사전순으로 비교하여 같으면 0 사전순으로 이전이면 음수, 이후면 양수를 반환 합니다.그럼 직접 코드를 작성해 결과를 확인해 봅시다. 위의 결과를 보고 그 의미를 모르시는 분들은 응?
자바에서는 문자열을 위한 클래스를 제공String 클래스는 문자열을 저장하고 이를 다루는데 필요한 메서드를 함께 제공 변경 불가능한
join()은 여러 문자열 사이에 구분자를 넣어서 결합하는 메서드이다.코드와 출력 결과를 보면 이해가 더 빠를것 입니다.
숫자 + ""String.valueOf(숫자)Integer.parseInt(문자열) // 타입마다 바꿔줘야함Integer.valueOf(문자열) // 모든 타입마다 사용 가능
String처럼 문자형 배열을 내부적으로 가지고 있다.그러나 String 클래스와 다르게 변경 가능하다.append() 메서드는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 자기 자신의 참조를 반환StringBuffer 클래스의 equla
StringBuffer와 차이점이 동기화되어 있지 않다.멀티 쓰레드에 안전하게 하는것이 동기화이다.싱글 쓰레드 : 한번에 1개 작업 하는 것 멀티 쓰레드 : 한번에 여러개 작업하는 것멀티 쓰레드 프로그램이 아닌 경우에는 동기화가 불필요한 성능저하를 가져온다. 이 때
기본형 값을 감싸는 클래스 8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스
여러 객체(데이터)를 모아 놓은 것을 의미한다.표준화, 정형화된 체계적인 프로그래밍 방식이다.(ex 스프링)컬렉션(다수의 객체)를 다루기 위한 표준화된 프로그래밍 방식컬랙션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공java.util 패키지에 포함다수의 데이터를
클래스가 설계도면 추상 클래스는 미완성 설계도 선언부만 있고 구현부가 없는 메서드 정리 : 일반 메서드가 추상 메서드를 선언부를 이용해 호출 가능 완성된 설계도가 아님. 인스턴스 생성 불가추상 클래스는 다른 클래스를 작성하는데 도움을 줄 목적으로 작성 됨. 클래스나 메
조상 타입의 참조 변수로 자손 객체 다루는 것참조변수의 형 변환,리모콘 바꾸기,사용할 수 있는 멤버의 개수를 조절 instanceof 연산자 : 참조변수의 형 변환이 가능한지 여부 확인 다형적 매개변수 하나의 배열에 여러종류 객체 저장
자바는 메소드 출처의 모호성 때문에 클래스를 통한 다중 상속을 허용하지 않습니다.동일한 목적 하에 동일한 기능을 수행하도록 강제하는 것이 인터페이스 역할 입니다. 인터페이스는 다중 상속을 지원 합니다. 추상 클래스에는 추상 메소드,생성자,일반 메소드,필드,를 포함 하는
모든 클래스의 조상인 object 클래스에는 두 객체가 같은지 비교합니다. 쉽게 말해서 두 객체의 주소가 같은지 비교하여 true 또는 false를 반환 합니다. 흔히 우리가 사용하는 equals()는 String 클래스에서 오버라이딩을 해서 문자열간의 비교가 가능해진
Map 인터페이스는 collection 인터페이스와 다른 저장 방식을 가지는 Map 인터페이스를 구현한 Map 클래스들은 Key 와 value 를 하나의 쌍으로 저장하는 방식을 사용합니다.Map이 배열과 리스트와 가장 다른점이라고 한다면 순차적으로 해당 요소값을 구하지
set은 list 와 다르게 데이터를 중복으로 저장할 수 없습니다. 또 순서가 없기때문에 list와 같이 인덱싱을 통해 값을 얻을 수 없습니다. set의 컬렉션을 구현하는 대표적인 클래스로는 HashSet, TreeSet, LinkedHashSet등이 있습니다. set
ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일하다. ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다.List 인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.데이터의 저장공간으로 배열을 사용한다.
위와 같이 ArrayList를 생성할때 괄호 안에 값을 왜 집어 넣어야 하지? 이런생각을 했다. 크기를 정하고 ArrayList를 생성해도 추가적으로 저장해야할 객체가 있다면 요소 추가가 가능했기 때문이다. 그럼 굳이 정해야 하나? ()에 아무것도 넣지 않고 생성해주
LIFO(Last In First Out)구조로 동작, 마지막에 저장된 데이터를 가장 먼저 꺼내게 된다. 배열로 구현하는게 유리스택은 클래스가 있어서 객체 생성 가능boolean empyty() : stack이 비어있는지 알려주는 메서드Object peek() : st
컬렉션에 저장된 데이터를 접근(읽기)하는데 사용되는 인터페이스Enumeration은 구버전이고 Iterator는 신버전이다.Listlterator는 Iterator의 접근성을 향상 시킨 것이다. 단방향에서 양방향으로 다음요소와 이전요소를 읽어올 수 있다.컬렉션에 저장된
배열을 다루기 편리한 메서드(static)를 제공 합니다.toString(배열) : 배열을 문자열로 변환해서 반환해주는 메서드copyOf(), copyOfRange() : 배열을 복사 해주는 메서드, 새로운 배열을 생성해서 반환copyOf(복사할 배열의 참조변수, 복사
객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용 합니다.Comparable : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용 합니다.int compare(Object o
순서가 없고, 값의 중복이 없다.Set 인터페이스를 구현한 대표적인 컬렉션 클래스순서를 유지하고 싶다면 LinkedHashSet 클래스를 사용하면 된다.TreeSet은 범위 검색과 정렬에 유리한 컬렉션 클래스이다.TreeSet은 데이터가 많을수록 데이터 추가, 삭제에
이진 탐색 트리(binary search tree)로 구현되어 있다. 범위 탐색과 정렬에 유리하다.이진 트리는 모든 노드가 최대 2개의 하위 노드를 갖는다.각 요소(node)가 나무(tree)형태로 연결(LinkedList의 변형)부모보다 작은 값은 왼쪽 큰 값은 오른
순서 없음, 키는 중복될수 없음, 값은 중복될수 있음Map인터페이스를 구현, 데이터를 키와 값의 쌍으로 저장한다.HashMap은 동기화가 되어있지 않음(최신), Hashtable은 동기화가 되어 있음(구버전)Map 인터페이스를 구현한 대표적인 컬렉션 클래스이다.순서를
컴파일시 타입을 체크해 주는 기능객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여준다.타입 안정성을 제공합니다. 지네릭스로 지정한 타입 이외의 타입이 저장되는것을 미리 차단할 수 있습니다.타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 집니다.클래스를 작성할
문자열과 문자열을 + 연산자로 합치게 되면 자바는 StringBuffer 객체를 자동으로 만들고 append() 메서드로 문자열을 합쳐주고 toString() 메서드로 문자열로 바꿔 반환해 줍니다. 한두번의 + 연산자로 문자열을 합쳐주는건 괜찮겠지만 반복문 등으로 많은
클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용한다.next() 메서드로 읽어올때 반환 타입이 Object라 형변환이 필요할때가 있지만 지네릭스로 타입을 대입해주면 형변환 해줄 필요가 없다.여러 개의 타입 변수가 필요한 경우, 콤마(,)를 구분자
하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능하게 하는 것이다.메서드의 매개변수에도 와일드 카드를 사용할 수 있다.지네릭 타입이 선언된 메서드(타입 변수는 메서드 내에서만 유효하다.)
쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.위의 코드는 t1,t2의 쓰레드를 생성한 후 start()를 호출한 코드이다.여기서 알아두어야 할것은 t1이 코드상 t2보다 먼저 start()를 호출했다고 해서 t1이 먼저 실행될 확률이 높지만
쓰레드에는 일반 쓰레드와 데몬 쓰레드가 있다. 데몬 쓰레드를 알아보자. 데몬 쓰레드 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행한다. 일반 쓰레드가 모두 종료되면 자동적으로 종료된다. 데몬 쓰레드의 예로는 가비지 컬렉터, 자동저장, 화면자동갱신 등에 사용된다. 무한
싱글쓰레드에서는 프로세스 내에서 단 하나의 쓰레드만 작업을하기 때문에 프로세스의 자원을 가지고 작업하는데 문제가 없다. 하지만 멀티쓰레드의 경우 같은 프로세스 내의 자원을 공유해서 작업을 진행하기 때문에 서로의 작업에 영향을 줄 수 있다.진행중인 작업이 다른 쓰레드에게