객체 선언 이란? :
다른 클래스에서 다른 클래스를 사용하려고 할 때 객체를 선언해서 사용할 수 있다.
객체지향이란? :
객체(Object)의 상태(state)와 행동(behavior)을 구체화하는 형태이다.
객체지향의 특징으로는 4가지 특징이있다. (캡슐화, 상속, 다형성, 추상화 등)
현실 세계의 객체 모델을 바탕으로 프로그램을 구조화하고 개발하는 프로그래밍 기법을 말한다.
캡슐화 : 1. 객체의 필드(속성)과 메서드를 하나로 묶고, 실제 구현 내용을 외부에서 감추는 것
2. 객체가 가지고 있는 데이터를 외부로부터 변질되지 않게 보호하기 위함이다.
상속 : 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 속성과 기능을 이용할 수 있음.
다형성 : 같은 이름의 메서드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것.
개념적으로 동일한 작업을 하는 메서드에 똑같은 이름을 부여하여, 코드의 중복을
줄일수 있음. 오버라이딩 과 오버로딩이 다형성의 대표적인 예시이다.
추상화 : 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는
기법이다.
변수 선언 :
void란 :
메서드 내에 return 되는 타입이 아무것도 없다는 것을 선언해주는 역할.
그러므로 결괏값을 되돌려주지 않음!! 만약, void가 선언되었는데 return 타입이 있다면, 오류가 발생한다.
메서드 Method :
클래스 변수 Cv:
객체 생성 없이 사용할 수 있다.
클래스 변수는 인스턴스 변수에 static을 붙이면 클래스 변수가 된다.
클래스 변수는 public을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됩니다.
인스턴스를 생성하지 않고 클래스 이름. 클래스 변수명을 통해서 접근할 수 있습니다.
클래스가 여러 번 생성되어도 Static 변수는 처음 딱 한 번만 생성됨.
초기화가 자동으로 된다.
인스턴스 변수 Iv :
객체 선언 후 - 참조 변수명. 변수명이
지역변수 Lv:
메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수입니다.
메서드가 실행될 때 메모리를 할당받으며, 메서드가 끝나면 소멸되어 사용할 수 없게 됩니다.
초기화를 안 하고 사용하면 오류가 발생한다.
기본 생성자 :
매개변수란 :
클래스 메서드 :
인스턴스 메서드:
참조 변수명. + 메서드명
Static 이란 :
3. 변수와 메서드 (★x 50개) :
변수와 메서드는 JAVA 프로그래밍에서 매우 중요한 개념입니다.
먼저 변수가 무엇인지에 대해 알아보자면,
●변수는 데이터를 저장하는 공간입니다. 우리가 사용하는 모든 데이터는 컴퓨터 메모리에 저장되어야 합니다.
변수는 이를 가능하게 해줍니다.
●예를 들어, 우리가 나이를 저장한다고 가정해보겠습니다. 그러면 "나이"라는 변수를 만들어서 거기에 값을
저장할 수 있습니다.
● JAVA에서 변수를 만들 때는 다음과 같이 타입과 이름을 지정해야 합니다.
int age; // int 타입의 변수 age를 선언
● 위 코드에서 int는 정수를 나타내는 데이터 타입입니다. 그리고 age는 변수의 이름입니다.
5-1 생성자(constructor) :
몇 가지 조건을 제외하고는 메서드와 같다.
모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
생성자는 여러 개 생성이 가능하다.
Card c = new Card();
5.2 생성자의 조건
생성자는 리턴 값이 없다. ( void를 사용하지 않는다. )
생성자의 이름은 class 이름과 같아야 한다.
생성자는 여러 개가 올 수 있다.(매개변수가 있는 생성자 & 매개변수가 없는 생성자)
- 기본 생성자 란 : 매개변수가 없는 생성자.
매개변수가 있는 생성자란? :
인스턴스
5.3 생성자에서 다른 생성자 호출하기 - this :
5.7 생성자를 이용한 인스턴스의 복사 :
* 객체 복사에는 얕은 복사(Shallow Copy)와 깊은 복사 (Deep copy)가 있다.
먼저 얕은 복사는 쉽게 말해 주소 값을 복사하는 것을 말한다.
상속이란:(단, 생성자와 초기화 블록은 제외.)
기존의 클래스를 재사용하여 새로운 클래스에서 사용할 수 있다.
- 서로 다른 클래스를 조상과 자손으로 관계를 형성하듯 맺을 수 있다.
기존 클래스 명과 새로운 클래스 명 사이 중간에 extends를 입력하여 상속관계로 만들 수 있다.
(*상속을 하는 경우는 극히 드물지만, 가끔 사용하기 때문에 알고 있어야 함.)
- 상속의 장점 -
클래스의 간결화 - 멤버의 중복 작성이 불필요
클래스 관리 용이 - 클래스들의 계층적 분류
소프트웨어의 생산성 향상 : 클래스 재사용과 확장이 용이함
* 클래스 안에 들어갈 수 있는 종류는 3종류가 있다 변수와 메서드
-클래스 간의 상속관계
- 포함관계 :
- 클래스 간의 관계 결정하기
* 포인트 클래스에는 점이하나
단일 상속 :
Java로는 단일 상속만을 허용한다, ( C++은 다중 상속 허용함)
object 클래스 :
- 모든 클래스의 최고 조상이라고 불린다. ( 굉장히 중요함 ★★★★★)
메서드 오버 라이딩:
* 쉽게 말해 상속받을 것을 재 정의하는 의미이다.
조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것이다.
상속일 때만, 오버 라이딩이 나온다.(* 추상 클래스를 많이 사용한다.)
메서드 오버 로딩 :
메서드 이름은 같고, 매개변수의 타입이나 개수가 다르다?
기존에 없는 새로운 메서드를 정의하는 것이다.
super - 참조 변수 :
상속받을 경우에만
parent(부모)를 가리킬 때 사용된다.
* 같은 Class 내에 다른 생성자를 호출하는 곳에는 super가 붙지 않는다.
this. -
this. 는 인스턴스 변수를 가리킨다.
앞에 this를 붙이지 않으면, 지역변수가 된다
패키지 :
클래스를 담아 놓는 폴더이다.
서로 관련된 클래스와 인터페이스의 묶은 폴더라 볼 수 있다.
패키지 안에는 여러 가지 클래스가 들어갈 수 있다.
impor문 : 패키 지명을 생략하기 위해 사용한다.
오버 라이딩 :
상속일 때만 나온다, 똑같은 이름과 메서드를 재 정의하는 것이라고 생각해보면 된다.
상속받은 메서드를 재정의하는 것, 상속 아닐 땐 해당 안됨.
제어자 : ★★★★★
제어자는 클래스, 변수, 메서드 생성자의 선언부에 각각 사용할 수 있다.
크게 접근 제어자 와 그 외 제어자로 나뉜다.
접근제어자 :★★★★★ 보안 때문에 생겼음, (캡슐화)
- 클래스와 , 메서드 , 변수, 생성자에 모두 다 붙일 수 있다.
- 외부로부터 데이터를 보호하기 위해 사용한다.
생성자의 접근 제어자 :
Singleton 패턴!!
private - 같은 클래스 내에서만 접근이 가능하다.
default - 같은 클래스 , 같은 패키지 내에서만 접근이 가능하다. (생략이 가능하다.)
( 앞에 아무것도 붙지 않은 클래스나 패키지가 디폴트다.)
protected - 같은 클래스, 같은 패키지 내에서 그리고, 다른 패키지의 자손 클래스에서 접근이 가능하다,
public - 접근 제한이 없다. 아무 데서나 모든 곳에서 다 사용할 수 있다.
그 외 제어자 :
static , final,
Class에 붙일 수 있는 접근 제어자는 public , default 만 붙일 수 있다. (그 외 제어자는 final , avstract 사용할 수 있다.)
그 외 변수나 메서드, 생성자는 모든 제어자를 사용할 수 있다. (public, protected,
제어자의 조합 :
1. 메서드에서는
2.
다형성 (polymorphism: ★★★★★
여러 가지의 형태를 가질 수 있는 능력
조상의 참조 변수로 자손의 객체를 다를 수 있다.
자손에서 선언된 것은 사용이 불가능하다
참조 변수의 형 변환 :
자손 타입에서 조상 타입은 형 변환 생략 가능 그러나 조상 타입에서 자손 타입은 형 변환 생략 불가
instanceof 연산자:
- 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자이다.
객체의 타입이 실제로 무엇인지 알아내거나 형변환이 가능한지 알아야 하는 경우,
instanceof 연산자를 사용합니다. // ( A(객체) instanceof B(타입 클래스) )
더 명확하게 이야기하자면, 자기자신의 클래스 객체인가? 자식 클래스의 객체인가? 확인하기 위해 사용한다.
instanceof 연산자는 자식 instanceof 부모 관계이면 true, 부모 instanceof 자식 관계이면 false를 반환합니다.
-참조 변수가 참조하는 인스턴스의 실제 타입을 체크하는 데 사용함.
-instanceof의 사용형식은 '객체 + instanceof + 클래스'이다.
ArrayList 란? :
추상클래스(abstract class) :
Class가 설계도라면 추상클래스는 '미완성 설계도'라 할 수 있다.
- 추상 메서드 : (미완성 메서드)를 포함하고 있는 클래스이다.
* 추상 메서드: 선언부만 있고 구현부(몸통,body)가 없는 메서드이다.
추상 메서드가 하나라도 포함되면 추상클래스가 된다. (추상 클래스가 되면, 상속받아 객체선언을해야한다.)
인터페이스(interface) :
일종의 추상 클래스라 할 수 있다. 추상 클래스보다 추상화 정도가 높다.
(* 구현이 되어있는 것이 하나도 없는 거라 볼 수 있다.)
관계가 없는데 관계를 맺어줄 때,이름의 통일성을 위해, 안 만들면 안 되는 걸 만들어야 할 때.. 등등
일 때, 인터페이스를 사용한다.
class파일 대신 interface파일을 생성해서 사용한다. 하지만 class파일 작성과 동일하다.
interface도 클래스처럼 상속이 가능하다. (class와 달리 다중 상속이 가능하다.)
interface는 최고 조상 클래스가 없다.
interface를 사용하기 위해서는 extends 대신 implements를 사용한다.
상속과 구현이 동시에 가능하다.
interface의 다형성 : 부모의 참조변수로 자손에 있는 클래스의 객체를 다룰 수 있다.
interface의 장점 :
1. 개발 시간을 단축시킬 수 있다.
2. 표준화가 가능하다. - (기획) (이름 통일)
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.
오버라이드(Override) :
부모 class에 있는 메서드를 자식 class에서 재정의 하는 것이다.
- 부모 class의 메서드를 자식 class에서 동일한 이름으로 다시 재정의 하면 부모 class의
메서드를 찾지 않고 자식 class의 메서드를 호출하게 되는데 이것을 ' 오버라이드 ' (재정의)라고 한다.
매개변수의 다형성 :
참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴트를 넘겨줄 수 있다.
String 클래스 : ★★★★★ (활용할 수 있는 게 무궁무진함)
String은 자기 자신을 더할 때에는 저장공간을 똑같은 타입의 공간을 새로 생성한다.
(new String이라는 객체를 사용하면 저장공간을 새로 생성하여, 새로운 공간에 저장을 한다.)
- 빈 문자열 -
String str = " ";은 가능해도 char c = " "; 불가능하다.
String 클래스의 생성자와 메서드 ★★★★★ 중요함!!!
contains() : 문자열에 특정 문자열이 포함되어 있는지 확인합니다.
(예시) String str = "Hello World"; boolean hasWorld = str.contains("World"); // true
endwide() : 문자열이 특정 문자열로 끝나는지 확인합니다.
(예시) String str = "HelloWorld.java"; boolean endsWithJava = str.endsWith(".java"); // true
indexOf () : 문자열에서 찾고자하는 특정 문자나 문자열이 처음으로 나타나는
인덱스를 반환합니다.
(특정 문자나 문자열의 위치를 찾거나, 존재 여부를 확인하는 등의
다양한 상황에서 활용 합니다.)
(예시) String str = "Hello World"; int index = str.indexOf("o"); // 4* 여기서 중요한 점은 결과값이, 4로 나왔는데... 그이유는
자바에서 문자열의 인덱스는 0부터 시작하기 때문에,
String str = "Hello World"; 에서
str.indexOf('o'); 의 결과는 4가 맞습니다. *
(예시) H e l l o W o r l d 0 1 2 3 4 5 6 7 8 9 10
lastIndexOf() : 문자열에서 특정 문자나 문자열이 마지막으로 나타나는 인덱스를 반환합니다.
(예시) String str = "Hello World"; int lastIndex = str.lastIndexOf("o"); // 7
length() : 문자열의 길이(문자 수)를 반환합니다.
(예시) String str = "Hello"; int len = str.length(); // 5
s. replace() : 문자열 내의 특정 문자나 문자열을 다른 문자나 문자열로 대체합니다.
(특정 위치의 부분 문자열을 다른 문자열로 대체할때 사용한다.)
(예시) String str = "Hello World"; String replacedStr = str.replace("World", "Java"); // "Hello Java"
s. trim() : 문자열의 앞뒤에 있는 공백(띄어쓰기,탭, 줄 바꿈 등)을 제거합니다.
(문자열(string)의 앞뒤 공백(whitespace)을 제거하는 메서드입니다.)
🚫 주의 : trim() :은 문자열에만 사용 가능하며, HTML 요소나 숫자에는 적용할 수 없습니다.<예시> String str = " Hello World "; String trimmedStr = str.trim(); // "Hello World"
컬렉션 프레임웍
인터페이스로 List, set,
List 인터페이스의 메서드 - (순서O , 중복 O) : ★★★★★
- get, remove, add,
hasNext , next
지네릭스(Generics)란 ?
컴파일 시 타입을 체크해 주는 기능이다. (compile - time type check) - JDK 1.5부터 가능
( 타입을 정할수있고, 형변환을 안해도 되는 이점이 있어서 많이 사용한다.)
(* 클래스 이름 옆에 <E> 표시가 붙어 있는 것이 지네릭스 클래스이다.)
(* <E>는 'E의 Box' 또는 'E Box'라고 읽는다.)
- 지네릭스의 장점 -
1. 타입의 안정성을 제공할 수 있다.
2. 에러를 조기 발견할 수 있다. (런타임에러를 컴파일에러로 변경)
3. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다.
어노테이션(Annotation) :
어노테이션은 주석이라는 의미를 가지고있다.
( * 자바 소스 코드에 사이에 @ 기호를 앞에 붙여서 사용하는데, JDK 1.5 버전 이상에서 사용 가능하다.)
입출력( I / O ) 과 스트림(stream)
입력(input)과 출력(output)을 줄여 부르는 말이다.
두 대상 간의 데이터를 주고 받는 것이다.
스트림(stream) :
데이터를 운반 (입출력) 하는데 사용되는 연결통로다.(연결통로가 있어야지만, 데이터를 저장할수있다.)
스트림은 입력(inputStream)과 출력(outputStream)을 하는 두 종류가 있다.
Vector
링크드
HashMap - 주요메서드
컬렉션 클래스
( 로또 맞추기 , 성적 출력 프로그램, 포커 카드 뽑기 , 랜덤 숫자 게임 ) 달달 외우기!! 따라 많이 쳐보기!!
컨트롤 시프트 엔은 자동완성 ( 목차부터 목차의 핵심을 외워라!!) (모듈 별로 외우기)