본문 바로가기
728x90

jvm구조3

[JAVA] start()와 run() 메서드의 결정적 차이 : 왜 run()을 직접 호출하면 안 될까? 자바 멀티쓰레드 프로그래밍을 처음 접하는 개발자들이 가장 흔하게 저지르는 실수 중 하나는 바로 쓰레드를 실행할 때 run() 메서드를 직접 호출하는 것입니다. 코드상으로는 아무런 에러가 발생하지 않고 원하는 로직이 실행되는 것처럼 보이지만, 이는 사실 '멀티쓰레딩'이 아닌 '단일 쓰레드' 환경에서 함수를 호출한 것에 불과합니다. 본 포스팅에서는 Java 가상 머신(JVM) 내부에서 start()와 run()이 어떻게 다르게 동작하는지, 그리고 왜 반드시 start()를 통해서만 쓰레드를 기동해야 하는지 그 기술적 배경을 심층적으로 파헤쳐 보겠습니다.1. start()와 run()의 핵심 개념 차이간단히 요약하자면, run()은 단순히 수행할 작업이 담긴 일반 메서드일 뿐이고, start()는 새로운 실행.. 2026. 1. 21.
[JAVA] final 메서드는 오버라이딩이 가능한가요? 설계의 마침표를 찍는 법 객체지향 프로그래밍(OOP)의 핵심 중 하나는 상속과 다형성입니다. 자식 클래스가 부모 클래스의 기능을 물려받아 자신만의 방식으로 재정의하는 '오버라이딩(Overriding)'은 자바 개발자에게 매우 익숙한 개념이죠. 하지만 때로는 부모의 기능을 절대 바꾸지 못하도록 '보호'해야 할 때가 있습니다. 이때 사용하는 키워드가 바로 final입니다. 오늘은 "Java final 메서드는 오버라이딩이 가능한가요?"라는 질문에 대한 명확한 답변과 함께, 왜 우리가 실무에서 이 키워드를 신중하게 사용해야 하는지 깊이 있게 다뤄보겠습니다.1. 결론: final 메서드는 오버라이딩할 수 없습니다자바에서 메서드 선언부에 final 키워드가 붙으면, 해당 메서드는 최종적인 상태임을 의미합니다. 즉, 하위 클래스에서 이 메.. 2026. 1. 17.
[JAVA] 자바의 뿌리, Object 클래스가 모든 객체의 정점에 서 있는 이유와 철학적 배경 자바(Java)를 처음 접하는 개발자든, 숙련된 시니어 개발자든 관계없이 우리는 항상 java.lang.Object라는 거대한 뿌리 위에 코드를 작성합니다. 우리가 명시적으로 extends를 선언하지 않아도 모든 클래스는 자동으로 Object를 상속받습니다. "왜 그래야만 하는가?"라는 질문은 자바의 설계 철학과 메모리 관리, 그리고 다형성의 핵심을 관통하는 아주 중요한 질문입니다. 오늘은 단순히 '자바의 문법'을 넘어, 왜 Object 클래스가 최상위 클래스로 설계되었는지 그 가치와 실무적 이점에 대해 심층적으로 분석해 보겠습니다. --- ## 1. 다형성의 일관성 확보 (The Power of Polymorphism)Object 클래스가 모든 클래스의 조상인 가장 큰 이유는 '모든 객체를 하나의 타입.. 2026. 1. 16.
728x90