연습 문제

자바테스트.docx
0.05MB

풀이
import java.util.ArrayList;
import java.util.Scanner;

public class CalculMenu {
 //Switch Case로 메뉴를 잡아준다

 Scores arr[];
 ArrayList<Scores> list = new ArrayList<Scores>();
 CalculManage cm = new CalculManage();  
 Scanner sc = new Scanner(System.in);
 Scores sco = new Scores();

 
 public void display() {
   int selectedNo  = 0;  
   boolean mainFlag  = false;

  do{
   System.out.print("메뉴를 선택하세요. (1. 조회 / 2. 입력 / 3. 1등) : ");
   selectedNo = sc.nextInt();
   String num = null;
   
   switch(selectedNo) {
   case 1:
    if(list.size() > 0){
     cm.outputNo();
     }else{  
     System.out.println("입력된 점수가 없습니다.");
     System.out.println(list.size());
     break;    
     }
   case 2:
    cm.inputNo();
    break;
   case 3:
    cm.rankingNo();
    break;
   default:
    System.out.println("존재하지않는 메뉴입니다.");
    break;
   }
  }
  while(!mainFlag);
  sc.close();
 }

}

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class CalculManage {
 
 ArrayList<Scores> list = new ArrayList<Scores>(); 
 int i = 0;
 Scanner sc = new Scanner(System.in);
 Scores sco = new Scores();

 
 public void display() {
   int selectedNo  = 0;  
   boolean mainFlag  = false;

  do{
   System.out.print("메뉴를 선택하세요. (1. 조회 / 2. 입력 / 3. 1등) : ");
   selectedNo = sc.nextInt();
   
   switch(selectedNo) {
   case 1:
    if(list.size() > 0){
     outputNo();
     break;
     }else{  
     System.out.println("입력된 점수가 없습니다.");
     break;    
     }
   case 2:
    inputNo();
    break;
   case 3:
    rankingNo();
    break;
   default:
    System.out.println("존재하지않는 메뉴입니다.");
    break;
   }
  }
  while(!mainFlag);
  sc.close();
 }

 
 
 public void outputNo() {

  Scores sco = new Scores();
  
  System.out.println("번호"+ '\t' + "국어"+ '\t' + "수학 "+ '\t' + "영어"+ '\t'+ "평균");
  for(int i=0;i<list.size();i++) {
//   sco = list.get(i);
//   System.out.println(sco.getstudentname() + " " + sco.getKscore() + " " + sco.getMscore()+ " " + sco.getEscore()+ " " + sco.getAvg());
  System.out.println(list.get(i));
 // break;
  }
  }  
   
 

 public void inputNo () {
      Scanner sc = new Scanner(System.in);
   Scores sco = new Scores(); 
 //  int i = 0;
     
    for(int j =0;j<100;i++) { 
        System.out.println((i + 1) + "번 학생의 국어 점수 : " );
        sco.setKscore(sc.nextInt());
        System.out.println((i + 1) + "번 학생의 수학 점수 : " );
        sco.setMscore(sc.nextInt());
        System.out.println((i + 1) + "번 학생의 영어 점수 : " );
        sco.setEscore(sc.nextInt());
        sco.setAvg(sco.getKscore()+sco.getEscore()+sco.getMscore());
        sco.setstudentname(i + 1);
        list.add(sco); 
          ++i;
        break;
         } 
 }


 
 public void rankingNo() {
  Scores sco = new Scores();
  Scores maxSco = new Scores();
  // list.add(sco);
  double max = 0;
  
  for(i=0;i<list.size();i++) {
   sco = list.get(i);
   if( max < sco.getAvg()) {
    max = sco.getAvg();
    maxSco = list.get(i);
 //   System.out.println("if max : " + max);
 //   System.out.println("if avg : " + sco.getAvg());

    //max = sco.getAvg();
 //     }
 //  else {
 //      System.out.println("else max : " + max);
 //   System.out.println("else avg : " + sco.getAvg());
      }
  }
  System.out.println("번호"+ '\t' + "국어"+ '\t' + "수학 "+ '\t' + "영어"+ '\t'+ "평균");
  System.out.println(maxSco.getstudentname() + " \t " + maxSco.getKscore() + " \t " + maxSco.getMscore()+ " \t " + maxSco.getEscore()+ " \t " + maxSco.getAvg());
 }
}

 

