Java(자바) 6日次

블로그 移轉·2022년 10월 31일

Java

목록 보기
6/20

Java 面接 族譜 整理 (6日次)

1. 客體란 무엇인가?

客體(instance)는 「클래스」 라는 틀을 通해 만들어낸 實體를 意味한다。
客體를 生成한다는 것은 該當클래스의 .class파일을 메모리에 올린다는 것을 意味한다。

2. 下段의 클래스에 對하여、메모리 그림을 그리시오。

  • Rectangle.java
    public class Rectangle {
    	
       private int height;
       private int width;
       
       public int getHeight() {
       	return height;
       }
       
       public void setHeight(int height) {
       	this.height = height;
       }
       
       public int getWidth() {
       	return width;
       }
       
       public void setWidth(int width) {
       	this.width = width;
       }
       
       public int getArea(int width, int height) {
       	return width * height;
       }
    }
  • RectangleMain.java
    public class RectangleMain {
    	public static void main(String[] args) {
      		Rectangle rec = new Rectangle();
              System.out.println(rec.getArea(10, 20));
        }
    }

3. 클래스와 客體의 差異點은 무엇인가?

  • 클래스 → .class

    클래스는 具現하려는 機能을 모아둔 設計圖라고 볼 수 있다。

  • 客體 → .class를 메모리에 올린 것

    客體는 클래스의 機能을 活用하기 爲해 메모리를 割當해 實際 使用하는 것을 意味한다。

具現하고자 하는 重複되는 機能이 2個 以上일 때 그것을 하나의 클래스로 定義하고、그 클래스를 通해 客體를 生成(메모리에 割當)한다。

4. 下段의 內容을 프로그램으로 作成하시오。

1부터 num까지 合을 구하는 클래스를 作成하도록 하시오。

  • GetSum.java

    public class GetSum {
    
         private int num;
    
         public GetSum(int num) {
             this.num = num;
         }
    
         public int getNum() {
             return num;
         }
    
         public void setNum(int num) {
             this.num = num;
         }
    
         public int getSum() {
    
             int sum = 0;
    
             for (int i = 1; i <= num; i++) {
                 sum += i;
             }
    
             return sum;
    
         }
    
     }
  • SumMain.java

    public class SumMain {
    
        public static void main(String[] args) {
    
            GetSum getsum = new GetSum(10);
            System.out.println(getsum.getSum());
    
        }
    
    }
    

5. 下段의 클래스를 作成하시오。

  • StarPrint.java

      public class StarPrint {
    
         private int num;
    
         public int getNum() {
             return num;
         }
    
         public void setNum(int num) {
             this.num = num;
         }
    
         public void printTriangle(int num) {
             for (int i = 1; i <= num; i++) {
                 for (int j = 1; j <= i; j++) {
                     System.out.print("*");
                 }
                 System.out.println();
             }
         }
    
         public void printReverseTriangle(int num) {
             for (int i = 1; i <= num; i++) {
                 for (int j = num; j >= i; j--) {
                     System.out.print("*");
                 }
                 System.out.println();
             }
         }
     }
  • StarPrintMain.java

     public class StarPrintMain {
    
         public static void main(String[] args) {
             StarPrint starPrint = new StarPrint();
    
             starPrint.printTriangle(3);
             System.out.println();
             starPrint.printReverseTriangle(3);
         }
    
     }

    實行畫面 →
    *
    **
    ***

    ***
    **
    *

6. 生成子란 무엇인가?

  • 生成子名은 클래스名과 同一해야한다。
  • 生成子는 값을 返還하지 않고(return) return type도 表示하지 않는다。
  • 返還(return)값이 없다는 것은 用途를 制限함을 意味 (演算 等의 用途가 아님)

卽、生成子의 用途는 값들에 對한 初期化이다。

7. 디폴트(default) 生成子란 무엇인가?

生成子를 만들지 않았지만 客體를 生成할 때 呼出하면 컴파일러에 依해 自動으로 生成되는 것이 디폴트 生成子이다。(用途는 初期化)

