재밌고 어려운 IT를 이해해보자~!
JAVA, Class, 함수, 디버깅표 본문
혼자만의 공부시간이 끝나고~~~~~~ KoreaIT아카데미 에서 진행하는 Spring 기반 핀테크 개발자 양성과정을 듣게 되었다!
간단한 OT를 끝내고 바로 수업을 진행해주셨다.
JAVA 란 ?!
객체 지향 언어이다.
C언어가 문제해결 파이썬이 채팅형 언어라면
자바는 하나의 틀을 만들어 뭘 넣는지에 따라서 편하게 변할 수 있는 틀을 제공하는데 특화되어있다.
한국은 자바공화국이라고 불릴만큼 자바를 많이쓴다고한다 !
Class
자바의 기본단위로 Class라는 녀석이 있는데 Class는 자바의 기본단위이며 이게 바로 객체를 생성하기 쉽게
도와주는 것이다.
Class 가 있으면 객체를 찍어낼 수 있다. (비슷한 느낌으로 붕어빵틀이 있으면 붕어를 찍어낼 수 있다.)
자바의 파일단위는 다음처럼 이루어진다.
.java ---> .class 이 클래스파일은 프로그램이 실행시 활용.
유저는 .java파일을 작성하고 개발도구(이클립스)로 컴파일 (번역) 해서 .class 을 만든다.
자바 클래스는 무조건 대문자로 시작!
자바프로젝트의 하위구성단위는 다음과같다
project -> package 모음
package -> class 모음
class -> 자바의 기본단위~
프로그램은 항상 main에서 시작한다!
즉 프로그램은 실행한다 == main 함수를 실행(호출)한다.
함수
함수(메서드) 는 input,output 기능을 가지고있으며
어떤 입력이 있을때 기능을 통과해서 출력물을 내놓는다. ( ) 가 있으면 함수이다.
public키워드는 전부공개를 뜻해서 어디서든 참조할 수 있게 해준다.
(private -> 외부에서 접근불가, protected -> 같은 클래스, 패키지에서만 접근가능)
static키워드는 "객체와 무관하게" 라는 뜻으로 객체를 생성하지 않고 호출할 수 있도록 해준다.
void는 없다는 뜻 void함수는 output이 없다. (return될 것이 없다)
자료형
자바는 다양한 자료형 (데이터타입) 이존재하며 그중 String은 특이하다.
package day001;
public class Test03 {
public static void main(String[] args) {
//데이터 유지 =< 저장공간
int a=10; //정수
double b=3.14; //실수
//char c='a'; //단일 문자
String d= "apple";
boolean e= true; //T/F
// 데이터 타입 == 자료형
// 변수를 선언, 정의
// 자료형 변수명=데이터, 값,value;
int cnt=28;
Integer cnt1 = 30;
// 변수명(함수명처럼) 역시 가독성이 좋게 지어주어야함!!!
// 원시타입
// 원래 JAVA에 없던 것
// C언어가 사용중인 자료형이었는데...
// JAVA가 야 우리도 쓰자~~~~~~~~해서 만든 키워드
Integer i1=new Integer(10);
int gaesu=10;
// Integer,Double,Boolean,Character,String,...
// 클래스 == 자바의 기본단위
// 변수명(함수명처럼) 역시 가동성이 좋게 지어주어야함!!!
// C에는 String 문자열 타입이 없어서... 원시타입이 안됨
// 그래서 그냥 JAVA에서 만든 String 클래스 사용중
//그냥 변수임
// 변수중에서... 값이 절대로 바뀌면 안되는 값이 있어요
final double PI= 3.14159; // 원주율이니까 바뀌면 안됩니다!!!!!!!!
// 변하면 안되는 값 == 상수값
// 변수를 상수화하는 키워드 final
System.out.println(PI);
System.out.println(PI);
}
}
위 코드에 String만 다른색을 띄고있는데 그 이유는 String을 제외한 것들은 원시타입으로 객체지향형 언어인 자바에서
변수를 더편하게 선언하기 위해서 C에서 가져온 것들이다. 하지만 C에는 String (문자열) 타입이 없어서 String은 클래스를 그대로 가져다 쓰는것이다. 따라서 위 코드의 String 변수 d는 엄밀히 말하면 객체이다.
전위증강 후위증강
package day001;
public class Test05 {
public static void main(String[] args) {
int a=10;
int b=5;
int c=a++ - --b;
System.out.println("c = " + c);
System.out.println("a = " + a);
System.out.println("b = " + b);
int d = 5;
System.out.println("c = " + c);
//= 후위증감 -> 우선순위가 낮음
// =우선순위가 낮음
// 전위증감 우선순위가 매우 높음
// 후위증감 우선순위가 매우 낮음
int num1=12;
int num2=32;
int num3=++num2 / num1--;
// num1 = 11
// num2 = 33
// num3 = 2
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
전위증감 후위증감은 디버깅표를 만들어보면 이해하기 쉽다!
후위증감은 우선순위가 매우 낮기 때문에 a-b가 이뤄진 이후에야 a가 1증가했음을 볼 수 있다.
디버깅표는 자주 만들어보자....
중요하니까 한개더... 다음 코드의 디버깅표를 만들어보자.
package day001;
public class Test08 {
public static void main(String[] args) {
// 삼향(조건) 연산자
// 조건식? T:F
int result = 100>500? 3:-3;
System.out.println("result="+result);
int a=10,b=20;
int c=b++ + ++a;
int d=c--*2;
int e=b/d<5? 10:11;
// System.out.println(e);
}
}
삼향(조건)연산자
조건식? T:F 로 간단하게 표현할수 있다
ex) int result = 100>500? 3:-3 ; 이면
100은 500보다 작기때문에 false 이므로 -3을 대입한다.
오늘의 마지막 과제로는 조건식을 사용하는 문제를 2개 받았다.
1번
num을 정의해주세요(1~100사이의 양수로 해주세요)
num이 짝수라면 짝수. 홀수라면 홀수입니다. 를 출력해주세요!!!!!!!!
int num = 50;
if(num%2==0) {
System.out.println(num + "은 (는)짝수입니다.");
} else {
System.out.println(num + "은 (는)홀수입니다.");
}
2번
h=5 //시간
m=30 //분(0~59)
5시 30분의 1시간 20분전 시간은 4시 10분입니다. 라고 출력해주세요 !~~~
만약 h=1, m=10 이었다면
1시 10분의 1시간 20분전 시간은 12시 50분 입니다. 라고 출력됩니다.
int h=12;
int m=12;
if (m<20 && h<1) {
System.out.println(h+ "시" + m + "분의 1시간 20분전 시간은" + (10-h)+"시" + (60-m)+"분 입니다." );
}
else if (m<20) {
System.out.println(h+ "시" + m + "분의 1시간 20분전 시간은" + (h-2)+"시" + (60-m)+"분 입니다." );
}
else if (h<1) {
System.out.println(h+ "시" + m + "분의 1시간 20분전 시간은" + (11-h)+"시" + (m-20)+"분 입니다." );
}
else {
System.out.println(h+ "시" + m + "분의 1시간 20분전 시간은" + (h-1)+"시" + (m-20)+"분 입니다." );
}
난 2번을 너무 비효율적으로 풀었다...
강사님이 알려주신대로 한글코딩부터 제대로 하는 습관을 들여야겠다.
강사님 코드
package day001;
public class Test12 {
public static void main(String[] args) {
// 한글코딩 ★★★★★★★★★★
// 1: h 정의 1~12
// 2: m 정의 0~59
// h2와 m2를 구해야함!!!
// 3: h에서 1시간을 빼기 -> h2
// 3-2: 1~12 범위를 벗어난다면? 12부터 시작하도록 세팅
// 4: m에서 20분을 빼기 -> m2
// 4-2: 0~59 범위를 벗어난다면? 59부터 시작하도록 세팅
// 4-3: h도 1 빼기
// 4-3-2: 1~12 범위를 벗어난다면? 12부터 시작하도록 세팅
////////////////////////////////////////////////////////
// ★ 문제를 풀다가, ctrl C,V를 했다면???!??!?!?!??
// 로직이 반복되는겁니다!!!!!!!!!!!!
// => 코드를 줄일수있다는 의미 ☆
// h2와 m2를 구해야함!!!
// 3: m에서 20분을 빼기 -> m2
// 3-2: 0~59 범위를 벗어난다면? 59부터 시작하도록 세팅
// 3-3: h도 1 빼기
// 4: h에서 1시간을 빼기 -> h2
// 4-2: 1~12 범위를 벗어난다면? 12부터 시작하도록 세팅
// 5: 출력문구
// h시 m분의 1시간 20분전 시간은 h2시 m2분입니다.
// 한글코딩이 100% 완료되면, 그때 코드를 작성합니다!!!!!!!!! <<<<<
int h=1,m=0; // ※ 경계값 검사 (등호부분 검사)
int h2=h;
int m2=m-20;
if(m2<0) { // !(0<=m2 && m2<60)
// 0~59 사이가 아니라면
// 0<=m2 이고 m2<60 <<이게 아니라면
// (0<=m2 && m2<60) << 이게 아니라면
// !(0<=m2 && m2<60)
m2+=60;
h2--;
}
h2--;
if(h2<1) { // !(1<=h2 && h2<=12)
h2+=12;
}
System.out.println(h+"시 "+m+"분의 1시간 20분전 시간은 "+h2+"시 "+m2+"분입니다.");
}
}
이렇게하면 문제에 대해 더 직관적인거같기도하다..?
int h=0,m=0; // ※ 경계값 검사 (등호부분 검사)
int h2=h-1;
int m2=m-20;
if(m2<0) { // !(0<=m2 && m2<60)
// 0~59 사이가 아니라면
// 0<=m2 이고 m2<60 <<이게 아니라면
// (0<=m2 && m2<60) << 이게 아니라면
// !(0<=m2 && m2<60)
m2+=60;
h2--;
}
if(h2<1) { // !(1<=h2 && h2<=12)
h2+=12;
}
여기까지가..오늘배운 내용이다.
'코리아IT핀테크과정' 카테고리의 다른 글
버블정렬 코드 개선 (0) | 2023.11.27 |
---|---|
이진 탐색(Binary Search) (2) | 2023.11.26 |
학생부 프로그램 제작 (2) | 2023.11.25 |
배열(Array) (3) | 2023.11.23 |
형변환, 반복문 (0) | 2023.11.22 |