학습 방법을 기존 메모장 → cmd창에서 java machine 컴파일 → class파일 열기 방법에서
java 컴파일러인 eclipse 를 이용하는 방법으로 바꾸었다. 이에 프로젝트 - 패키지 - 클래스로 이어지는 서브 개념이 보다 가시화 되었고 들여쓰기등의 어려움이 사라졌다.
C++를 통해 객체(Object, Instance)의 구성요소, 기능, 개념등에 대해서 배웠고, 이제 JAVA라는 거대한 객체들의 세계에 발을 디디게 되었다. 자바 백엔드 개발자를 목표로 하고 있음에 JAVA라는 순수언어에 대한 높은 이해는 불가분적인 것이니 힘차게 출발해 보겠다. spring, spring boot framework로 넘어가기에 앞선 전초전이라고 생각하자!
그간 프로그래밍 언어를 다섯개정도 접해 보니 새로운 언어를 배울 때 마다 점차 익숙하고 쉽게 다가가 지는 경험을 하고 있다. 앞으로는 언어가 얼마나 어렵나의 문제라기 보다 프로그래밍, 컴퓨터 자체에 대한 본질을 이해하고 있는가에 대한 문제라고 생각된다.
가령 구글링을 통해 정보를 얻을 때
something in python == something in java == something in C = something in C++ ..같이 진행하면 대부분의 언어는 어떤 특정 기능에 대해 상통하는 부분이 존재하기 때문에 검색이 쉽다는 것!
C 와 C++에서 배웠던 동일개념을 JAVA에선 어떻게 활용할 수 있는지 정도만 간략하게 리뷰해 보자
package Tests; // JavaStudy - Tests(package)
// If class contains "main" method
public class If {
public static void main(String[] args) {
int num = 120;
if(num > 0 && (num % 2 ) == 0)
// excute following sentence if condition is true
System.out.println("양수이면서 짝수");
int n1 = 5, n2 = 7;
// if연산자
int big = (n1 > n2)? n1 : n2; // 더 큰 수 저장
int diff = (n1 > n2)? n1-n2 : n2-n1; // 두 수의 차 절대값 저장
// 출력
System.out.println("bigger number is " + big);
System.out.println("diff value of difference bet two number is " + diff);
}
}
package Tests;
import java.util.Scanner; // to get input value from user
// class name "For"(Camel case)
public class For {
public static void main(String[] args) {
int product = 1;
// 1 ~ 10까지 곱셈 계산
for(int i =1 ; i < 11 ; i++) {
product *= i;
}
System.out.println("multi production 1 through 10 = " + product);
int num;
Scanner sc = new Scanner(System.in); // Instantiate Scanner class instance
System.out.print("Enter your number : ");
num = sc.nextInt(); // input value from user
// 구구단
for(int i = 1 ; i < 10 ; i++)
System.out.println(num + "*" + i + "=" + num*i + "\n");
}
}
package Tests;
// class "While"
public class While {
// call defined methods(addition / printNumber / printNumber2 / printNumber3)
public static void main(String[] args) {
System.out.println("sum of 1 through 99 = " + addition(1,99));
printNumber(1, 100);
System.out.println();
printNumber2(1,100);
System.out.println();
printNumber3();
}
/* public static...
methods that does not need instantiation
accessible in any point within same package boundary
*/
// sum num1 through num2
public static int addition(int num1, int num2) {
int sum = 0;
while(num1 <= num2) {
sum += num1;
num1++; // for the break of the loop
}
return sum;
}
// printout num1 through num2
public static void printNumber(int num1, int num2) {
while(num1 <= num2) {
System.out.print(num1 + " ");
num1++;
}
}
// printout num2 through num1
public static void printNumber2(int num1, int num2) {
// do ~ while
do {
System.out.print(num2 + " ");
num2--;
}while(num2 >= num1);
}
// sum all possible numbers which fufill the condition
public static void printNumber3() {
int num=1;
int sum =0;
while(num <= 1000) {
if(num % 2 == 0 && num % 7 == 0) {
System.out.print(num + " ");
sum += num;
}
num++;
}
System.out.println();
System.out.println("sum of specific numbers = " + sum);
}
}
package Tests;
//class "repitition"
public class repitition {
public static void main(String[] args) {
// call the methods
findOut72();
System.out.println();
method1();
method2();
}
// definition of methods
// find the combination which makes 72 by their production
public static void findOut72() {
// label to break the loop at one time
outer: for(int i = 2 ; i < 10 ; i++) {
for(int j =1 ; j < 10 ; j++) {
// find the first fufilling combination of i and j, and break the whole loop(outer)
if(i*j == 72) {
System.out.println("first product combination of 72 : " + i + "*" + j + "=" + i*j);
break outer; // go to label and break it
}
}
}
}
// 짝수 구구단
public static void method1() {
for(int i = 2 ; i < 10 ; i++) {
for(int j = 1 ; j < 10 ; j++) {
if(i % 2 == 0)
System.out.println(i + "*" + j + "=" + i*j);
}
if(i % 2 == 0)
System.out.println("-------\n");
}
}
// 합이 9가 되는 콤비네이션
public static void method2() {
for(int i =0 ; i < 10 ; i++) {
for(int j = 0 ; j < 10 ; j++) {
if(i + j == 9)
System.out.println(i + "+" + j + "=" + (i + j));
}
}
}
}
package Tests;
public class Switch {
public static void main(String[] args) {
int num = 24;
switch(num / 10) {
case 0:{
System.out.println("0이상 10미만의 수");
break;
}
case 1:{
System.out.println("10이상 20미만의 수");
break;
}
case 2:{
System.out.println("20이상 30미만의 수");
break;
}
default:
System.out.println("음수 혹은 30이상의 수");
}
}
}
package Tests;
public class BreakContinue {
public static void main(String[] args) {
int count=0;
for(int i =1 ; i < 100 ; i++) {
if(i % 5 !=0 || i % 7 !=0)
continue; // not the target
count++; // target
System.out.print(i + " "); // target print out
}
System.out.println("\ncount = " + count);
oddSum();
}
// 홀수만을 더했을때 그 값이 최초로 1000을 초과하는 경우에 대해서
public static void oddSum() {
int sum =0;
int i = 0;
while(true) {
if(sum > 1000) {
System.out.println(i + "을 더했을때 최초로 1000이 넘어갑니다.");
System.out.println("그리고 그 값은 " + sum + "입니다.");
break;
}
if(i % 2 ==1)
sum += i;
i++;
}
}
}
package Tests;
import java.util.Scanner;
public class recursion {
public static void main(String[] args) {
int num1, num2;
Scanner sc = new Scanner(System.in);
System.out.print("Enter number1 = ");num1 = sc.nextInt();
System.out.println("2 power " + num1 + " = " + basePower(2, num1));
System.out.print("Enter number2 = ");num2 = sc.nextInt();
System.out.println(num2 + " 의 이집법 수 : " + binary(num2));
}
// base^power calculating method
public static int basePower(int num1, int num2) {
if(num1 == 0) {
System.out.println("0은 base가 될 수 없습니다.");
return -1;
}
else if(num1 == 1)
return 1;
else if(num2 == 0) {
return 1;
}
return num1*basePower(num1, --num2);
}
// convert Decimal number into binary number
public static int binary(int num) {
int remain; // initialized every time the method is called
if(num / 2 == 0) {
return 1; // 가장 첫글자에 해당
}
remain = num % 2; // decimal -> binary : divided by 2
num = (int)((num - remain) / (double)2);
return remain + 10*binary(num); // recursion
}
}
package Tests;
import java.util.Scanner;
public class Method {
public static void main(String[] args) {
int num1, num2;
Scanner sc = new Scanner(System.in);
System.out.print("Enter num1 : ");
num1 = sc.nextInt();
System.out.print("Enter num2 : ");
num2 = sc.nextInt();
// call the methods
operation(num1, num2);
System.out.println();
int diff = diff(num1, num2);
System.out.println("num1 and num2 diff = " + diff);
System.out.println();
System.out.println("scale = " + scale(2.15));
System.out.println("outerLine = " + outerLine(3));
for(int i = 1 ; i <= 100 ; i++ ) {
if(primeNumber(i))
System.out.print(i + " ");
}
}
// operation method
public static void operation(int num1, int num2) {
System.out.println("num1 + num2 = " + (num1 + num2));
System.out.println("num1 - num2 = " + (num1 - num2));
System.out.println("num1 * num2 = " + num1*num2);
System.out.println("num1 / num2 = (" + num1/num2 + ", " + (double)num1/num2 + ")");
}
// absolute value of difference bet two numbers method
public static int diff(int num1, int num2) {
int diff = (num1 > num2)? num1-num2 : num2 - num1;
return diff;
}
// get circle scale method
public static double scale(double radian) {
return radian * radian * 3.14;
}
// get outerline of circle method
public static double outerLine(double radian) {
return 2 * radian * 3.14;
}
// is it primenumber? method
public static boolean primeNumber(int num) {
for(int i = 2 ; i <num ; i ++) {
if(num % i ==0) {
return false;
}
}
return true;
}
}
package Tests;
// Triangle class
class Triangle{
// instance variables(Fields, Member variables)
double height;
double bottom;
// Constructor : for the initialization of instance variables
public Triangle(double hei, double bot) {
height = hei;
bottom = bot;
}
// other methods of class "Triangle" that can access to member variables
public void changeHeight(double hei) {
height = hei;
}
public void changeBottom(double bot) {
bottom = bot;
}
public double scale() {
return height * bottom / (double)2;
}
}
public class Constructor {
public static void main(String[] args) {
// declare reference variable and construct a instance
Triangle tri = new Triangle(2.5, 5.5); // refer the address of instance
tri.changeHeight(3); // access to Triangle class methods from instance
tri.changeBottom(5);
System.out.println("scale of the triangle = " + tri.scale());
}
}
중도 많은 고민이 있었다. 동기생들이 목표로 하는 금융공기업을 준비할까, 프로그래밍 역량이 덜 중시되는 PM을 준비할까. 너무 복잡했고 어려운 결정들이었지만 결국 프로그래밍에 대한 흥미가 꿈틀거림에 저항할 수 없었다. 당분간 자바라는 순수 언어에 몰입해볼 예정이다.