直接 生成子 函數를 만들지 않았어도、客體 生成 時 生成子 函數를 呼出하게 되어있다。

  • 어떻게 만들지 않은 生成子 函數를 使用할 수 있을까?

    모든 클래스의 인스턴스 生成은 生成子 呼出을 同伴한다。生成子 函數를 만들지 않으면 컴파일러에 依해 디폴트 生成子가 自動으로 生成된다。그래서 生成子 函數를 만들지 않아도 呼出해서 使用할 수 있는 것。

8. 生成子의 用途를 說明하시오。

6番에서 說明했던 것처럼、生成子의 用途는 값들의 初期化이다。

9. null에 對하여 說明하시오。

null은 參照變數에 代入했을 때 비어있음을 意味한다。
參照變數에는 住所값이 들어가는데 그곳이 비어 있다는 意味는 아무 곳도 가리키고 있지 않음을 意味한다。(ref가 參照하는 客體가 있었다면 그 關係를 끊는 것을 意味함。) 參照變數를 初期化할 때 使用한다。

또한 JVM으로 하여금 該當 客體가 GC에 依한 메모리 解除 對象이 됨을 알리는 役割을 한다。

10. Java의 命名規則에 對하여 說明하시오。

  • 클래스

    1) 첫文字는 大文字 始作한다。
    2) 合成語는 主로 Camel Case를 使用한다。
    CirclePoint ← Camel Case

  • 메소드(函數)와 變數

    1) 첫文字는 小文字로 始作한다。
    2) 合成語는 主로 Camel Case를 使用한다。(addYourMoney)

  • 常數

    1) 常數는 全體 大文字
    2) 合成語에 snake case를 使用한다。
    → 全體가 大文字이기 때문에 둘 以上의 單語로 쓸 때 區分해서 보여주기 爲해 언더바(_)로 表現(final COLOR_RAINBOW)

  • camel case

    1) 둘 以上의 文字가 結合된 合成語를 이름으로 使用時에 두 番째 單語부터 첫文字를 大文字로 使用한다。
    2) 駱駝의 등처럼 생겼다고 해서 camel case라고 부른다。
    3) 클래스、메소드、變數名은 主로 camel case를 使用한다。

    → 메소드(函數)、變數의 cammel case : addYourMoney、yesOrNo、countMoney

    → 클래스의 cammel case : CircleArea、RectangleArea、StarPoint

  • snake case

    1) 둘 以上의 文字가 結合된 合成語를 이름으로 使用時에 文字와 文字 사이를 언더바(_)로 이어준다。
    2) 常數는 全體를 大文字로 作成하기 때문에 合成語로 이름을 지을 境遇 snake case를 使用한다。

    → 메소드(函數)、變數의 snake case : add_your_money、yes_or_no、count_money

    → 클래스의 snake case : Circle_area、Rectangle_area、Star_point

    → 常數의 snake case : final COLOR_RAINBOW

11. 下段의 內容을 프로그램으로 作成하시오。

노래 한 曲을 나타내는 Song 클래스를 作成하라。
Song클래스는 다음 필드로 構成된다。

  • 曲名을 나타내는 title
  • 歌手를 나타내는 artist
  • 曲이 發表된 年度를 나타내는 year
  • 國籍을 나타내는 country

