CodeGym /Java Blog /무작위의 /붙어있어? Java 학습의 가장 어려운 부분과 이를 극복하는 방법
John Squirrels
레벨 41
San Francisco

붙어있어? Java 학습의 가장 어려운 부분과 이를 극복하는 방법

무작위의 그룹에 게시되었습니다
아시다시피 코딩 초보자는 Java로 프로그래밍 언어 학습을 시작하는 것이 좋습니다. CodeGym은 가장 준비되지 않은 학생도 Java 학습 프로세스를 소화할 수 있도록 모든 것을 갖추고 있습니다. 그러나 게임화 요소, 쉬운 이야기 및 재미있는 캐릭터가 이 과정을 쉽게 하는 데 도움이 되므로 대부분의 새로운 학습자가 Java의 기초를 최대한 학습하는 데 어려움 없이 진행되는 경우는 거의 없습니다. 붙어있어?  Java 학습의 가장 어려운 부분과 이를 극복하는 방법 - 1오늘 우리는 Java 프로그래밍 기초에서 가장 어려운 영역 중 일부를 살펴보고 많은 사람들이 이를 어렵다고 생각하는 이유와 그에 대해 할 수 있는 일이 있는지 알아보려고 합니다.

1. 제네릭

Java의 제네릭은 매개 변수가 있는 형식입니다. 제네릭 유형을 만들 때 유형뿐만 아니라 작동할 데이터 유형도 지정합니다. 제네릭은 Java 학습자가 이해하기 가장 어려운 Java 부분 중 하나로 자주 언급됩니다. “나의 주요 문제는 여전히 제네릭을 다루는 것입니다. 따라야 할 매개 변수가 있는 메서드가 있으면 훨씬 쉽지만 직접 작성해야 할 때는 혼란스러워집니다.”라고 익명의 Java 학습자가 말했습니다.

팁 및 권장 사항

숙련된 프로그래머이자 대학 교수인 Ravi Reddy가 Java의 Generics에 대해 다음과 같이 설명 합니다. “Java Generics는 C++ 템플릿이 하지 않는 한 가지 기능을 수행합니다. C++ 템플릿의 구현은 간단한 전처리기 트릭이며 형식 안전을 보장하지 않습니다. Java의 제네릭은 C++ 템플릿과 비슷하지만 추가 형식 안전성이 있습니다. 그리고 IMHO, 유형 안전은 좋은 개발 환경의 필수 기능입니다. 그리고 네! 매개변수와 유형 사이의 정신적 변화 때문에 혼란스러울 수 있습니다. 그러나 나는 그것들을 마스터하기 위해 시간을 보내는 것이 노력할 가치가 있다고 믿습니다. 인터페이스와 제네릭을 이해하고 나면 Java에서 훨씬 더 잘 "생각"할 수 있다는 것을 알게 되었기 때문입니다."

2. 멀티스레딩

Java의 멀티스레딩은 응용 프로그램에서 CPU를 최대한 활용하기 위해 둘 이상의 스레드를 동시에 실행하는 프로세스입니다. 멀티스레딩은 매우 중요한 작업을 해결하고 프로그램을 더 빠르게 만들 수 있습니다. 종종 몇 배 더 빠릅니다. 그러나 그것은 많은 새로운 Java 학습자가 막히는 경향이 있는 주제 중 하나로 간주됩니다. 다중 스레딩이 문제를 해결하는 대신 문제를 생성할 수 있기 때문입니다. 다중 스레딩이 생성할 수 있는 두 가지 특정 문제는 교착 상태와 경합 상태입니다. 교착 상태는 여러 스레드가 서로 보유하고 있는 리소스를 기다리고 있고 그 중 어느 것도 계속 실행할 수 없는 상황입니다. 경쟁 조건은 멀티스레드 시스템 또는 응용 프로그램의 설계 오류로, 시스템 또는 응용 프로그램의 작동은 코드 부분이 실행되는 순서에 따라 달라집니다.

