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.public2.static3.void4.메서드 이름은 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를 만들고 실행 가능. 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 8javac Hello.java java Hello arg1 arg2java se 11 이후java Hello.java test1 test2 javac에만 존재하는 주요 옵션bashCopyEditjavac -d out Hello.java-d out: .class 파일의 출력 디렉토리 지정. javac와 java 모두에서 사용 가능한 옵션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"