또한 Song클래스에 다음 生成子와 메소드(函數)를 作成하라。

  • 生成子 2個 : 基本生成子와 媒介變數로 모든 필드를 初期化하는 生成子

  • 曲情報를 出力하는 show() 메소드(函數)

  • main() 메소드(函數)에서는 song客體를 生成하고 show()를 利用하여 曲의 情報를 다음과 같이 出力하라。

    1978年 스웨덴國籍의 ABBA가 부른 Dancing Queen

  • Song.java

    public class Song {
         private String title;
         private String artist;
         private int year;
         private String country;
    
         public Song() {
    
         }
    
         public Song(String title, String artist, int year, String country) {
             this.title = title;
             this.artist = artist;
             this.year = year;
             this.country = country;
         }
    
         public String getTitle() {
             return title;
         }
    
         public void setTitle(String title) {
             this.title = title;
         }
    
         public String getArtist() {
             return artist;
         }
    
         public void setArtist(String artist) {
             this.artist = artist;
         }
    
         public int getYear() {
             return year;
         }
    
         public void setYear(int year) {
             this.year = year;
         }
    
         public String getCountry() {
             return country;
         }
    
         public void setCountry(String country) {
             this.country = country;
         }
    
         public void show() {
             System.out.println(year + "年 " + country + "國籍의 " + artist + "가 부른 " + title);
         }
    
     }
  • SongMain.java

     public class SongMain {
    
         public static void main(String[] args) {
    
             Song song = new Song("Dancing Queen", "ABBA", 1978, "스웨덴");
    
             song.show();
    
         }
    
     }

12. 下段의 內容이 프로그래밍 되도록 Grade를 完成하시오。

  • GradeMain.java

     public class GradeMain {
    
         public static void main(String[] args) {
             Grade me = new Grade(90, 70, 100);
             System.out.println("平均은 " + me.average());
         }
    
     }
  • Grade.java

     public class Grade {
    
         private int kor;
         private int eng;
         private int math;
    
         public Grade(int kor, int eng, int math) {
             this.kor = kor;
             this.eng = eng;
             this.math = math;
         }
    
         public int getKor() {
             return kor;
         }
    
         public void setKor(int kor) {
             this.kor = kor;
         }
    
         public int getEng() {
             return eng;
         }
    
         public void setEng(int eng) {
             this.eng = eng;
         }
    
         public int getMath() {
             return math;
         }
    
         public void setMath(int math) {
             this.math = math;
         }
    
         public double average() {
             int sum = this.kor + this.eng + this.math;
             double avg = sum / 3.0;
    
             return avg;
         }
     }

13. Java 클래스를 作成하는 練習을 해보자。

다음 Main() 메소드를 實行하였을 때 例示와 같이 出力되도록 TV 클래스를 作成하라。

  • TvMain.java

    public class TvMain {
    
         public static void main(String[] args) {
             TV myTV = new TV("LG", 2017, 32);
             myTV.show();
         }
    
     }
  • TV.java

    public class TV {
    
         private String company;
         private int year;
         private int inch;
    
         public TV(String company, int year, int inch) {
             this.company = company;
             this.year = year;
             this.inch = inch;
         }
    
         public String getCompany() {
             return company;
         }
    
         public void setCompany(String company) {
             this.company = company;
         }
    
         public int getYear() {
             return year;
         }
    
         public void setYear(int year) {
             this.year = year;
         }
    
         public int getInch() {
             return inch;
         }
    
         public void setInch(int inch) {
             this.inch = inch;
         }
    
         public void show() {
             System.out.println(company + "에서 만든 " + year + "年 " + inch + "인치 TV");
         }
     }

14. 下段의 BankAccount客體에 對하여 그림을 그리시오。

BankAccount ref1 = new BankAccount();
BankAccount ref2 = ref1;

15. 下段의 內容을 프로그램으로 作成하시오。

  • GugudanMain.java

    public class GugudanMain {
    
         public static void main(String[] args) {
             Gugudan gugudan = new Gugudan();
             gugudan.printGugu(10); //1단부터 10단까지 출력
             gugudan.printGugu(20); //1단부터 20단까지 출력
         }
    
     }
  • Gugudan.java

    public class Gugudan {
    
         public void printGugu(int num) {
    
             int result = 0;
    
             for (int i = 2; i <= num; i++) {
                 for (int j = 1; j <= 9; j++) {
                     result = i * j;
                     System.out.println(i + " x " + j + " = " + result);
                 }
                 System.out.println();
             }
         }
     }
profile
移轉했읍니다。

0개의 댓글