본문 바로가기
728x90
반응형

Java59

[Java Basic] 23. 예외처리(Exception Handling) Java 연습을 위해 코드를 작성하다보면 여러 에러를 맞닥드리게 된다. 작성한 코드가 에러를 가지는 경우, Eclipse의 콘솔창에는 아래와 같은 형태의 문구가 출력된다. 에러가 발생하면서 나타나는 가장 큰 문제는 작성한 프로그램이 비정상 종료를 한다는 것이다. 다른 말로 하자면, 개발자들이 의도한대로 프로그램이 끝까지 동작하지 못하고 중단된다는 것이다. 예를 들어보자. 사용자가 금액을 입력하면, 해당 금액만큼 인출하는 프로그램이 있다고 해보자. Java로 연습을 많이 진행해보신 분들이라면, 정수 외의 값이 입력되는 경우 에러가 발생한다는 것을 금방 알아차릴것이다. 위의 예시의 경우, 필자가 의도한 프로그램의 동작이 " $$$ 원이 인출되었습니다:" 에서 종료되는 것임에도 불구하고, 에러로 인해 12번 .. 2022. 8. 3.
[Java Basic] 22. 추상클래스와 인터페이스 Java에서 클래스는 객체의 특성과 행위를 정의하는데 사용한다. 그리고 객체를 정의한 클래스 사이 공통점이 많이 존재하는 경우, 관리를 위해 유사한 클래스를 묶어 관리할 수 있도록 상위 클래스를 정의하기도 한다. 바로 직전의 포스팅에서 구매 목록인 "문구"와 "과일"을 "품목" 클래스로부터 상속받아 사용하게 하는 것이 그 예이다. 즉, 지금까지 필자가 포스팅을하며 작성해왔던 클래스들은 각 객체의 특성과 행위를 매우 구체적으로 정의한 것이다. 하지만, 모든 객체를 이런식으로 구체화하기에는 현실적인 어려움이 있다. 따라서 Java에서는 구체화 할 수 없는 객체에 대해 정의할 수 있도록 추상클래스와 인터페이스라는 것을 제공한다. 일반 클래스 파일이 완성된 계획서라면, 추상클래스와 인터페이스는 미완성 계획서와 .. 2022. 7. 31.
[Java Basic] 21. 클래스 다형성 Java 클래스는 다형성이라는 성질을 띄고 있다. 다형성(Polymorphism)은 여러(多, Poly) 형태(形, morphology)를 가질 수 있는 성질을 말한다. 다형성은 클래스로부터 만들어지는 인스턴스를 다른 클래스의 인스턴스로 변환할 수 있도록 만듦으로써, 하나의 객체가 여러 형태를 띌 수 있도록 만드는 것이다. 지금까지는 인스턴스 생성을 위해 각 클래스 이름으로 참조변수 선언과 생성을 진행해왔기 때문에 "무슨 귀신 씨나락 까먹는 소리를 하는가"라는 의문이 들 수도 있다(필자 역시 이 부분을 배울 때 그런 생각을 했다...) 사실 실습 없이 설명하기에는 어려운 부분이 많아 바로 예시와 함께 정리해보려 한다. 1. 상속관계의 인스턴스 형 변환 필자는 기본 패키지에 Main, ParentLee ,.. 2022. 7. 27.
[Java Basic] 20. final 제어자 Java에서 제어자는 클래스 또는 클래스 내부의 정보에 대한 접근을 통제하는 역할을 한다. 제어자는 크게 접근 제어자와 기타 제어자로 나뉘며, 필자는 지난 포스팅에서 접근 제어자 4가지가 어떻게 동작하는지 확인해보았다. 이번 포스팅에서는 기타 제어자에 대해 알아보려 한다. 기타 제어자는 지금까지 포스팅에서 많이 사용한 static 외에도 final, abstract, synchronized, strictfp 등 여러 종류가 있지만, static과 final, abstract를 제외하고는 기초 단계에서 크게 사용할 일이 없다고 한다... 더군다나 static은 필자가 java 포스팅 초반부에 설명을 한 적이 있어서 이번에는 final에 대해서만 포스팅하려 한다. 참고로 abstract는 추상 클래스/매서드.. 2022. 7. 23.
[Java Basic] 19. 접근 제어자(Access Modifier) Java에서 클래스를 사용하여 프로그래밍을 작성하다보면, 클래스 내에 존재하는 멤버 변수에 대한 내용을 함부로 변경하거나 조회하는 것을 금지하고 싶은 경우가 있다. 아래의 예시를 보자. 필자가 어떤 사이트에 가입한 회원 정보와 관련된 클래스인 Customer를 아래와 같이 작성한 뒤, Main 함수에서 2명의 고객에 대해 인스턴스를 생성했다고 가정해보자. 두 클래스는 default package에 포함되어 있다. Customer 클래스의 멤버변수 중 절대 타인에게 보여서는 안되는 가장 중요한 정보가 비밀번호(cust_pw)다. 따라서 고객 본인 외에 타인에게 이 비밀번호는 절대 노출되어서는 안된다. 하지만 인스턴스로 비밀번호 변수를 호출하면 아무런 방해없이 이 정보를 확인할 수 있게 된다. 더 심한 경우.. 2022. 7. 21.
[Java Basic] 18. 패키지와 Import 1. Java의 Package는 무엇인가? 지금까지 필자가 작성한 Java 포스팅에서, 필자는 이제 프로그래밍을 시작하는 독자분들을 위해 하나의 .java 파일에 하나 이상의 클래스를 통째로 작성하여 예시를 들어왔었다. 하지만 Java에서 .java 파일이 컴파일되어 하나의 class 파일을 생성한다는 것을 상기해보면, 하나의 .java 파일에는 하나의 객체에 대한 내용만 클래스로 작성하는 것이 올바른 방법이다. 위의 코드는 필자가 클래스 상속과 관련된 내용에 대해 설명하면서 사용한 코드다. ClassEx.java 파일에 무려 3개의 클래스 코드가 작성이 되어 있는데, 클래스 Cessna150과 FA18EF는 각각 Cessna150.java, FA18EF.java 파일에 별도로 작성을 하는 것이 좋다는 .. 2022. 7. 16.
[Java Basic] 17. 상속 관계 클래스의 매서드 오버라이드 지난 포스팅에서는 클래스 사이 상속 및 포함 관계에 대해 알아보았다. 상속관계에 있는 클래스에서, 하위(자식) 클래스는 아무런 정의가 되어 있지 않더라도 상위(부모)로 지정된 클래스의 멤버변수와 매서드를 마음대로 가져와서 쓸 수 있음을 지난 포스팅에서 확인했었다. 그런데, 상위 클래스의 매서드를 빌려 쓰는 것도 문제가 될 수 있다. 예를 들어, 사람이라는 객체를 클래스로 정의했다고 해보자. 클래스에는 이 사람의 성별, 나이, 직업, 연봉 등의 정보가 포함되어 있다고 하자. 그리고 사람의 정보를 출력하는 매서드가 아래와 같이 정의되어 있다고 가정하자. 이 Human 클래스 하위에 Adult와 Child 클래스를 생성한다고 해보자. 그럼, Adult와 child 모두 print_info() 매서드를 사용할 .. 2022. 7. 11.
[Java Basic] 16. 클래스의 상속관계와 포함관계 객체지향에서 클래스는 특정 객체의 특성 및 행위를 정의한 일종의 정의서다. 필자의 앞선 클래스 관련 포스팅을 보았다면 알겠지만, 클래스를 사용하면 우리 주변의 물체를 코딩으로 쉽게 구현할 수 있다. 그런데, 모든 물체를 하나의 클래스로 일일이 구현하기에는 비효율적인 면이 분명 존재한다. 예를 들어보자. 요즘 영화관에서 "탑건"이 매우 인기를 끌고 있으니, 비행기를 객체로 클래스를 한 번 만들어보려 한다. 필자는 두 모델에 대한 비행기를 클래스로 정의하려 한다. 하나는 경비행기인 Cessna 150이고, 다른 하나는 영화에 등장하는 미 해군 주력 기종인 F/A-18 E/F 호넷이다. 세스나는 Cessna150이라는 이름으로, 호넷은 FA18EF라는 이름으로 각각의 클래스를 생성하고 일부 특성과 엔진 On_.. 2022. 7. 11.
[Java Basic] 15. 클래스 생성자와 초기화블럭 필자가 이전에 클래스에 대한 첫 포스팅을 진행하면서, 신호등에 대한 객체를 정의한 클래스를 예시로 들었다. 신호등 클래스를 선언하면서, 객체의 특성을 나타내는 인스턴스 변수들을 클래스 내에 미리 정의해주었다. 그리고 특성 중 변경이 필요한 내용은, 특성을 정의한 변수를 인스턴스를 통해 직접 변경을 진행해주어야 한다. 그런데, 각 신호등의 색상을 인스턴스화 한 뒤 하나씩 바꿔주려니 코드도 길어진다. 그리고 클래스 내 특성이 수 십 개 정의되어 있고, 이들을 직접 하나하나 코드로 변경해야한다면 인스턴스 변수값 변경 코드만으로도 몇 백 줄은 금방 채울 수 있을 것이다. 클래스로부터 인스턴스 생성 시, 인스턴스 특성 값을 생성과 동시에 지정할 수 있는 방법은 없을까? 또한 필자는 신호등의 인스턴스가 생성되면, .. 2022. 7. 10.
[Java Basic] 14. Java 매서드 오버로딩(Overloading)과 가변인자 Java의 일반적인 매서드는 인자의 입력값을 통해 연산을 진행하여 결과로 돌려준다(물론, 입력, 출력이 없는 매서드도 있다). 지난 포스팅 서두의 메서드 관련 내용을 이해했다면, 이제 이런 질문이 생기는 분들도 있을 것이다. "System.println() 매서드는 인자로 정수형, 실수형, 문자형 심지어 문자열도 들어가는데, 이는 어떻게 구현된 것인가요?" 1. 오버로딩(Overloading) 필자가 매서드에 들어온 정수형 인자를 화면에 출력하는 매서드를 별도로 만든다고 가정해보자. 아마 아래와 같은 형태가 될 것이다. 코드를 보면, print_test 매서드는 인자로 반드시 정수형 타입을 받도록 정의되어 있다. 따라서 123456789라는 숫자는 정상적으로 출력된다. 하지만 저 인자값을 실수로 바꾸면 .. 2022. 7. 6.
[Java Basic] 13. Java 매서드 작성, Java 클래스와 메모리 다른 프로그래밍 언어를 해 보셨던 분들이라면 프로그래밍에서 함수의 역할을 잘 알고 있을 것이다. Java의 클래스 내 매서드는 함수를 조금 다른 이름으로 부르는 명칭인데, 기존의 절차적 프로그래밍의 함수와는 약간의 차이가 있어서 아마 매서드(Method)라는 이름이 붙은것이 아닐까 싶다. 이번 포스팅에서는 매서드, 즉 Java에서의 함수 정의 방법과 필요성에 대해 알아보려 한다. 그리고, 매서드만으로는 이번 포스팅의 내용이 그닥 많지는 않기 때문에, 클래스 선언과 객체 생성 시 메모리에서 일어나는 일에 대해서도 간략하게나마 다루어보려한다. 1. Java 클래스 매서드 매서드는 클래스 내의 함수다. 클래스가 특정 객체의 특성과 행위에 대해 정의된 것이며, 특성은 멤버변수, 행위는 매서드로 정의한다고 이전의.. 2022. 7. 5.
[Java Basic] 12. Java 클래스와 객체 개요 Java는 객체지향 프로그래밍의 한 종류다. 객체 지향이란, 우리 주변에 볼 수 있는 물리적인 또는 추상적인 사물이나 개념의 특성 또는 행동을 파악하고, 이를 하나의 객체(Object)에 정의하는 프로그래밍의 한 방식이라고 필자는 정의한다. 태초에 가장 많이 사용했던 C 언어(지금도 임베디드 등에서 사용하기는 하지만)의 경우, 절차적 프로그래밍이라고 해서 마치 요리 레시피와 같이 위에서 순차적으로 코드를 실행하는 방식이었다. 하지만 절차적 프로그래밍의 경우, 실행하고자 하는 작업에 대해서는 명확히 구현할 수 있었지만, 특정 개체가 특정 행위를 하도록 만들기에는 어려움이 있었다. 가장 단적인 예로, 사람의 경우 이름과 나이, 성별이라는 특성을 가지고 "나이를 먹어간다"는 자연적인 행위를 하는 존재지만, 절.. 2022. 7. 4.
728x90
반응형