public class CalculMain {

 public static void main(String[] args)  throws Exception {
  // TODO Auto-generated method stub
  CalculManage menu = new CalculManage();
  menu.display();
  
 }

}

 

public class Scores {
 //field
  public int studentname;
  public double kscore;
  public double mscore;
  public double escore;
  public int ranking;
  public double avg;
  public int total;

 //setter getter 
  @Override
  public String toString() {
   return ""  + studentname + " \t " + kscore + " \t " + mscore + " \t " + escore
     + "\t " + avg + " \t  ";
  }
  public int getstudentname() {
   return studentname;
  }
  public void setstudentname(int studentname) {
   this.studentname = studentname;
  }
  public double getKscore() {
   return kscore;
  }
  public void setKscore(double kscore) {
   this.kscore = kscore;
  }
  public double getMscore() {
   return mscore;
  }
  public void setMscore(double mscore) {
   this.mscore = mscore;
  }
  public double getEscore() {
   return escore;
  }
  public void setEscore(double escore) {
   this.escore = escore;
  }
  public int getRanking() {
   return ranking;
  }
  public void setRanking(int ranking) {
   ranking = 1 ;
  }
  public void setRankingplus(int ranking) {
   ranking++;  
  }
  public int getTotal() {
   return total;
  }
  public void setTotal(int total) {
   this.total = total;
  }
  
  public double getAvg() {
   avg = (kscore + mscore + escore) / 3.f;
   return avg;
  }
  public void setAvg(double avg) {
   this.avg = (kscore + mscore + escore) / 3;
  }

}

 

결과

 

 

'JAVA 기초 정리 > JAVA' 카테고리의 다른 글

2. 연습문제 : 만년달력  (0) 2019.12.19
1. 연습문제 : 로또 프로그램  (0) 2019.12.19
4. 연습문제 : 경우의 수  (0) 2019.12.19
3. 연습문제 : 정삼각형  (0) 2019.12.19
6. 연습문제 : 구구단찍기  (0) 2019.12.19
연습 문제


  만년 달력 작성하기
 ※ 연도를 입력 할수 있으며(범위는 1~9999), 입력한 연도의 전체 달력을 출력.
    각 달력의 최상단에는 요일 표시(한글로 "일 ~ 토")
    주의) Calendar관련 API는 사용하지 않습니다.
 Tip.
 1. 1년 1월 1일은 일요일
 2. 윤년은 4의 배수 연도이면서, 100의 배수는 아니며, 400의 배수는 윤년이다. 
 
 출력 예시.
       <<1월>>
 일 월 화 수 목 금 토
                 1  2
  3  4  5  6  7  8  9
 10 11 12 13 14 15 16
 17 18 19 20 21 22 23
 24 25 26 27 28 29 30
 31

       <<2월>>
 일 월 화 수 목 금 토
     1  2  3  4  5  6
  7  8  9 10 11 12 13
 14 15 16 17 18 19 20
 21 22 23 24 25 26 27
 28 29
          .
          .
          .

 