팁 및 권장 사항

여기 좋은 추천 입니다인기 있는 Q&A 웹사이트인 StackExchange의 소프트웨어 아키텍트이자 적극적인 사용자인 S.Lott가 멀티스레딩을 처리하는 방법에 대해 다음과 같이 말했습니다. “멀티스레딩은 간단합니다. 멀티스레딩을 위한 애플리케이션 코딩은 매우 쉽습니다. 간단한 요령이 있는데, 이것은 잘 설계된 메시지 큐를 사용하여 스레드 간에 데이터를 전달하는 것입니다. 어려운 부분은 여러 스레드가 어떤 방식으로든 공유 객체를 마술처럼 업데이트하도록 하는 것입니다. 사람들이 존재하는 경쟁 조건에 주의를 기울이지 않기 때문에 오류가 발생하기 쉬운 때입니다. 많은 사람들이 메시지 대기열을 사용하지 않고 공유 개체를 업데이트하려고 시도하고 스스로 문제를 만듭니다. 어려워지는 것은 여러 대기열 간에 데이터를 전달할 때 잘 작동하는 알고리즘을 설계하는 것입니다. 어렵습니다.

3. 클래스패스 문제

클래스 경로 오류는 또한 Java 개발자가 일상 업무에서 직면하는 가장 불만이 많은 문제 중 하나로 간주됩니다. “클래스 경로 문제는 디버그하는 데 시간이 오래 걸릴 수 있으며 최악의 시간과 장소에서 발생하는 경향이 있습니다. 릴리스 전, 개발 팀이 거의 또는 전혀 액세스할 수 없는 환경에서 자주 발생합니다. 또한 IDE 수준에서 발생할 수 있으며 생산성 저하의 원인이 될 수 있습니다.”라고 숙련된 Java/Javascript 개발자이자 프로그래밍 관련 자습서 작성자인 Vasco Ferreira는 말합니다 .

팁 및 권장 사항

“클래스패스 문제는 언뜻 보기에 그렇게 낮은 수준이거나 접근하기 어려운 문제가 아닙니다. 특정 디렉터리에 존재/존재하지 않는 zip 파일(jar), 해당 디렉터리를 찾는 방법, 액세스가 제한된 환경에서 클래스 경로를 디버깅하는 방법에 관한 것입니다. 클래스 로더, 클래스 로더 체인, 상위 우선/상위 최종 모드와 같은 제한된 개념 집합을 알면 이러한 문제를 효과적으로 해결할 수 있습니다.”라고 전문가는 설명합니다.

4. 다형성과 올바른 사용

OOP의 원리에 관해서는 많은 사람들이 다형성을 이해하는 데 어려움을 겪었다고 말합니다. 다형성은 객체의 특정 유형에 대한 정보 없이 동일한 인터페이스를 가진 객체를 동일한 방식으로 처리하는 프로그램의 기능입니다. 다형성은 매우 기본적인 주제임에도 불구하고 다소 광범위하며 Java 기반의 상당 부분을 형성합니다. 많은 학생들에게 다형성은 Java 학습의 첫 번째 어려움입니다. 모두 다른 맥락에서 사용되는 다형성의 다른 형태가 있기 때문에 혼란스러울 수 있습니다.

팁 및 권장 사항

