재밌고 어려운 IT를 이해해보자~!

JAVA, Class, 함수, 디버깅표 본문

코리아IT핀테크과정

JAVA, Class, 함수, 디버깅표

언제나즐거운IT 2023. 11. 22. 00:12

혼자만의 공부시간이 끝나고~~~~~~ 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
Comments