🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

Java SE 17 Programmer 1 (Java silver) 1장 오답노트

Java SE 17 Programmer 1 (Java silver) 1장 오답노트

Q1.

이름공간?, 엑세스제어를 제공? 이게 무슨말이야.. 그리고 패키지에 속하지않은 클래스도 존재하는거아니야?

A1.

이름공간을 제공한다 -> 중복을 피하기위해, 이름을 다르게 설정가능하게 만든다라는 뜻.

엑세스제어를 제공한다 -> public static default 같이 외부내부 패키지에따른 접근제어자를 뜻하는것.

패키지에 속하지않은 클래스도 존재하는거 아님? -> 아님, 패키지 이름을 생략한 클래스는 무명패키지에 속해있는것. 클래스는 무조건 패키지안에 속해있음.


 

Q2.

자동으로 import되는것?

A2.

java.lang 패키지 (String, Integer...) 자동임포트됨 만약 안되면 java.lang.String = "A"

이렇게 매번 적어서 사용해야함.

또, 같은 패키지안 클래스도 자동 import됨

 


Q3.

extends 문제, 다만 부모클래스의 패키지 선언이 안되어있고 자식클래스는 패키지 선언이 되어있음.

-> 부모클래스 패키지 선언 안되어있는거 눈치를 못챔

A3. 패키지가 서로 다르므로 컴파일 에러나옴

package infopackage1;

public class InfoSample extends Sample {
    public static void main(String[] args) {
        System.out.println(num);
    }
}

 

Sample 클래스는 무명클래스에 속해있으므로 extends에서 이미 컴파일 에러가 남



Q4.

어플리케이션의 엔트리포인트가 되는 메서드가 뭔소리야, 또 이 메서드가 되기위한 조건은?

A4.

엔트리포인트 메서드는 main 메서드를 의미함

main 메서드가 되는 조건에 대한 문제.

1.public

2.static

3.void

4.메서드 이름은 main 이여야함

5.String 배열형, 또는 가변형 -> public static void main(String... args) 도 가능


Q5.

java 커멘드의 실행에 관한문제. 해당 문제의 개념을 몰랐음.

A5.

java 커멘드란, JVM을 기동하기위한 커멘드.

java 완전수식 클래스명 [인수 인수...]

[] 안에있는 인수는 기동 파라미터, 커멘드라인 인수 라고 부른다.

java 커멘드 실행후 동작순서

JVM 기동 -> 지정클래스로드 -> String배열 오브젝트 작성, 기동파라미터를 격납 
-> 기동파라미터를 가지고있는 String배열의 오브젝트의 참조값을 인수로 전달후 main 메서드 실행

예시문제

java Asd sea bal java

public class Asd {
   public static void main(String[] args){
    System.out.println(args[0] + " " + args[1]);
  }
}

sea bal이 출력됨


Q6.

javac 커맨드의 개념과 Java SE 11 소스파일 모드

A6.

1.

javac 커맨드의 개념

  • javac자바 소스 파일(.java)을 컴파일해서 .class 바이트코드 파일로 만드는 명령어.

  • Java SE 11 이전에는 항상 javac를 거쳐야 .class를 만들고 실행 가능.

  1.  

Java SE 11의 변화: 소스파일 모드 추가

  • java 명령으로 .java 파일을 바로 실행할 수 있는 "소스파일 모드"가 추가.

  • javac를 먼저 호출할 필요 없이 즉시 실행

     

예제

public class Hello {
    public static void main(String... args) {
        System.out.println("Hello, Java 11!");
        for (String arg : args) {
            System.out.println("Arg: " + arg);
        }
    }
}

java se 8

javac Hello.java
java Hello arg1 arg2

java se 11 이후

java Hello.java test1 test2 

 

javac에만 존재하는 주요 옵션

bashCopyEditjavac -d out Hello.java
  • -d out: .class 파일의 출력 디렉토리 지정.

     

     

javacjava 모두에서 사용 가능한 옵션

bashCopyEditjavac --source 8 Hello.java
java --source 8 Hello.java
  • --source 8:

    • 소스코드의 문법을 Java 8 규칙으로 해석하도록 명시.

    • .java 파일 확장자가 아니거나 이전 버전 문법 강제할 때 유용.특별 사례

      javaCopyEdit// 파일명: Sample.java
      public class Test {
          public static void main(String... args) {
              System.out.println("Hello from Test class!");
          }
      }
      
      bashCopyEditjava Sample.java
      
      • 소스파일 모드에서는 public 클래스명과 파일명이 달라도 실행 가능
        (Java SE 11 이상에서만).


Q7.

기동파라미터와 더블쿼테이션 " 의 사용

A7.

스페이스(공백)를 각 기동파라미터를 나누는 기준으로 사용.

java Sample a b c

args = {"a", "b", "c"}


만약 스페이스가 포함된 문자열을 하나의 파라미터로 넘기고 싶으면 " 더블쿼테이션으로 감쌈

  java Sample "a b c"

args = {"a b c"} (하나의 요소로 취급)


" 더블쿼테이션 자체를 값으로 전달하려면 ¥" → 실제로는 \" 를 사용하여 escape해줌

예:

  java Sample ¥"abc¥"

args[0] = " \"abc\" "

주의점

  • Windows CMD는 "로 감싼 문자열 내부에 다른 문자열이 바로 붙어 있으면 그냥 붙여서 하나의 인자로 본다.

     

"a "b → "a b"

댓글을 작성해보세요.

채널톡 아이콘