풀이

 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class Calendar {

 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int y = 0, m = 0, d = 0, w = 0, i = 0, j = 0; //y년도, m월, d일, i변수
  boolean cal = false;
  int monthSet[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//각월마다 총일수
  int no = 0;
  int user[] = new int[9999];
  
  

  
   
    do { 
   System.out.print("연도를 입력하세요 : ");
   y = sc.nextInt()+1;
//   user[i] = y;
   if (y < 1 || y > 9999) {
    System.out.println("숫자는 1~9999 사이의 숫자만 입력가능합니다.");
    continue;
   }
   
    for (m = 1; m <13; m++) {//12대신 d
   System.out.println("        <<" + m +"월>>"); 
   
   
  // 1. 시작 : 윤년 계산
   if(y % 4 ==0 && y % 100!=0 || y % 400 ==0) 
   monthSet[1]=29; //윤년이면 2월은 29일
   else
   monthSet[1]=28; //윤년이 아니면 2월은 28일
   
   
   //2. 1월 1일은 일요일
   d = (y-1)*365 + (y-1)/4 -(y-1)/100 + (y-1)/400;
   
   //y년 전날까지 날수
   for(i=0; i<m-1; i++){
    d = d + monthSet[i];
   }
   w = d % 7; //구하고자 하는 달의 시작일(1일)의 요일을 구함
   d = d + 1;

   System.out.println("   일     월      화       수     목     금    토");
   
      //    공백
   for(i=0;i<w;i++) {
    System.out.print("    "); 
   }//날짜 출력
   for(i=1; i <= monthSet[m-1]; i++) {
    System.out.printf("%4d", i);
  //한주의 날짜가 출력되면 줄바꿈 처리
    w++;
   if(w %7 == 0)
    System.out.println();
    }
  if(w % 7 != 0) {
  System.out.println();
  }  
  }
   }while(y>0);
}
}

 

 

결과

 

 

연습 문제

 

풀이
public class LottoMain {
 public static void main(String[] args) {
  LottoMenu menu = new LottoMenu();
  menu.display();
 }
}

 


import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class LottoManage {
 public void createNo(List<Integer> randomList) {
  randomList.clear();
  
  Random rd = new Random();
  
  int tempInt;
  boolean randomFlag;
  
  while (randomList.size() < 7) {
   tempInt = rd.nextInt(45) + 1;
   randomFlag = false;
   for (Integer i : randomList) {
    if (i == tempInt) {
     randomFlag = true;
     break;
    }
   }
   if (!randomFlag) {
    randomList.add(tempInt);
   }
  }
  System.out.print("당첨번호 : ");
  for (int i = 0; i < 6; i++) {
   System.out.print(randomList.get(i) + " ");
  }
  System.out.println("\n보너스번호 : " + randomList.get(6));
 }
 
 public void inputNo(List<Integer> randomList, List<Integer> inputList, Scanner sc) {
  inputList.clear();
  
  int no;
  boolean dupFlag;
  
  for (int i = 0; i < 6; i++) {
   while (i == inputList.size()) {
    System.out.print((i + 1) + "번째 숫자를 입력하세요: ");
    no = sc.nextInt();
    if (no < 1 || no > 45) {
     System.out.println("숫자는 1~45 사이의 숫자만 입력가능합니다.");
     continue;
    }
    dupFlag = false;
    for (Integer j : inputList) {
     if (j == no) {
      System.out.println("중복된 숫자는 입력할 수 없습니다.");
      dupFlag = true;
      break;
     }
    }
    if (!dupFlag) {
     inputList.add(no);
    }
   }
  }
  drawNo(randomList, inputList);
 }
 
 private void drawNo(List<Integer> randomList, List<Integer> inputList) {
  int count = 0;
  boolean bonusFlag = false;
  
  for (int i = 0; i < 6; i++) {
   for (Integer j : inputList) {
    if (randomList.get(i) == j) {
     count++;
    }
   }
  }
  
  System.out.print("결과: ");
  switch (count) {
   case 3 :
    System.out.println("5등");
    break;
   case 4 :
    System.out.println("4등");
    break;
   case 5 :
    for (Integer i : inputList) {
     if (i == randomList.get(6)) {
      System.out.println("2등");
      bonusFlag = true;
      break;
     }
    }
    if (!bonusFlag) {
     System.out.println("3등");
    }    
    break;
   case 6 :
    System.out.println("1등");
    break;
   default :
    System.out.println("꽝");
    break;
  }
 }
}

 import java.util.ArrayList;
  import java.util.List;
  import java.util.Scanner;

  public class LottoMenu {
   public void display() {
    LottoManage lm  = new LottoManage();
    Scanner sc   = new Scanner(System.in);
    
    List<Integer> randomList  = new ArrayList<>();
    List<Integer> inputList  = new ArrayList<>();
    
    int selectedNo  = 0;
    boolean mainFlag  = false;
    
    do {
     System.out.print("메뉴를 선택하세요. (1. 난수생성 / 2. 번호입력 / 3. 종료) : ");
     selectedNo = sc.nextInt();
     
     switch(selectedNo) {
      case 1:
       lm.createNo(randomList);
       break;
      case 2:
       if (randomList.size() == 0) {
        System.out.println("난수를 먼저 생성해야 합니다.");
       } else {
        lm.inputNo(randomList, inputList, sc);
       }
       break;
      case 3:
       System.out.println("프로그램을 종료합니다.");
       mainFlag = true;
       break;
      default:
       System.out.println("존재하지 않는 메뉴입니다.");
       break;
     }
    } while(!mainFlag);
    sc.close();
   }
  }

 

 