다형성을 배우는 것 외에는 다형성을 다루는 다른 방법이 없습니다. 코펜하겐 대학교에서 프로그래밍을 가르치는 Torben Mogensen은 다음과 같이 설명합니다 .이 개념은 다음과 같습니다. “단순 오버로딩: +는 정수 추가, 부동 소수점 추가 및 (일부 언어에서) 문자열 연결을 모두 의미할 수 있습니다. 하위 유형 다형성: B가 A의 하위 유형(상속)인 경우 유형 A의 값을 기대하는 컨텍스트에서 유형 B의 모든 값을 사용할 수 있습니다. 매개변수 다형성: 유형 매개변수를 사용하여 유형을 매개변수화할 수 있습니다. 다른 컨텍스트는 다른 형식 인수를 제공할 수 있으므로 매개 변수가 있는 형식을 다른 구체적인 형식으로 인스턴스화합니다. 이것은 "템플릿" 또는 "제네릭"이라고도 하며 일반적으로 꺾쇠 괄호(예: T<A>)를 사용하여 지정되는 OO 언어로 되어 있습니다. 인터페이스 다형성. 이것은 기본적으로 하위 유형 다형성을 특정 인터페이스를 구현하는 하위 유형으로 제한하거나 매개변수 다형성을 특정 인터페이스를 구현하는 유형 매개변수로 제한하는 메커니즘입니다."

5. 반사

리플렉션은 프로그램이 실행되는 동안 프로그램에 대한 데이터를 탐색하는 메커니즘입니다. 리플렉션을 사용하면 필드, 메서드 및 클래스 생성자에 대한 정보를 탐색할 수 있습니다. 또한 컴파일 시간에는 없었지만 런타임 동안 사용할 수 있게 된 형식으로 작업할 수 있습니다. 오류 정보를 발행하기 위한 반영 및 논리적으로 일관된 모델을 통해 올바른 동적 코드를 생성할 수 있습니다. 그러나 많은 사람들에게 Reflection을 사용하는 방법을 파악하는 것은 그리 쉬운 일이 아닙니다.

팁 및 권장 사항

“리플렉션과 자바의 경우 리플렉션을 통해 정적으로 타입되도록 설계된 자바를 동적으로 타입화할 수 있다. 동적 타이핑은 본질적으로 악하지 않습니다. 예, 프로그래머가 특정 OOP 원칙을 위반할 수 있지만 동시에 런타임 프록시 및 종속성 주입과 같은 많은 강력한 기능을 허용합니다. 예, Java를 사용하면 리플렉션을 사용하여 자신의 발을 쏠 수 있습니다. 그러나 매우 명시적으로 발에 총을 겨누고 안전 장치를 벗고 방아쇠를 당겨야 합니다.”라고 숙련된 Java 프로그래머이자 애플리케이션 설계자인 Jayesh Lalwani는 설명합니다 .

6. 입력/출력 스트림

스트림을 사용하면 인터넷, 컴퓨터의 파일 시스템 등 모든 데이터 소스로 작업할 수 있습니다. 스트림은 범용 도구입니다. 이를 통해 프로그램은 어디에서나 데이터를 수신하고(입력 스트림) 어디로든 보낼 수 있습니다(출력 스트림). 그들의 임무는 동일합니다. 한 곳에서 데이터를 가져와 다른 곳으로 보내는 것입니다. 스트림에는 입력 스트림(데이터 수신에 사용됨)과 출력 스트림(데이터 전송에 사용됨)의 두 가지 유형이 있습니다. 많은 사람들이 스트림 사용을 이해하기 어렵게 만드는 것은 Java에 여러 I/O 스트림 클래스가 있다는 사실입니다.

팁 및 권장 사항

“Java에는 주로 두 가지 요인으로 인해 많은 I/O 스트림 클래스가 있습니다. 먼저 유산입니다. 일부 클래스는 역사적인 이유로 여전히 존재하며 유해한 것으로 간주되지 않으므로 더 이상 사용되지 않습니다. 둘째, 유연성. 응용 프로그램마다 요구 사항이 다르므로 요구 사항에 따라 여러 옵션이 있습니다. 유용한 추상화는 읽을 때 명확성을 제공하며 몇 줄의 코드로 많은 작업을 수행할 수 있습니다.”라고 스웨덴의 Java 전문가인 Jonas Mellin은 말합니다 . Java의 어떤 측면이 가장 이해하기 어려웠거나 한 동안 고착되어 있었습니까? 의견에 경험을 공유하십시오.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION