프로그램 : 시간 순서에 따라 어떤 비슷한 성격을 가진 일들이 일어나는 것 (들어오는 입력 정보를 처리해서 출력을 만들어내는 기계)
자동화의 열쇠가 프로그래밍이다!!
우리의 목표: 자바라는 컴퓨터 프로그래밍 언어의 문법에 맞게 코드를 작성해서, 우리가 컴퓨터에게 시키고 싶은 일을 시키는 것!!
자바의 동작 원리

원인을 가리키는 소스 source, 코드 code, 언어 language
결과를 가리키는 애플리케이션 app, 프로그램 program
컴파일 compile = 기계가 .java파일을 이해할 수 있도록 .class파일로 전환하는 작업/ 이클립스에서 소스코드를 작성하고 저장 버튼 누르면 자동으로 이루어짐
확장자가 .class인 파일 => 자바 애플리케이션
데이터 타입을 구분하는 이유는 데이터의 타입별로 해당 타입에 어울리는 연산이 있기 때문!
public class Datatype {
public static void main(String[] args) {
System.out.println("1111".length()); //4
System.out.println(1111.length()); //ERROR
}
}
숫자와 연산
연산자 (operator) : 더하기, 빼기, 곱하기, 나누기
public class Datatype {
public static void main(String[] args) {
System.out.println(6+2);//8
System.out.println(6-2);//4
System.out.println(6*2);//12
System.out.println(6/2);//3
}
}
Math 클래스 : 수학과 관련된 자주 사용되는 것들 모아높은 캐비닛
System.out.println(Math.PI); //3.14159265368979
System.out.println(Math.floor(1.1)); //1.0
System.out.println(Math.ceil(1.1)); //2.0
문자열의 표현
public class StringApp {
public static void main(String[] args) {
// 작은 따옴표 Character VS 큰 따옴표String
System.out.println("Hello World"); // String
System.out.println('H'); // Character
System.out.println("H");
// new line
System.out.println("Hello \nWorld");
// escape
System.out.println("Hello \"World\"");// Hello "World"
System.out.println("Hello World".length()); // 11
System.out.println("Hello, [[[name]]] ... bye. ".replace("[[[name]]]", "duru"));
}
}
*이스케이프한다(escape) => 역슬래시를 통해 그 뒤에 따라오는 어떤 문자를 임무에서 일시적으로 해방시키는 것
데이터 타입의 변환 (casting)
:데이터 타입을 다른 데이터 타입으로 변환하는 방법
데이터 타입을 바꿔서 손실이 있다면 반드시 명시적으로만 변환해야 한다
int e = (int) 1.1;
System.out.println(e); //1
검색 키워드 (정수를 문자열로 바꾸고 싶을 때)
"java int to string casting"
변수의 데이터 타입 확인하는 방법
// 1 to String
String f = Integer.toString(1);
System.out.println(f.getClass());
자바에서 변수를 만들 때는 변수가 어떤 데이터 타입을 담을 수 있는지 명확하게 표현해야 한다
integer 정수 : 0과 음수를 모두 포함한 ...-2 -1 0 1 2 ...와 같은 숫자
double 실수 : 소숫점 포함해 무한히 많은 숫자
String 문자열
데이터 타입을 지정해야 하는 이유
: 변수 안에 어떤 값이 들어 있다면 그 변수 안에 있는 값은 반드시 정수이거나 문자열인 것을 확신할 수 있다. 따라서 꺼낼 때마다 변수 안에 담긴 값이 정수인지 문자열인지 확인할 필요가 없다는 편리함이 있음!!
변수의 효용
코드를 봤을 때 그 코드의 의미를 빨리 파악할 수 있도록 작성하는 것이 정말 중요!!
그때 사용하는 가장 중요한 수단 중 하나가 변수이고,
변수는 값에 이름을 부여하는 것이며 좋은 이름을 써야 한다
나의 애플리케이션을 만들기 위해서는 우선 생각 정리를 해야한다
'내가 지금 하려고 하는 일이 무엇이고'
'이 일을 하기 위해서는 어떤 이리 시간 순서에 따라 일어나야 하는지'
퇴근 5분전에 미리 실행시키면 내가 해야하는 일을 자바가 자동으로 해줌
//엘리베이터 호출해주기
//홈 시큐리티 꺼주기
//거실 불 켜주기
//보일러 켜주기
버그(bug) : 우리가 작성한 코드의 어떤 의도하지 않은 문제
디버깅(debugging) : 버그를 잡는 행위
디버거(debugger) : 디버깅을 할 때 사용하는 도구
코드에 어떤 문제가 있거나 이 코드를 분석하고 싶을 때 디버거 사용
1프로그램이 실행되는 것을 일단 멈추기
: 실행을 멈추고 싶은 위치의 왼쪽 부분을 더블클릭 (breakpoint)
2실행 버튼 왼쪽의 벌레 모양 버튼 클릭 (디버거를 통해 프로그램 실행)
3퍼스펙티브 switch
4 step over 버튼 : 명령어 하나만 실행하는 버튼
( 디버거를 통해 코드를 한 줄씩 실행 & 변수 상태 체크)
5 resumeq 버튼 : 다음 브레이크 포인트가 나올 때까지 한 번에 쭉 실행하는 버튼
6 step into 버튼 : 메서드가 어떻게 작성돼 있는지 알려주는 버튼
7 step return 버튼 : 이전으로 돌아가게 해주는 버튼 (메서드 바깥쪽으로 나가게 해줌)
8 terminate 버튼 : 디버거 종료
9 J라고 적히 자바 버튼 클릭해, 자바로 콛ㅇ할 때 편리한 퍼스펙티브로 돌아가기
tip) 코딩할 때는
-코드를 작성하고 해당 코드에 적절한 값이 들어왔는지 늘 확인해야 한다.
-디버거로 브레이크 포인트를 설정해서 단계별로 체크해나가야 한다.
프로그래밍을 배울 떄 밟아야 할 중요한 과정 중 하나는 어떤 입력이 있고, 그 입력을 어떻게 프로그램 안으로 끌고 들어올 수 있는가를 익히는 것이다.
입력값 주는 법
Run Configurations 의 Program arguments란에 입력값 설정
띄어쓰기로 각 값을 구분하게 된다 / 이때 입력값을 작은따옴표로 묶으면 작은따옴표 안의 문자열은 한 덩어리로 인식
입력값 받는 법
args 변수에 사용자가 입력한 값이 들어온다.
여러개의 값이 들어오니까 String[]사용
매개변수; 프로그램을 사용하는 사람과 이 프로그램 사이에서 값을 매개해준다; args변수
API (Application Programming Interface)
: 자바가 기본적으로 제공하는 부품들을 조작하는 방법
: 우리가 만든 프로그램이 우리의 프로그램을 사용하는 다른 프로그램에게 api를 제공해야 한다.
UI (User Interface)
: 사용자가 프로그램을 조작하기위해 사용하는 조작 장치