결과

'JAVA 기초 정리 > JAVA' 카테고리의 다른 글

5. 연습문제 : 평균성적순위계산기  (0) 2019.12.19
2. 연습문제 : 만년달력  (0) 2019.12.19
4. 연습문제 : 경우의 수  (0) 2019.12.19
3. 연습문제 : 정삼각형  (0) 2019.12.19
6. 연습문제 : 구구단찍기  (0) 2019.12.19
연습 문제

문제 :

2,3,5 g 의 추가 각각 10개씩 있습니다.

1~100 사이의 무게(정수)를 입력받아

 

for 문을 이용하여

주어진 추로 무게를 측정할 수 있는 경우의 수를 모두 구하세요.

 

출력 예) 5g : n, 3g : m, 2g : k

                     ...

 

조건1) 입력값이 유효한지 체크하세요.

 

풀이
import java.util.Scanner;

public class gravity {

 public static void main(String[] args) {
  int arr[]= {2,3,5}; // 추가 2,3,5g 10개씩 있다
  int total = 0, i = 0, y = 0;
  y = arr[i];
  Scanner sc = new Scanner(System.in);
   
  
  System.out.println("[문제 : 경우의 수]"); 
  do { 
  System.out.print("1~100 사이의 정수를 입력하세요: ");
  y = sc.nextInt();
  if (y < 1 || y > 100) {
   System.out.println("숫자는 1~100 사이의 숫자만 입력가능합니다.");
   continue;
  }   
   
  for(int a=1; a<=10;a++) {
   for(int b=1; b<=10; b++) {
    for(int c=1; c<=10; c++) {
     total=(a*5)+(b*3)+(c*2);
     if(total == y) {
      System.out.println("5g:" + a+"개, "+ "3g:"+ b +"개, "+"2g:"+c+"개 "+ ",total" +total);
     }
    }
  }
  }
     }while(y>0);
 }
}

 

결과

'JAVA 기초 정리 > JAVA' 카테고리의 다른 글

2. 연습문제 : 만년달력  (0) 2019.12.19
1. 연습문제 : 로또 프로그램  (0) 2019.12.19
3. 연습문제 : 정삼각형  (0) 2019.12.19
6. 연습문제 : 구구단찍기  (0) 2019.12.19
7. 연습문제 : 행맨 게임  (0) 2019.12.19
문제

 

풀이
public class hello2019 {

 public static void main(String[] args) {
  for(int i=0;i<4;i++) {   //초기값
   for(int k=4-i;k>0;k--)     //공백값
   {
   System.out.print(" ");
    //공백값
   }
   for(int j=0;j<i+1;j++)
   {
   System.out.print("* "); //*값 
   }
  System.out.println(" ");
  }
 }
}


 

결과

 

풀이
public class hello2016 {

 public static void main(String[] args) {
  for(int i=1;i<10;i++,System.out.println()) {
   for(int j=1;j<10;j++,System.out.print('\t')) {
    System.out.print(i + "*" +j + "=" + i*j);
   }
  }
 }
}

 

결과

연습 문제

