반응형

프로그래밍 언어/Java 14

[Java]toString 메서드에 대한 이해

최근 자바의 정석이란 책을 공부하며 다음과 같은 코드를 만났다.import java.util.ArrayList; class Fruit { public String toString() {return "Fruit";} } class Apple extends Fruit { public String toString() {return "Apple";} } class Grape extends Fruit { public String toString() {return "Grape";} } class Toy { public String toString() {return "Toy";} } public class FruitBoxEx1 { public static void main(String[] args) { Box fru..

[Java]기본 클래스를 찾거나 로드할 수 없습니다 오류 해결

Java 공부를 하던 도중 Intellij 터미널에서 직접 자바 클래스파일을 실행했다. 그런데 다음과 같은 오류가 발생하는 것 아닌가. 오류 : 기본 클래스 ExpValidCheck을(를) 찾거나 로드할 수 없습니다.원인 : java.lang.NoClassDefFoundError: JavaPractice/ExpValidCheck (wrong name: ExpValidCheck)나의 디렉토리 구조와 path는 아래와 같았다.StringPractice // Project name +- src +- JavaPractice +- ExpValidCheck.java +- StringPractice.imi C:/Users/kim/IdeaProjects/StringPractice/out/production/String..

[문자열]비어있는 문자열과 NULL을 체크하는 방법

*이 포스트는 아래의 url에서 퍼온 것입니다.출처: http://tost.tistory.com/96 [정선생의 블로그] 기존에는 null체크를 해서 없으면 바로 return으로 함수(메소드)를 탈출해 버렸으나... 내가 범접하기 힘긴 높은 내공을 지닌 그룹장님께서 return으로 탈출하면 가독성이 떨어져 문제점을 찾기 힘들어 진다는 충격적인(??) 이야기를 들었다. 일단 화면출력을 위한 가공을 위한 기능에서는 null이냐 '' 빈값이냐는 큰 의미가 없다. 오히려 에러를 낼수 있는 잠재문제을 가질뿐.... 아무튼 return문이 문제가 된다고 해서 최근 쓰는 코딩스타일... public static String formatHeadstr(String head, String str) { String resu..

Java(import(임포트))

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다. * import문 :소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키짐여이 포함된 클래스 이름을 사용해야 한다. 하지만, 매번 패키지명을 붙여서 작성하는 것은 비효율적이다. 클래스의 코드를 작성하기 전에 import문으로 사용하고자 하는 클래스의 패키지를 미리 명시해주면 소스코드에 사용되는 클래스이름에서 패키지명은 생략할 수 있다. import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아 낸 다음, 모든 클래스이름 앞에 패키지명을 붙여 준다. * import문의 선언 : 모든 소스파일(.java)..

Java(package(패키지))

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다. * Package(패키지) : 패키지는 '클래스의 묶음'이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로. 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다. 지금까지는 단순히 클래스 이름으로만 클래스를 구분 했지만 클래스의 실제 이름은 패키지 명을 포함한 것이다. 예를 들면, String 클래스의 패키지명을 포함한 이름은 java.lang.String이다. 즉, java.lang 패키지에 ..

Java(왜 자바에서 static의 사용을 지양해야 하는가?)

자바에서 데이터를 가공하거나 특정 메서드를 수행할 때 새로운 클래스를 만들어서 이를 인스턴스화 해서 쓸건지 아니면 static 으로 쓸건지 고민하게 될 때가 있다. 사실 후자는 객체지향적 관점에서 그리 좋은 선택은 아니다. Vamsi Emani라는 프로그래머가 stack overflow에 남긴 질문 Why are static variables considered evil? 과 가장 많은 지지를 받은 두개의 답변을 번역했다.Q by V. EmaniI am a Java programmer who is new to the corporate world. Recently I’ve developed an application using Groovy and Java. All through the code I’ve u..

Java(Super)

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다. * Super: super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 사용해서 구별했듯이 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다.(조상 클래스와 자손 클래스의 멤버가 중복 정의되어 서로 구별해야하는 경우에만 super를 사용하는 것이 좋다.) - 예제 class Parent {int x = 100;} class Child extends Parent {int x = 200; // Q. 이 문장("int x = 200;"이 없다면 출력결과는 무엇일까? void method() {Syste..

Java(오버로딩(oveloading) VS 오버라이딩(overriding))

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다. * 오버로딩 VS 오버라이딩 - 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것. - 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것. - 예제 class Parent() {void compliment() {}} class Chilld extends Parent {void compliment() {} //오버라이딩void compliment(String str) {} //오버로딩 void childCompliment() {}void childCompliment(String str) {} //오버로딩}

Java(오버라이딩(overriding))

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다. * 오버라이딩: 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우가 많다. 이럴 때 조상의 메서드를 오버라이딩한다. - 예제: 2차원 좌표계의 한 점을 표현하기 위한 Point클래스가 있을 때, 이를 조상으로 하는 Point3D클래스, 3차원 좌표계의 한 점을 표현하기 위한 클래스를 다음과 같이 새로 작성하였다고 하자. class Point {int x;int y; String getLocation() {return "x : "+ x + ", y : " +y;}}class Point3D extends Point {int ..

Java(초기화 블록)

*이 포스트는 남궁성님의 '자바의 정석'책을 참고하여 작성했습니다. * 클래스 초기화 블록 - 클래스 변수의 복잡한 초기화에 사용된다. * 인스턴스 초기화 블록 - 인스턴스 변수의 복잡한 초기화에 사용된다. * 초기화 블록 예제 class InitBlock {static { /* 클래스 초기화 블럭 */ } { /* 인스턴스 초기화 블럭 */ } // ...} -> 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다. ( 클래스가 처음 로딩될 때 클래스 변수들이 자동적으로 메모리에 만들어지고, 곧바로 클래스 초기화 블럭이 클래스 변수들을 초기화하게 되는 것이다. ) * 인스턴스 초기화 블럭 예제 Car() {c..

반응형