tip💡 mac의 finder에서 숨김 폴더 보기 command+shift+.
자바 기본 문법
Method
작성 방법
/* syntax */
modefiers returnType methodName(parameters) {
[return 가지고 나갈 값;] // [생략 가능]
}
- modefiers(0개 이상) 제한자
- access modefier 접근 제한자
- public 어디서나 아무나
- protected 폴더가 달라도 상속관계면 어디서나
- ( ) 같은 패키지라면 아무나
- private 하나의 객체 안에서만. 이걸 붙여주면 은닉=캡슐화
- 기타 제한자
- static 객체 생성 없이 접근
- final 상속, 오버라이딩 금지
- abstract
- syncronized
- default
- access modefier 접근 제한자
- returnType 반환 데이터타입
- void 리턴 값이 없다
- primitive type ex) int, double, char
- object type ex) String, 사용자 정의 클래스 데이터타입
- 리턴할 게 많다면 Array, Collections
- methodName
- 이름 규칙 camelCase
- parameter 매개변수
- datatype variableName
호출 방법
순서대로 확인
- static method
- ClassName.method([인수, ...]);
- ex) int i = Integer.parseInt(stringVarible);
- 레퍼런스 변수로 접근할 필요가 없다 cf) 2. 일반적
- 싱글톤 패턴에서 중요하게 쓰임
- 사용 여부와 상관 없이 메모리에 적재되므로 무분별하게 사용하면 메모리 낭비
- static 안에서 non static에 접근할 수 없음. this 쓸 수 없음. 메모리 공간이 다름.
// java.lang public final class Math { public static double random() { // 랜덤 숫자 반환 } } public final class Integer { public static int parseInt(String s) { // 정수 반환 } public static String toString(int i) { // 문자열 반환 } }
- 같은 클래스 내부 method
- this.methodName([인수, ...]);
- this ←→ super
- 나 ←→ 부모
- this.fieldName, this.methodName, this(값, ...) 생성자 구현부 첫번째 줄에서만 사용 가능
- super.fieldName, super.methodName, super(값, ...)
- 일반적
- 호출하려는 method를 감싸고 있는 class 생성(new)
- ClassName classVariable = new ClassName([생성자 전달값]);
- 생성된 객체 변수를 이용하여 method를 호출
- classVariable.methodName([인수, ...]);
- 멤버 변수만을 필드(속성)라고 한다 지역 변수는 그냥 변수
- 자바의 시작과 끝 main method
- public void main을 찾아서 거기서부터 시작됨.
- stack에 쌓임.
- 호출하려는 method를 감싸고 있는 class 생성(new)
Java file
한 파일 안에
- 여러 개의 class 작성 가능
- public class는 하나만 작성 가능
- public class는 반드시 파일명과 같아야 한다!
- public class 안에 main method 작성
- 시작하려면 main method가 반드시 필요
- 시작하려는 class의 이름으로 파일명을 지정하고 그 class 안에 main method 작성
- modefier는 public or (default)
- 모든 Java 객체는 Object를 상속 받는다
연산자
+ 산술 연산 또는 문자열 결합
5 + 2 -> 5(int)
"5" + 2 -> 52(String)
"2" + 5 -> 25(String)
"5" + "2" -> 52(String)
'5' + 2 -> 55(int)
'A' + 2 -> 67(int)
/* 연산하려면 최소한 4bytes의 공간이 필요하다 */
byte a=3, b=2; // -128~127
int c = a+b;
byte d = (byte)a+b;
+cf) 연산자 우선순위
Static
Class
클래스 앞에 static 불가. 단 inner class에는 가능.
class A { // outer
static class B { // inner
// class 관계 is Class, has Class 서로 자원을 전달하는 패턴을 만들어야 한다
// 자원 전달이 불편할 때 outer class의 모든 field(전역변수), method에 접근할 수 있다
// 자바는 객체지향(재사용)이 목적인데 이렇게 만들면
// 독립적으로 쓸 수 없다는 단점
}
}
cf) event(android)
Variable
지역변수
- method 내부
- 선언된 영역(method) 내에서만
- 제한자 불가
- 사용 전 반드시 초기화
전역변수 field
- class 내부
- 모든 method에서 접근 가능
- 제한자 가능
- 객체 생성 안하고 객체 이름으로 접근 가능
- 같은 class들이 공유하는 공유 변수
- spring
- DI 개념에 의해 모든 객체를 싱글톤으로 만든다. 사전 초기화.
- 기본인 만큼 많이 쓰인다.
- 메모리 관리 이점.
- 지역변수와 이름이 같을 때 구분 this.전역변수
- 생성 시점에 자동 초기화
- 0에 준하는 값으로 초기화됨
- int ⇒ 0 | double ⇒ 0.0 | char ⇒ ₩u0000 | boolean ⇒ false | String ⇒ null
Method
- 객체 생성 없이 ClassName.methodName([paramater, ...]);
- static method 안에서
- non-static method 호출 불가
- this 키워드 사용 안됨
Block
- 배포 시 사전 작업
- db 연결, 서버 작동, 사전 초기화 등 일련의 setting
- 문제가 생기면 프로그램을 실행하지 않도록
static {
System.out.println("static 먼저");
}
입력
Java 5.0 이후로 Scanner 제공
방대한 양의 데이터를 읽어낼 때 현저한 속도 차 ⇒ iostream 사용
반복문이 1억번 돌면 대략 1초
java.util.Scanner
Scanner sc = new Scanner(System.in);
sc.nextInt();
sc.next();
sc.nextLine();
다 지원해줘서 쉽다. 하지만 속도가 스트림을 이용하는 것보다 현저히 느림.
java.io.BufferedReader
InputStream → Reader → Buffered 가공. 다형성, 상속 관계일 때
- byte 단위
- InputStream
- OutputStream
- Inputstream ——> new InputStreamReader(InputStream is);
- 문자단위로 변환 필요
- 문자 단위
- Reader
- Writer
- InputStreamReader ——> new BufferedReader(new InputStreamReader(System.in))
- 한글처리 2byte
참고 링크
http://www.tcpschool.com/java/java_api_string
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Scanner.html
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/BufferedReader.html