/*

행맨(Hang Man)

 *

 * 게임방법:

 *                   1. 임의로 영단어를 선택한 후 자릿수를 표시한다. ex> START => _ _ _ _ _

*                   2. 입력 가능한 횟수를 설정한다. (횟수 설정 가능 범위 validation 체크)

*                   3. 각각의 자리에 들어갈 알파벳들을 하나씩 입력한다. (알파벳 설정 가능 범위 validation 체크)

*                   4. 입력한 알파벳이 단어에 존재하지 않을 경우 입력 가능한 횟수가 줄어들고,

 *                        존재할 경우 횟수는 줄어들지 않고 빈칸이 채워진다. ex> START => _ T _ _ T

*                   5. 이전에 입력했던 값을 다시 입력했을경우 중복 validation 체크

*                   6. 입력 가능한 횟수 안에 모든 알파벳을 찾아내면 성공그렇치 않으면 실패

 

첨부 자료를 이용하세요
  • 랜덤 알파벳 들어가있는 파일

word.txt
0.22MB

 

풀이
import java.util.*;

import java.io.*;



public class hangexample {

	   int HIDDENCHAR; // 숨기는 글자 개수를 사용자에게서 입력 받음

	   StringBuffer hiddenWord; // 숨긴 글자를 가진 단어

	   String newWord; // 게임을 위해 선정된 단어

	   Scanner scanner; // 키 입력

	   int failCount; // 틀린 횟수

	   

	   public hangexample() { 

	      scanner = new Scanner(System.in);

	   }





	   public void run() {

	      System.out.println("행맨(Hang Man) 게임 시작");



	      Words words = new Words("D:\\workspace\\java\\word.txt"); // 단어 선택하는 객체 생성      

	      while(true) {

	         while (true) {

	            newWord = words.getRandomWord(); // 랜덤한 단어 선택

	               break;

	         }

	         if(newWord == null) break; // 단어 선택에 문제가 있는 경우 프로그램 종료

	         makeHidden(); // 글자를 숨긴 단어 만들기

	         go(); // 게임 진행

//	            break;

	      }

	   }

	   



	   void makeHidden()

	   {

	      hiddenWord = new StringBuffer(newWord);

	      Random r = new Random();

	      

	      for(int k=0; k<100; k++) {

	         int index = r.nextInt(newWord.length());

	         char c = newWord.charAt(index);

	         for(int i=0; i<newWord.length(); i++) {

	            if(hiddenWord.charAt(i) == c)

	               hiddenWord.setCharAt(i,'-');

	         }

	      }

	   }

	   

	   // 5 번 틀리면 실패



	   void go() {

	      failCount=0;

	      char key;

	      do {

	         if(failCount == 5) {

	            System.out.println("실패 하였습니다.");

	            System.out.println();

	             break;

				}

		     System.out.println(newWord + "=>");

	         System.out.println(hiddenWord);

	         System.out.print(">>");

	         String text = scanner.next();

	         key =  text.charAt(0);

	         

	      }while(!complete(key));

	      

       	if(failCount < 5) {

	       System.out.println("성공 하였습니다.");	

           System.out.println();

       	}

	      

	   }

	   

	   // 사용자가 입력한 문자 key가 숨긴 글자와 일치하는지 검사하고 일치하면 true를 리턴한다.

	   // 그리고 나서 hiddenWord의 '-'문자를 key 문자로 변경

	   boolean complete(char key) {

	      boolean hit = false;

	      for(int i=0; i<newWord.length(); i++) {

	         if(hiddenWord.charAt(i) == '-' && newWord.charAt(i) == key) {

	            hiddenWord.setCharAt(i, key);

	            hit = true;

	         }

	      }



	      if(!hit)

	         failCount++;



	      for(int i=0; i<newWord.length(); i++) {

	         if(hiddenWord.charAt(i) == '-')

	            return false;

	      }

	      return true;

	   }



	   public static void main(String[] args) {

		   hangexample app = new hangexample();

	      app.run();

	   }



	}



	// words.txt 파일을 읽고 파일에서 랜덤하게 단어를 추출하는 클래스

	class Words {

	   final int WORDMAX = 20000; // words.txt파일에 들어 있는 총 단어의 개수

	   private String fileName; // 단어 파일 이름. 현재는 words.txt

	   private Random r = new Random(); // 난수 발생기

	   

	   public Words(String fileName) {

	      this.fileName = fileName;

	   }

	   

	   public String getRandomWord() {

	      // 파일을 읽기 위한 BufferedReader 객체를 생성한다.

	      BufferedReader in = null;      

	      try {

	         // 파일을 열고 파일을 읽기 위한 BufferedReader 객체 생성

	         in = new BufferedReader(new FileReader(fileName));

	      }

	      catch(FileNotFoundException e) {

	         System.out.println("file not found error");

	         System.exit(0);

	      }

	      int n = r.nextInt(WORDMAX); // 랜덤한 라인 번호 생성. n 번째 단어를 게임에 사용

	      return readWord(in, n); // in 파일에서 n 번째 라인의 단어를 읽어서 리턴

	   }

	   

	   // in 파일에서 n 번째 라인의 단어를 읽어 리턴하는 메소드

	   private String readWord(BufferedReader in, int n) {

	      String line=null; // 한 라인을 저장할 문자열 객체. 한 라인에는 하나의 단어만 있음

	        try {

	         while (n>0) {

	            line = in.readLine(); // 파일에서 한 라인(한 단어)를 읽는다.

	            if(line == null) // eof를 만나면 문제 발생. 루프 종료

	               break;

	            n--;

	         }

	      } catch (IOException e) {

	         System.exit(0);

	      }

	      return line; // n 번째 라인의 단어 리턴

	   }

	}

 

결과

 

 

프로그래밍 언어란?
  • 컴퓨터가 이해할 수 있는 언어는 0과 1로 이루어진 이진 코드(binary code)의 기계어(machine language)이다.

  • 그래서 사람과 컴퓨터가 대화하기 위해서는 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어(programming language)가 필요하다.

  • 프로그래밍 언어는 고급 언어와 저급 언어로 분류 할 수 있다.

고급언어

  • 고급 언어는 컴퓨터와 대화할 수 있는 언어 중에서 사람이 쉽게 이해할 수 있는 언어를 말한다.
  • 즉, 사용자 입장에서의 언어로써 우리가 일반적으로 프로그래밍 언어라고 부르는 C, C++, Java 등이 대표적인 예이다.
  • 고급 언어로 작성된 소스(source)는 컴퓨터가 바로 이해할 수 없기 때문에(기계어가 아니므로), 컴파일(compile) 과정을 통해서 컴퓨터가 이해할 수 있는 기계어로 변환해줘야 컴퓨터가 사용할 수 있다.

  • 컴파일 해주는 것을 컴파일러(compiler)라고 하며, 자바에서는 javac.exe가 담당한다.

  • 우리가 흔히 말하는 프로그램(program)이란 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것을 말한다.

저급언어

  • 저급 언어는 기계어에 가까운 언어로, 어셈블리어가 대표적인 저급 언어이다.
  • 사람이 이해하기 어려워서 배우기 매우 까다롭다.
자바의 역사
  • 자바는 1991년에 썬 마이크로시스템즈(Sun Microsystems)사에서 제임스 고슬링(James Gosling)이 다른 연구원들과 함께 고안한 오크(Oak)라는 언어에서 시작되었다.

  • 오크는 처음에 가전제품에서 사용될 목적이었으나, 인터넷의 등장과 함께 인터넷에서 실행되는 프로그래밍 언어로 사용되었고, 이름을 자바로 변경하였다.

  • 1995년에 자바 1.0을 발표하였고, "Write Once, Run Anywhere"(한번 쓰고 어느 곳에서도 실행)를 약속하였다.

  • 1995년~1999년까지는 윈도우 프로그램 개발이 주류여서 C++언어에 비해 자바는 열세였다. 또, 메모리 및 CPU를 지나치게 많이 사용한다는 문제점이 있었다.

  • 하지만, 1999년도부터 인터넷이 활성화되면서 웹 애플리케이션 구축을 위해 자바 활성화되었다. 단 한번 작성으로 모든 곳에서 실행 가능한 언어는 자바뿐이었기 때문이다.

 

자바의 특징

자바는 이식성이 높은 언어이다.

  • 이식성이란 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.

  • 예를 들면 윈도우 운영체제에서 실행하는 프로그램을 리눅스 또는 유닉스에서 실행할 수 있으면 이식성이 높은 것이다.

  • 자바는 자바 실행 환경(JRE:Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능하다.

자바는 객체 지향 언어이다.

  • 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 것을 객체 지향 프로그래밍(OOP, Object Oriented Programming)이라고 한다.

  • 객체 지향 프로그래밍에 사용되는 언어를 객체 지향 언어라고 한다.
  • 자바는 객체를 만들기 위해 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다.
  • 자바는 객체 지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.

자바는 함수적 코딩 스타일을 지원한다.

  • 객체 지향 프로그래밍 이전에 Lisp 또는 Scheme와 같은 함수적 프로그래밍 언어들이 있었지만 큰 호응을 얻지 못했다.
  • 최근에 대용량 데이터 병렬 처리와 이벤트 지향 프로그래밍을 위해 함수적 프로그래밍이 다시 부각되고 있다.
  • 자바는 자바 8부터 람다식(Lambda Expressions)을 지원하여 함수적 프로그래밍을 지원한다.

  • 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해진다.

자바는 메모리를 자동으로 관리한다.

  • C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 성실하게 해주지 않으면, 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪게 된다.

  • 자바는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며,. 메모리는 자바가 직접 관리한다.
  • 객체 생성 시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.

  • 자바 개발자는 메모리 관리의 수고를 덜고, 핵심 기능 코드 작성에 집중할 수 있다.

자바는 다양한 애플리케이션을 개발할 수 있다.

  • 자바는 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다.
  • 또, 단순한 콘솔 프로그램에서부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션, 그리고 모바일용 안드로이드 앱 등 거의 모든 곳에서 실행되는 프로그램을 개발 할 수 있다.

  • 자바는 다양한 운영체제에서 사용할 수 있는 개발 도구와 API를 묶어 에디션(Edition) 형태로 정의하고 있다.

멀티 스레드(Multi-Thread)를 쉽게 구현할 수 있다.

  • 운영체제에 따라서 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관 없이 멀티 쓰레드를 쉽게 구현할 수 있다.

용어 알아보기
  • 멀티 스레드 : 여러 흐름을 동시에 수행하는 것이다. 각 스레드가 자신이 속한 프로세스의 메모리를 공유할 수 있다. 그래서 시스템 낭비가 적다. 
  • 프로세스 : 단순히 실행중인 프로그램, 프로세스는 프로그램에 사용되는 자원과 스레드로 구성
  • 스레드 : 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행

 

동적 로딩(Dynamic Loading)을 지원한다.

  • 자바 애플리케이션은 클래스로부터 생성 된 여러 개의 객체가 서로 연결되어 실행된다.

  • 애플리케이션 실행 시 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성한다.

  • 또, 개발 완료 후 수정 사항이 발생하더라도 해당 클래스만 수정 하면 되므로 전체 애플리케이션을 다시 컴파일 할 필요가 없다. 따라서 유지보수를 쉽고 빠르게 진행 수 있다.

막강한 오픈 소스 라이브러리가 풍부하다.

  • 자바는 오픈 소스(Open Source) 언어이므로 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
  • 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션 개발 기간을 단축하여 생산성을 높이고 안정성도 높일 수 있다.

  •  
출처

 

https://coupa.ng/bNVNsC

 

COUPANG

쿠팡은 로켓배송

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

'JAVA 기초 정리 > JAVA' 카테고리의 다른 글

1. 연습문제 : 로또 프로그램  (0) 2019.12.19
4. 연습문제 : 경우의 수  (0) 2019.12.19
3. 연습문제 : 정삼각형  (0) 2019.12.19
6. 연습문제 : 구구단찍기  (0) 2019.12.19
7. 연습문제 : 행맨 게임  (0) 2019.12.19

+ Recent posts