1. 출력
public class HelloWorldApp {
public static void main(String[] args) { //main : method
System.out.println("Hello World!!");
}
}
Hello World!!
학교 다닐 때 처음으로 배웠던 간단한 출력 기능.
다시 배우고 있다.
학교 다닐 때 열심히 할걸 후회해도 지금 다시 열심히 하면 된다.
소스코드 이름을 직관적으로 짓자.
어떤 기능과 구현하려는 목적이 무엇인지 한눈에 파악할 수 있어야 한다.
💡class 이름과 맨 위 public class 뒤 이름이 같아야 한다.
2. 데스크탑 기능
//desktop App, 데스크탑이 뜨면서 "Hello World!!"가 뜬다.
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Toolkit;
public class HelloWorldGUIApp{
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("HelloWorld GUI"); //데스크탑 위 표시 될 이름
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //창 닫는 기능
frame.setPreferredSize(new Dimension(400, 300)); //데스크탑 가로세로 크기.
JLabel label = new JLabel("Hello World!!", SwingConstants.CENTER);
/*실질적 출력 화면.
*CENTER : Hello World!! -> 가운데 배치.
*CENTER -> RIGHT : Hello World!! 오른쪽 배치.*/
frame.getContentPane().add(label);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dim.width/2-400/2, dim.height/2-300/2);
frame.pack();
frame.setVisible(true);
}
});
}
}
구현한 프로그램들을 다 설명하자는 취지는 아님.
자바로 이런 것도 할 수 있다는 의미이다.
언젠간 저 코드들도 너무 쉽다고 느끼는 날이 오겠지?
보다보니 귀엽네
💡.java VS .class
.java | .class | |
인식 주체 | 사람 | 컴퓨터 |
💡자바 동작 원리
[사람 (.java) Java Source Code ] -> compile -> [자바 (.class) Java Application ] -> Run ->
[Java Virtual Machine ] -> Run -> Computer
*java virtual machine : java 설치 시 자동으로 설치됨.
3. 데이터 타입
public class Datatype{
public static void main(String[] args) {
System.out.println(6); //숫자 표현 : " " 없이 숫자 입력. (Number)
System.out.println("six"); //문자표현 : " " 필요. (String)
System.out.println("6"); //String 6 (숫자x)
System.out.println(6+6); //사칙연산, 결과 : 12 (Number)
System.out.println("6"+"6"); //문자 합치기, 결과 : 66 (String)
System.out.println(6*6); //사칙연산, 결과 : 36
//System.out.println("6"*"6"); : 문자열 data type은 곱셈 불가능
System.out.println("1111".length()); //1111의 길이 : 4
//System.out.println(1111.length()); : 숫자의 길이 알려주는 연산은 없음 (에러)
System.out.println("Hello World"); //String
System.out.println('H'); //Char : 문자 ' '
System.out.println("H"); //String 형
}
}
6
six
6
12
66
36
4
Hello World
H
H
String과 Char의 차이를 잘 구분해둬야 한다.
4. Operator (연산자)
public class Number {
public static void main(String[] args) { //main : method
// 연산자(Operator)
System.out.println(6 + 2); //사칙연산 결과 : 8
System.out.println(6 - 2); //사칙연산 결과 : 4
System.out.println(6 * 2); //곱셈 결과 : 12
System.out.println(6 / 2); //나눗셈 결과 : 3
System.out.println(Math.PI); //Math 함수 이용 -> PI값 구하기
System.out.println(Math.floor(Math.PI)); //floor : 내림
System.out.println(Math.ceil(Math.PI)); //ceil : 올림
}
}
8
4
12
3
3.141592653589793
3.0
4.0
Math function의 종류를 인식할 수 있는 날이 오겠지?
5. String
public class StringApp {
public static void main(String[] args) {
System.out.println("Hello World"); //String : 문자열, 문자가 모여 있는 것.
//System.out.println('Hello World'); : 자바 -> ' ' : 특수한 데이터 (Character / 문자, 한 글자)
System.out.println('H'); //Character
/* <따옴표의 차이>
* " " : String, 문자열 (Character들의 집합)
* ' ' : Character, 문자 */
/* System.out.println("Hello
* World");
* 위 경우처럼 무작정 띄어쓰면 에러 남.
*/
//new line (줄 바꿈 기능)
System.out.println("Hello "
+ "World"); //정상 실행. 하지만 줄 바꿈은 안됨.
System.out.println("Hello \nWorld"); //역슬래시+n (\n) : 줄 바꿈
//escape 기능
//System.out.println("Hello "World""); : 문자 중간 큰따옴표 추가 아무렇게나 하면 안됨.
System.out.println("Hello \"World\""); // \" 은 "을 출력되게 도와줌.
}
}
Hello World
H
Hello World
Hello
World
Hello "World"
띄어쓰기 방식과 \의 발견이었다.
6. StringOperation
public class StringOperation {
public static void main(String[] args) {
System.out.println("Hello World".length()); //몇 글자인지 알려줌, 띄어쓰기 포함
System.out.println("Hello, leezche ... bye. ".replace("leezche", "egoing"));
//leezche -> egoing으로 바꾸기
System.out.println("Hello, [[[name]]] ... bye. ".replace("[[[name]]]", "duru"));
System.out.println("Hello, [name] ... bye. ".replace("[name]", "duru"));
// [ ] 갯수는 크게 상관 없는 것 같다.
}
}
11
Hello, egoing ... bye.
Hello, duru ... bye.
Hello, duru ... bye.
7. Variable
//Variable : 변수 (값이 변할 수 있는 문자)
public class Variable {
public static void main(String[] args) {
//a=1; : 변수 이렇게 지정하면 안됨. 변수의 타입을 고려해야. Number -> integer(정수)
//integer : 1,0,-1 ...
int a = 1;
System.out.println(a); //output : 1
//int b = 1.1; : int는 정수, 1.1은 정수 아님 (실수) real number = double
double b = 1.1;
System.out.println(b); //output : 1.1
//c = "Hello World"; : 문자열이므로 String (문자열 타입)
String c = "Hello World";
System.out.println(c); //output : Hello World
//<자바 : 데이터 타입 지정 필수 이유>
//편리함 제공 (원인 : 컴퓨터가 값을 꺼낼 때마다 정수인지, 숫자인지 확인하지 않아도 됨)
//대신 사람이 변수의 타입을 지정해야 하는 번거로움이 있음.
}
}
1
1.1
Hello World
파이썬에서는 변수 값의 타입을 정해주지 않아도
a=1
print(a)
간단하게 작성만 해도 출력이 된다.
가만히 보니 파이썬은 콤마도 안찍는다.
자바는 변수명은 지정해줘야 되는 것은 물론,
output을 내야 할 때도 파이썬보다 코드가 길다.
int a=1;
system.out.println(a);
자바가 왜 복잡하게 변수명을 지정하냐면,
사람이 변수명을 지정해주면 컴퓨터가 나중에 변수의 타입을 찾지 않아도 된다.
컴퓨터 입장에서는 효율적인 업무 처리가 되는 것이다.
그래서 자바가 파이썬보다 더 거대한 서비스를 구축할 때 많이 사용된다. 복잡한만큼 안정적이기 때문이다.
물론 파이썬이라고 큰 서비스를 구축할 때 사용하지 않는 것은 아니다.
예를 들어 인스타그램은 파이썬을 이용한다.
한가지 분명한 것은, 자바를 공부하면 파이썬에 금방 적응할 수 있겠다는 점이다.
8. 변수의 효율성
public class Letter {
public static void main(String[] args) {
String name = "leezche";
//System.out.println("Hello, egoing ... egoing ... egoing ... bye");
/*egoing text들을 바꾸는 액션을 취해야 한다. (목표)
* */
System.out.println("Hello, "+name+" ... "+name+" ... egoing ... bye");
//변수의 이름을 통해서 '저기엔 이름이 들어가는구나' 추리 가능
double VAT = 10.0;
System.out.println(VAT);
/*변수 이유 :
* 그냥 System.out.println(10); 입력하면 10이 무엇을 뜻하는지 다른 사람들은 모른다.
* 입력값 10의 의미를 전달하기 위해 변수를 선언한다.
*/
//VAT(부가가치세)
//코드는 남이 봤을 때 정확하고 신속하게 의미를 파악할 수 있게 짜야 한다.
//변수를 통해서 효율적인 코드를 만들 수 있다.
}
}
Hello, leezche ... leezche ... egoing ... bye
10.0
잘 짠 코드
1. 남이 쉽게 알아볼 수 있음
2. 간결함
3. 가독성
변수는 내가 아닌 남이 이 코드를 봤을 때 쉽게 이해할 수 있도록 도와주는 매개채이다.
변수를 선언하는 것은 매우 중요하다.
9. Converting
//데이터 타입 변환
//자바는 변수의 데이터 타입을 엄격히 통제하기 때문에 변수값을 다른 데이터 타입으로 컨버팅해야 하는 경우
//Converting : '바꿔준다'
public class Casting {
public static void main(String[] args) {
double a = 1.1;
//int b = 1;
double b = 1; //1은 int 타입인데 double로 타입을 지정해줘도 에러가 나지 않음.
//double b2 = (double) 1; 과 위의 코드와 같은 의미이다.
System.out.println(b); //실행은 잘 되지만 아웃풋은 1이 아닌 1.0으로 나온다.
//정수의 값이지만 double형(실수)으로 컨버팅이 됨.
//잃어버리는 값이 없다.
//int c = 1.1; : 1.1을 정수형에 담으려하면 에러가 남.
//0.1을 잃어버리는 현상이 생길 수 있기 때문임.
//int c = 1.1;
/* int d = 1.1; : 1.1에 빨간 밑줄(에러 표시) ->
* Add cast to 'int'
* Change type of 'd' to 'double'
* 두 선택지가 나온다. 밑의 선택지를 클릭하면 아래와 같이 바뀐다.
*/
double d = 1.1;
System.out.println(d);
/*int e = 1.1; ->
* Add cast to 'int' 선택지의 의미는
* 실수값인 1.1을 int값으로 강제로 바꿔주겠다는 뜻이다.
*/
int e = (int) 1.1; //1.1을 강제로 int값으로 바꿈 -> output : 1
System.out.println(e);
//1을 String으로 바꾸려면?
//검색하면 된다. 검색하는 것은 매우 중요! 책과 강사로부터 독립해야 한다.
//java int to string casting 검색하면 많이 나온다.
//<int to String>
String f = Integer.toString(1);
//Integer값을 String으로 바꾸는 것.
System.out.println(f.getClass()); //getclass() : 변수값이 어떤 데이터 타입인지 알려줌
//f는 더이상 int형이 아닌 string형이다.
}
}
1.0
1.1
1
class java.lang.String
/*1
*class java.lang.String
*
*1은 String값으로 지정되었음을 알려주고 있음.
*/
(int a = 1.1; 기준) double형을 int로 바꾸면 손실값(0.1)이 있기 때문에
반드시 명시적으로 표현을 해야 한다.
사소한 것이라도 주석을 다는 습관을 가져야 겠다.
쓸데없는 주석은 달지 말 것.
직관적으로 간결하게 필요한 주석만 달 것.
주석을 잘 다는 습관이 중요한데 잘 모르겠다.
하다보면 늘 것이다.
💡 프로그래밍을 하는 이유
자동화 처리를 위해 !!
10. 디버거
bug : 코드 내 의도하지 않은 문제
debug (=debugging)
debugging : 문제를 잡는 행위
debugger : 문제를 잡을 때 사용하는 도구
1) 멈추고 싶은 코드 왼쪽 더블 클릭 -> 점 생김 (브레이크 포인터)
더블 클릭을 다시 하면 없어짐
: 버그 해결 및 코드 분석하고자 할 때 사용
11. IOT
집주소 입력 후 집에 들어갈 때마다
-엘레베이터 1층 도착 및 대기
-보안 모드 자동 off
-불 자동 켜짐
//IOT 작동 소스코드
import org.opentutorials.iot.Elevator;
//org 패키지 내 opentutorials 내 iot 내 Elevator 소스코드를 가져와서 쓰겠다는 의미.
public class OkJavaGoinHome {
public static void main(String[] args) {
String id = "JAVA APT 507"; //java 아파트 507이 주소
//Elevator call
Elevator myElevator = new Elevator(id);
//myElevator : 변수명, Elevator : 변수 타입
myElevator.callForUp(1);
//Security off
Security mySecurity = new Security(id);
mySecurity.off();
//Light on
Lighting hallLamp = new Lighting(id+" / Hall Lamp");
hallLamp.on();
Lighting floorLamp = new Lighting(id+" / floorLamp");
floorLamp.on();
}
}
11-2.
//IOT 작동 소스코드 2
//이사갈 때 id값 직접 수정 및 컴파일 : 복잡함
//프로그램 실행 -> 사용자의 주소 직접 입력 -> 아이디값 세팅식으로 바꾸기
import javax.swing.JOptionPane; //JOptionPane 기능 사용하기 위한 swing 기능 추가
import org.opentutorials.iot.Elevator;
//org 패키지 내 opentutorials 내 iot 내 Elevator 소스코드를 가져와서 쓰겠다는 의미.
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;
public class OkJavaGoinHomeinput {
public static void main(String[] args) {
String id = JOptionPane.showInputDialog("Enter your Address");
//JOptionPane는 우리가 사용할 수 없음.
//따라서 마우스 위에 올리고 import joptionpane 클릭하면 맨 위에 swing 기능 생김.
//showInputDialog : 사용자가 id 입력할 수 있는 창이 뜸.
String bright = JOptionPane.showInputDialog("Enter a Bright level");
//유저가 입력한 수치값은 string임. (double x) -> string을 double형으로 converting해야함.
//Elevator call
Elevator myElevator = new Elevator(id);
//myElevator : 변수명, Elevator : 변수 타입
myElevator.callForUp(1);
//Security off
Security mySecurity = new Security(id);
mySecurity.off();
//Light on
Lighting hallLamp = new Lighting(id+" / Hall Lamp");
hallLamp.on();
Lighting floorLamp = new Lighting(id+" / floorLamp");
floorLamp.on();
//입력값 여러개 한꺼번에 넣고 싶을 때.
//밝기 조절 가능한 램프 가정
DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
moodLamp.setBright(Double.parseDouble(bright)); //10%만큼 밝기
//setBright(brignt) = double형이 온다고 에러 남.
//parse : 분석하다.
//string bright값 -> double형 bright값 : 에러 x
moodLamp.on();
}
}
12. 패키지, 클래스, 변수, 메소드
package는 class를 groupping,
class는 variable, method를 groupping한 것이다.
13. 클래스는 무엇인가?
: 서로 연관된 변수와 메소드를 모아 이름을 붙이는 것.
package org.opentutorials.iot;
public class ClassApp {
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.floor(1.6));
System.out.println(Math.ceil(1.6));
//class : 서로 연관된 변수와 method들을 모아서 이름을 붙이는 것.
}
}
-> 여기서 Math는 class임. (Math라는 class 안 많은 수학 기능들이 있음. ex. PI, floor, ceil...)
14. 인스턴스
package org.opentutorials.iot;
import java.io.IOException;
import java.io.PrintWriter;
//printwriter는 java.io에 소속되어 있다
public class InstanceApp {
public static void main(String[] args) throws IOException {
PrintWriter p1 = new PrintWriter("result1.txt"); //PrintWriter의 복제본 만드는 것,p1 : 변수
//PrintWriter라는 클래스의 인스턴스만 들어간다는 뜻.
/*PrintWriter의 빨간색 밑줄
* Math : 특별한 조치를 사용하지 않아도 사용 가능
* printwriter : 자바에 내장되어 있긴 한데 패키지를 가져와야 사용 가능.
* -> import 작업 해줘야함.
*/
/*new printwriter쪽에 빨간색 밑줄 (import 적었음에도)
* 파일 없으면 문제가 있을 수도 있으니 예외를 어떻게 처리해야 할지 정해야 함.
* ->Add throws declaration 클릭
*/
p1.write("Hello 1");
p1.close();
PrintWriter p2 = new PrintWriter("result2.txt");
p2.write("Hello 2");
p2.close();
}
}
해당 코드 입력 후
왼쪽 Navigator -> Refresh 클릭
: result1.txt & result2.txt가 새로 생겼다.
인스턴스
: 짧은 맥락의 작업들 (system.out.println(math.pi);)보다 여러 개의 작업이 필요할 때
-> 하나의 클래스를 앞에 new를 붙여 복제해서 각각의 다른 상태를 가지고 있는 인스턴스를 만들어 사용하는 것이 효율적이다.
:클래스가 긴 맥락을 가지고 작업을 해야 한다면 인스턴스를 사용하는 것이 효율적.
:constructor가 없으면 일회용이다. (인스턴스 x)
https://docs.oracle.com/javase/7/docs/api/ 에서 확인 가능하다.
(google search : api documentation java)
:constructor가 있으면 인스턴스를 만드는 것이 허용되어 있다.
15. ingeritance (상속)
Ex)
java.lang.Object
java.io.Writer
java.io.PrintWriter
-> PrintWriter는 Writer를 상속받아 그 특징들을 물려받았지만 추가된 변수와 method들이 존재한다.
-> Writer는 Object를 상속받아 특징들을 물려받았으나 변수와 method들이 추가되었다.
[상속 관계 확인 방법]
class Object
class Writer extends Object
-> Object를 extends에서 확장해서 writer class를 만들었다는 뜻
class PrintWriter extends Writer
-> writer class를 확장해서 상속받아서 만든 것.
'[Language] > Java | Spring | JSP' 카테고리의 다른 글
[백준]2557: Hello World (0) | 2022.04.13 |
---|---|
[생활코딩]회계 앱 만들기_입출력 프로그램 추가 (0) | 2022.04.12 |
[생활코딩]회계 앱 만들기_기본 (0) | 2022.04.12 |
(Java) localhost:53124 error (0) | 2022.04.09 |
JAVA debugging (자바 디버깅) (0) | 2022.04.09 |