JAVA의 특징: JVM에 의해 실행되므로 플랫폼에 독립적.
JAVA의 기본
변수 작성 규칙
- $으로 시작해도 된다.
- 예약어 불가능
- 길이 제한 X
데이터형
Java Data Type
ㄴ Primitive Type(기본형)
ㄴ Boolean Type(boolean)
ㄴ Numeric Type
ㄴ Integral Type
ㄴ Integer Type(short, int, long)
ㄴ Floating Point Type(float, double)
ㄴ Character Type(char)
ㄴ Reference Type(참조형)
ㄴ Class Type
ㄴ Interface Type
ㄴ Array Type
ㄴ Enum Type
ㄴ etc.
기본형(32bit 기준)
- boolean: 1byte(true, false로 소문자다)
- char: 2byte(Unicode)
- byte: 1byte
- short: 2byte
- int: 4byte
- long: 8byte
- float: 4byte
- double: 8byte
정수형의 기본 타입은 int형이고 실수형의 기본 타입은 double이다.
long a = 10000000000; (Error), cos 정수형 기본 타입은 int이기 때문에 L을 붙여줘야 한다.float a = 12.45; (Error), cos 실수형 기본 타입은 double이기 때문에 F를 붙여줘야 한다.
참조형
ㄴ Class Type
ㄴ Interface Type
ㄴ Array Type
ㄴ Enum Type
클래스, 배열, 인터페이스, 배열, 열거형이 참조형이다.
이스케이프 문자
특수문자 |
표시법 |
tab |
\t |
backspace |
\b |
new line |
\n |
역슬래시(\) |
\\ |
작은따옴표 |
\' |
큰따옴표 |
\" |
유니코드(16진수)문자 |
\u유니코드(ex: \u0041) |
자동 형변환
byte -> short -> (char ->) int -> long -> float -> double
강제 형변환
(타입)변수명
상수
final 키워드
배열(참조형)
순차적으로
- 선언: int[] a;
- 할당: a = new int[3];
- 초기화: a[0] = 1; a[1] = 2;
선언+할당 동시에
int a[] = new int[];
한번에
int a[] = new int[]{1,2,3};
int a[] = {1,2,3};
2차원 배열
똑같다.int[][] a = new int[3][4];
배열의 길이: a.length
String 타입
Class로 만들어 놓은 데이터 타입
- 대문자 S로 시작한다.
- 참조형이다.
- 데이터를 넣을 때는 '큰 따옴표'로 데이터를 묶어 넣어준다.
String s = "HELLO~"
프로그램 매개변수
public static void main(String[] args) {}가 있는데 String[] args도 매개변수이기 때문에 프로그램 실행시 Arguments를 넘겨줄 수 있다.
연산자 종류 및 우선순위...
정올 공부하면서 외웠기 때문에 적지는 않겠음.
instanceof 연산자의 활용: (객체 instanceof 클래스명) -> boolean형을 반환, 상속관계도 따진다.
>>> 연산자는 >>이랑 비슷한데 앞에 비는 비트들을 0으로 채워준다.
분기문, 반복문
for, while, switch~case, if, 삼항 연산자 등 C/C++과 동일하므로 생략한다.
입력
Scanner 객체를 사용하는데 Scanner는 Java.util에 있다.
예시)
1 2 | Java.util.Scanner sc = new Scanner(System.in); int a = sc.nextInt(); |
next()는 빈칸때까지 입력 받는다. next타입()은 그 타입에 따른 것을 받는다. nextLine()은 한 줄 전체를 받는다.
Integer.parseInt() 요런 친구도 있다.
객체지향
객체지향 개념
실세계를 컴터 상 객체로 실현함으로써 문제를 해결하는 프로그래밍 기법. 객체는 실체(데이터)와 동작(절차, 방법, 기능)을 모두 포함.
객체
자신이 가지는 데이터와 그 데이터를 처리할 수 있는 행위(메서드)로 구성되는 하나의 단위.
클래스
객체를 베이스를 정의해 놓은 것. 객체를 생성하는 사용된다.
멤버 변수(속성)
(상태, 필드) : 객체의 정적인 특성을 표현
멤버 메소드(기능)
(행위, 함수) : 객체의 동적인 특성을 표현
OOP 특징
캡슐화: 멤버 변수 같은 중요한 정보들을 숨길 수 있다.
상속: 재사용성을 증대 및 폭넓게 사용 가능해진다.
다형성: 말 그대로 다양한 모습을 가질 수 있다. Overloading, Overriding을 통해 가능.
추상화: 실제로는 복잡한 것들을 필수적인 요소만 간추려서 class에 정의한다.
OOP는 메시지 전달로 이뤄진다.(?)
메시지 전달: 한 객체에서 다른 객체에 값을 전달하거나 메소드를 실행시킨다.
클래스 생성
- 선언: Car c1;
- 생성: c1 = new Car();
or
- Car c1 = new Car();
접근
c1.speed = 50;
c1.speedup();
컴파일
컴파일하면 클래스 개수만큼 [클래스명].class 파일이 생성된다.
생성자
1 2 3 | Car() { speed = 50; } |
- new 연산자와 함께 사용, 객체 생성 시에 호출
- 이름 = 클래스 이름, 첫 문자는 대문자
- 반환형 X, 매개변수는 0개 이상 가질 수 있다.
- 생성자를 안 만들면 JVM에서 알아서 디폴트 생성자 만든다.
- 생성자를 하나라도 만들었으면 디폴트 생성자는 사라진다.
this
this는 객체 자신을 의미하는 것이다.
생성자 오버로딩
생성자를 오버로딩하는데 매개변수 개수, 타입, 순서를 달리해서 정의하는 거다.
클래스 메소드(static 메소드)
- static 변수처럼 인스턴스와는 다른 공간에 메모리가 생성되어 사용된다.
- 클래스 매소드는 바로 사용이 가능하다.
- 클래스 변수(static 변수)만 사용하여 작성해야함.
클래스 변수(static 변수)
- new 객체();로 생성되는 것이 아닌 클래스가 로딩되는 순간 자동으로 생성
- 아무리 객체가 많이 생겨도 공통된 static 값을 가짐
- 클래스가 사라지기 전까지 메모리에 저장되어 사용
- static int tvNum = 0; 처럼 static 선언한다.
메소드 오버로딩
같은 클래스 안에서 동일한 이름의 메소드가 여러개 존재.
- 매개변수의 타입, 개수, 순서가 달리하는 것으로 구분한다.
메소드 오버로딩의 조건
- 메소드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입 또는 순서가 달라야 한다.
- 리턴타입만 다른 경우는 오버로딩이 되지 않는다.
접근 제어자
class에는 public/(default) 가능
변수, 메소드에는 public/(default)/protected/private 가능
- 생성자: 대부분의 생성자의 접근제어자는 클래스의 접근제어자와 일치 or public을 많이 사용
- 멤버변수: 캡슐화와 정보은닉을 위해 private을 사용
- 메서드: 접근을 위해 public을 많이 사용
private: 클래스 내부
(default): 클래스 내부, 동일패키지
protected: 클래스 내부, 동일패키지, 상속받은 클래스
public: 클래스 내부, 동일패키지, 상속받은 클래스, 모든 클래스
상속
- 기존의 있는 클래스의 멤버변수나 메서드를 물려받아 새로운 클래스를 만드는 것.
- OOP의 주요 특징인 코드의 재사용을 구현할 수 있다.
- 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외)
- 자손의 멤버개수는 조상보다 같거나 많다.
- 자바는 단일 상속만 지원한다.
※ 상속은 IS-a관계이다. 택시는 자동차이다(O), 자동차는 택시이다(X)
※ 사용법: extends
1 | Taxi extends Car {} |
상속, 생성자, super
- 자손은 조상의 생성자를 상속 받지 못한다.
- 조상의 default 생성자가 없으면 에러가 날 수 밖에 없다.
-> 해결 방법!
디폴트 생성자 추가, 또는 하위 클래스에서 super를 이용해 명시적으로 호출해준다.
super는 this처럼 조상의 객체를 참조할 수 있는 참조변수
super(); 처럼 사용한다.
super();은 생성자에서 항상 맨 첫 줄에 등장해야한다.
오버라이딩
- 조상클래스에 있는 메서드를 하위 클래스에서 동일한 이름으로 다시 정의하여 사용하는 것.
※오버라이딩 조건
- 상위 클래스 메서드의 이름, 매개변수, 반환형에 대해서 완전히 같아야 한다.
[public, protected, (default)] void speedUp() { /* 실행부분 */ } - static, final, private 메서드인 경우에는 오버라이딩 할 수 없다.
- [접근제어자]는 동일 범위거나 넓은 범위로 지정해야 한다.
조상의 메서드가 protected라면 protected나 public으로만 변경가능하다.
'개발' 카테고리의 다른 글
거듭제곱 빠르게 계산하기 (0) | 2018.05.07 |
---|---|
선형 구조의 탐색 (0) | 2018.05.05 |
삽입 정렬 - Insertion Sort (0) | 2018.05.03 |
자바 default 지정자는 패키지 private이라고도 한다. (0) | 2018.04.11 |
C# 프로그래밍 첫걸음(1) (0) | 2018.03.31 |
읽고 말하기 수열(개미 수열) C# 구현 (0) | 2018.03.31 |
댓글