자바의 공식 사용 설명서
api documentation java
패키지 : 서로 연관된 비슷한 성격의 클래스를 모아서 이름을 붙인 것
클래스 : 서로 연관된 변수와 메서드를 모아서 이름을 붙인 것

프로그래머의 바람직한 자세
코드를 작성하기 위해 검색을 통해 어떤 클래스가 필요한지를 알아내고,
클래스를 사용하는 예제를 찾아보고,
그래도 이해가 안가는 내용이 있다면 API 문서를 분석해서
시간이 오래 걸리더라도 사용법을 알아내야한다><!!!!
tip
예외를 배우거나 전문적인 소프트웨어를 만들기 전까지는 문제가 생기면
Add throws declaration 클릭
: 일회성에 그치는 작업이 아니라 여러 가지 후속 작업이 필요할때 또는 여러 작업이 동시에 이뤄져야 할때는
하나의 클래스를 사용하기보다, 클래스 앞에 new를 붙여서 복제한 후 각기 다른 상태를 가지고 있는 인스턴스를 만들어 사용하는 편이 효율적이다!!
API 문서에서
constructor가 없는 클래스는 일회성으로 사용되는 클래스!
constructor가 있다는 것은 생성자를 이용해 인스턴스를 만드는 것이 허용되는 클래스!!
정리) 어떤 클래스를 사용할 때 그 클래스를 만든 사람이 클래스를 인스턴스로써 활용하기를 원한다면 클래스에 생성자가 있을 것이고, 이 경우 생성자 앞에 new를 붙이면 된다!
그럼 클래스가 복제되어 인스턴스가 되고,
인스턴스에 어떤 값이 올 수 있느냐를 규제하기 위해 변수명 앞에 클래스 이름을 적는다!
어떤 기증을 만들 때 처음부터 끝까지 다 만드는 것은 어렵기 때문에 이미 있는 클래스가 갖고 있는 변수와 메서드를 그대로 물려받으면서 자기가 원하는 변수와 메서드를 추가해서 만든다!
해당 클래스가 어떤 상속 관계를 가지고 있는지 살펴보는 방법
: 클래스에 마우스 오른쪽 버튼 클릭
-> Open Type Hierarchy 클릭
java.lang.Object
java.io.Writer
java.io.PrintWriter

자바에서 가장 기본적인 클래스는 Object클래스
자바의 모든 클래스는 Object클래스를 반드시 상속받는다!
class writer extends Object
; Object를 확장해서(상속받아서) writer클래스를 만들었다!
오버라이드(overrid); 상위 클래스의 메서드 덮어쓰기