| English | 의미 |
|---|---|
| algorithm/ˈælɡərɪθəm/ | 알고리즘 |
| high-level language/haɪ ˈlevl ˈlæŋɡwɪdʒ/ | 고급 언어 |
| compiler/kəmˈpaɪlə/ | 컴파일러 |
| syntax error/ˈsɪntæks ˈerə/ | 구문 오류 |
| logic error/ˈlɒdʒɪk ˈerə/ | 논리 오류 |
깔끔한 구현도 잘못된 가격에 판매될 수 있음
- A shop program intends to apply a 10% discount to a price of 100, but calculates price * 10 / 100 as the amount to pay.
- 할인의 금액 10을 계산하지만, 할인된 가격 90은 아닙니다. 잘못된 공식을 구현하면서도 코드는 컴파일 및 실행될 수 있습니다.
알고리즘이란 무엇인가?
- 알고리즘이란 문제를 해결하는 유한하고 순서 있는 단계의 집합입니다. 레시피는 알고리즘입니다: 정확한 단계들이 순서대로 이루어져 결과를 도출합니다.
- 프로그래밍은 알고리즘을 컴퓨터가 실행할 수 있는 코드로 변환하는 기술입니다. 여기서 가르치는 유한 알고리즘의 경우, 유효한 입력이 유한한 단계 후 결과로 이어져야 합니다. 프로그램은 지속적 서비스를 실행하기도 하므로, 모든 프로그램이 한 번만 종료되는 계산은 아닙니다.
프로그래밍 언어
- 컴퓨터는 머신 코드(원시 0와 1)를 실행합니다 — 인간이 직접 쓰기 어렵습니다. 우리는 Java 같은 고수준 언어로 코딩합니다: 가독성이 좋고 영어와 유사합니다.
- Java 코드는 무엇을 할지를 말하며, 번역기가 이를 머신 명령어로 바꿉니다. 이 과정은 Java를 통해 문제 해결법을 가르칩니다.
컴파일러
- javac와 같은 컴파일러는 Java 소스 파일을 클래스 파일로 변환하고 문법, 타입 및 이름을 검사합니다. Java는 바이트코드로 컴파일되며, 이를 **자바 가상 머신(JVM)**이 실행합니다.
- "Write once, run anywhere": 클래스 파일은 호환 가능한 JVM과 필요한 라이브러리가 있는 다양한 플랫폼에서 실행될 수 있으며, 최신 클래스 파일 버전에는 이를 지원하는 런타임이 필요합니다. 컴파일 오류(실행 전 포착)는 실행 중 오류(실행 중 포착)와 다릅니다.
알고리즘을 가장 잘 설명한 것은...
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
유한하고 순서가 있는 단계들이 끝나는 것 — 그것이 알고리즘입니다.
Java 컴파일러는 사용자의 소스 코드를 ...로 변환합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
Java는 바이트코드로 컴파일되며, JVM이 이를 실행합니다.
컴파일과 실행은 되지만 잘못된 결과를 내는 프로그램은 ...를 가집니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
컴파일 오류 없이 출력이 틀린 경우 = 논리 오류입니다.
구문 오류(syntax error)는 Java 프로그램이 컴파일되지 못하게 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
문법 오류 발생 → 컴파일러가 빌드하지 않습니다.
프로그램이 오류 없이 컴파일된다면 반드시 올바른 결과임을 보장합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
컴파일러는 문법, 데이터 타입 및 변수명을 확인하지만 의도한 비즈니스 로직이나 올바른 출력 결과를 보장하지는 않습니다.
모든 런타임 예외는 매칭되는 예외 처리 코드가 이를 포착하더라도 프로그램 실행을 반드시 종료시킵니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
예외는 포착되어 처리될 수 있으며, 포착되지 않은 예외는 실행을 종료시킬 수 있습니다.
값이 0인 int 변수 zero에 대해 ArithmeticException을 발생시키는 연산은?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
정수 제로除法는 예외를 발생시키며, 부동소수점 제로除法는 IEEE 부동소수점 규격에 따른 결과를 산출합니다.
오류의 종류
- 구문 오류는 Java의 문법을 위반하여 컴파일러가 빌드를 거부합니다. 런타임 오류는 실행 중 발생하며, 미포착 예외가 프로그램을 종료할 수 있습니다. 정수 변수를 0으로 나누면 ArithmeticException이 발생하지만, 부동소수점 나눈 규칙은 다릅니다.
- 논리 오류는 정상적으로 실행되지만 잘못된 결과를 산출합니다. 디버깅은 이 세 가지 모두를 찾고 수정하는 과정입니다.
소스 코드부터 실행 가능한 프로그램까지
Java 소스가 어떻게 실행 가능한 프로그램으로 변하는지 확인합니다.
컴파일되는 프로그램이 자동으로 올바른 것은 아닙니다. 컴파일러는 구문 및 기타 컴파일 타임 오류(타입 및 이름 오류 포함)를 포착합니다. 논리 오류—잘못된 공식이나 조건—는 깔끔하게 컴파일되어 실행되지만 잘못된 결과를 생성합니다. 반드시 알고리즘의 출력을 테스트하고, 단순히 빌드되는지 여부만 확인하지 마십시오.
Match each defect to its category.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
The categories depend on when and how the defect is detected; successful compilation does not establish the intended result.
두 숫자 a와 b 중 큰 값을 찾는 알고리즘:
- 단계 1:
a > b가 크다면, 정답은a입니다. - 단계 2: 그렇지 않다면, 정답은
b입니다. - 유한하고 순서 있으며 항상 종료됩니다—Java로 코딩할 준비가 된 유효한 알고리즘입니다.
추론을 새로운 사례로 확장하기
- 할인 출력을 알려진 사례와 대조하십시오. 이 예제에서 100은 90을, 0은 0을 제공해야 합니다; 정수 나눈이 소수 연산임을 가정하기보다 명시된 반올림 정책 하에 비정수 입력을 포함하십시오.
- 컴파일러는 문장 부호 실수뿐만 아니라 타입 및 이름 오류도 포착합니다. 반면, 예외는 실행 중 처리될 수 있으며, 성공적인 컴파일은 의도한 결과나 런타임 실패 부재를 보장하지 않습니다.
알고리즘은 문제를 해결하는 유한하고 순서 있는 단계의 집합이며, 프로그래밍은 이를 코드로 변환합니다. Java는 컴파일러가 JVM을 위한 바이트코드로 변환하는 고수준 언어입니다. 문법 오류, 실행 시 오류, 논리 오류를 주의하십시오. 컴파일이 성공했다고 해서 결과가 반드시 옳다는 보장은 없습니다.