class Main { //메인 클래스
public static void main(String[] args) { //메인 메서드
.대, 소문자 구별해야 된다.
들여쓰기 잘보기 (중괄호 당 탭 1번)
앞에 //를 쓰면 주석처리 되어 읽혀지지 않음
.마지막코드 앞에 ; 꼭 붙이기
println 에서 ln은 라인을 뜻한다. 라인을 바꾸겠다는 뜻
= 기준으로 왼쪽에 있으면 왼쪽에 있지 않으면 값이다.
출력
System.out.print()
소괄호 안의 내용을 단순 출력하는 것으로 줄 바꿈을 하지 않는다.
System.out.println()
소괄호 안의 내용을 콘솔에 출력하고 줄 바꿈(개행: \n)을 한다.
System.out.printf()
지시자(Specifier)와 플래그를 이용해 변수의 값을 여러 형식으로 출력할 수 있는 메서드이다. 즉, 어떠한 형식이 정해져 있고, 이에 맞추어 출력을 할 수 있다.
식별자
클래스 이름, 변수 이름, 메서드(함수) 이름 등을 지정할 때 개발자가 직접 입력시킨 이름을 식별자라고 합니다.
첫 문자는 영문자여야 합니다. _, $ 와 같은 기호는 첫 문자로 가능하지만 권장하지 않습니다.
자바는 대소문자를 엄격히 구별합니다.
공백 문자는 사용할 수 없습니다.
자바언어에서 특별한 의미를 가지는 식별자인 예약어는 이름으로 지정할 수 없습니다.
데이터 형 (Date Type)
기본 데이터 형 (PDT: Primitive Data Type)
논리형 - boolean
문자형 - char
정수형 - byte, short, int, long
실수형 - float, double
참조 데이터 형 (RDT: Reference Data Type)
8개의 기본형에 속하지 않는 모든 데이터 형
(1) 논리형 - boolean
boolean은 반드시 소문자 true, false 값만 가질 수 있습니다.
(2) 문자형 - char
char는 하나의 문자를 가지며, 내부적으로 데이터를 정수형으로 저장합니다. 따라서 문자를 이용한 연산이 가능합니다. 자바에서는 하나의 문자를 작은따옴표로 묶어야 합니다.
문자열은 기본형이 아닌 참조형입니다. 문자열은 연산 불가능합니다. String이라고 하며 큰따옴표로 묶어야 합니다.
ex) String str="JAVA";
(3) 정수형 - byte, short, int, long
기재된 순서대로 저장할 수 있는 데이터의 범위가 커집니다. int가 기본형이며, long형을 표현할 때는 L 또는 l을 정수값 뒤에 붙여 기본형과 구분해 주어야 합니다.
(4) 실수형 - float, double
실수형은 소수점을 가진 숫자를 의미합니다. double이 기본형이므로 float의 경우 F 또는 f를 실수값 뒤에 붙여 구분해 주어야 합니다.
#자바 연산자
Ctrl + D : 한 줄 삭제
Ctrl + Alt + Up(Down) : 한 줄(블럭) 복사
Ctrl + Shift + F : 코드 자동 정리
Ctrl + S : 저장
Alt + Up(Down) : 위(아래)줄과 바꾸기
syso 입력한 후 Ctrl + Space : System.out.println(); 자동 입력됨
main 입력한 후 Ctrl + Space : main 문이 자동 완성
개발자가 작성한 코드를 조건에 따라 코드의 실행 흐름을 다르게 동작하도록 제어하는 것
객체 => 폴더 => 여러개의 파일
관련있는 데이터
주체 : 내(실체)가 나(실체)를 가리킬 때
객체 : 내(실체)가 다른거(실체) 가리킬 때
변수에는 오직 값 1개만 넣을 수 있다.
프로그래밍을 하다보면 변수에 값을 여러개 넣을 필요가 있을 때가 있다.
그래서 고안된 것이 객체이다.
변수에는 오직 1차원적인 값만 저장 할 수 있다.
5
3.14
'a'
true
객체
런타임에러(runtime) : 동작과정
컴파일타임(Compile Error) : 문법과정
(참조 타입)
속성(상태,단순 데이터) - field (변수) 명사
기능(행동,실행 데이터) - method (함수) 동사
class 안에다가
ex) void() {
}
하면 메소드 생성.
지역변수 : 지역공간, 메서드 내부
전역변수 : 전역공간, 메서드 외부
매개변수 : 매개체
void 자리에 int, double, boolean 같은 타입이 올 수 있음. void(return type) : return 하지 않겠다.
void가 아닐시 반드시 return 해야된다.
return이랑 타입이랑 맞아야한다.
{ } : method body
함수의 종료시점은 return statement 부분. return이 없으면 } 부분
is로 시작하는 함수명은 관례적으로 타입이 boolean **
같은 package 있으면 서로 다른 클래스가 공유된다 **
oop 특징중 하나이다.
다중 상속은 불가능하다. **
그러나 부모 클래스가 interface 클래스면 다중 상속이 가능해진다. => 다중 구현
순도 100% 추상 메서드만 가지는 추상 클래스 : interface 클래스를 만들면 그 안에 있는 메소드가 전부 abstract 인 추상 메소드라 메소드에 abstract를 안써도 된다. 하지만 필수는 아니다.
대신 물려받은 클래스의 메소드는 무조건 구성을 해야된다.
부모클래스가 interface면 물려받는 클래스에 extends 대신 implements를 써줘야하고 메소드마다 public을 무조건 붙여줘야한다.
abstract 추상 메서드, 추상 클래스를 만드는 키워드 -> 메서드 바디가 없어지기 때문에 구현을 못함 -> 의도 : 건드리지마(버튼용)
생성자는 반환값이 없지만, 반환 타입을 void형으로 선언하지 않습니다.
생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있습니다.
객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있습니다.
즉, 생성자도 하나의 메소드이므로, 메소드 오버로딩이 가능하다는 의미입니다.
부모클래스와 자녀클래스 둘다 생성자가 있으면 부모클래스부터 생성자가 실행된다. (순서대로 생성자 실행)
한 클래스에 생성자가 여러개면 지정한 한 개의 생성자만 실행된다.
static 변수는 객체마다 존재하지 않는다. (클래스 내부에만 존재)
객체에 대한 완벽한 이해(그림으로 그리며 어떻게 연결되는지 100% 파악하기)
자바 기본 타입 모두 외우기 (조금씩 헷갈림)
기본 타입말고 많이 쓰는 참조형 그리고 scanner 외우기
코드 만드는 실력부족(코드잇 기타 코딩문제 많이 풀기)
참조타입들은 4~8 bytes 크기
class 사람{
private int id;
public void setId(int id) {
this.id = id;
}
}
private의 변수(field)명이 id 일 때, 메서드가 set변수명이 되어야한다. (setter)
private 값을 가져오려면 굳이 메서드를 만들어서 가져와야한다. (다이렉트로 안됨) (getter)
마우스 우클릭 Source + Generates Getters and Setters
객체 끼리의 비교는 (==)를 쓸 수 없다.
객체끼리에서의 비교는 equals 메서드(기능)를 쓰면된다. *동등성
String s1 = "하하";
String s2 = "하하";
String s1 = new String("하하");
String s2 = new String("하하");
를 하면 재활용하는 방식이아니라 생성방식이라 s1==s2는 false가 나온다.
이러는 이유는 자바에서는 메모리 절약을 위하기 때문에 재활용 방식을 사용한다.
String 불변성
int n1 = Integer.parseInt(Input[0]);
예시
명언 앱 만들기 (~~~ 프로그램 만들기)
오탈자 주의
git config user.name -> 확인용
git config user.email
git config --global user.name "userName" -> 덮어쓰기
git config --global user.email "userEmail"
연동 -> 폴더에 최초 한 번만
git init
git remote add origin 원격 리포지터리 주소
vim .gitignore
i(키보드) 입력 ->
.classpath
.project
.settings
bin
build -> esc -> :wq! enter
업로드 -> 매 업로드시 반복
git add .
git status
git commit -m "commit msg"
git push origin master
"??".trim(); -> 좌우 공백을 없애줌
String content = sc.nextLine().trim();
비전공자를 위한 이해할수 있는 IT지식
Clean Code 클린 코드
ctrl + shift + s 전체 저장
1~5
명령의 흐름은 수직적일수록 좋다
통신 채널은 적을 수록 좋다
리팩토링, 구현 **매우 중요
삭제?id=4&author=김철수 --> cmd
[삭제?id=4&author=김철수] --> cmdBits
cmdBits[0] -> 삭제 -> actionCode
cmdBits[1] -> id=4&author=김철수
params -> Map
paramBits -> [id=4, author=김철수]
for each문
첫번째 : paramStr -> id = 4
paramStrBits -> [id,4]
key -> paramStrBits[0] -> id
value -> paramStrBits[1] -> 4
param -> [{"id":"4"}]
두번째 : paramStr -> author=김철수
paramStrBits -> [author,김철수]
key -> paramStrBits[0] -> author
value -> paramStrBits[1] -> 김철수
param -> [{"id":"4"}], [{"author":"4"}]
6~14
**로직 기억하기
15~18
이 프로젝트에서의 각 클래스에 대한 역할 요약
package com.ws 로 묶여서 다른 클래스여도 임포트할필요가 없다
App : 라우팅, 고객이 올바른 컨트롤러를 만나도록 교통정리
Controller : 본인이 맡은 주제와 관련된 고객의 요구사항을 듣고, 처리 후 응답처리를 할 때, 본인이 판단하지 못하는 것은 서비스에 물어보는게 원칙식당에서 점원의 역할이라고 보면 된다. 고객을 만나서, 그들의 요청을 받고 처리해준다.
Service : 핵심로직을 담당한다. 서비스는 오직 컨트롤러의 요청에 의해서만 일을 한다. 식당에서 메인 요리사의 역할이라고 보면 된다.
Repository : 데이터의 저장/조회를 담당한다.리포지터리는 오직 서비스의 요청에 의해서만 일을 한다.식당에서 재료담당 요리사의 역할이라고 보면 된다.
DB : 데이터의 영속저장/조회를 담당한다. 보통 외부 프로그램으로 작동한다. 즉 개발자가 DB 프로그램을 구현하는 일은 없다. 이미 구현되어 있다. 주로 MySQL, Oracle 과 같은 제품이 많이 사용된다. 식당에서 재료창고 관리자의 역할이라고 보면 된다. DB는 오직 리포지터리의 요청에 의해서만 일을 한다.
기존에 비슷한 코드가 있는 것 같으면 활용할 수 있는 능력 키우기
프로그램에서 모듈들의 응집도는 높을수록 좋고 결합도는 낮을수록 좋다.
CRUD
Create(생성), Read(읽기), Update(갱신), Delete(삭제)
인증 -> 하루에 한 번만(학원), 한 번만(집)
git config user.name -> 확인용
git config user.email
git config --global user.name "userName" -> 덮어쓰기
git config --global user.email "userEmail"
연동 -> 폴더에 최초 한 번만
git init
git remote add origin 원격 리포지터리 주소
vim .gitignore
i 입력 ->
.classpath
.project
.settings
bin
build -> esc -> :wq! enter
업로드 -> 매 업로드시 반복
git add .
git status
git commit -m "commit msg"
git push origin master