이 글은 남궁성의 정석코딩 [자바의정석-기초편] 수강하며 정리한 글입니다.

 

 

🟣 기본 환경: IDE: Eclipse, Language: Java

 

 

객체 생성과 배열

 

상속(Inheritance)

: 단일 상속만 허용*하며 Object class는 자동 상속 됨

: 자손 class는 조상 class의 모든 member를 상속받으나 생성자와 초기화 블럭은 상속되지 않음

* 단일 상속만 허용하므로 이 외의 상속을 받고싶은 class는 포함(composite)관계를 이용

-> 하나의 거대한 class를 작성하는 것보다는 단위별, 부분별로 여러 클래스를 작성하여 포함관계를 통해 재사용하는 것이 좋음

** 상속: 오토바이'는' '차'이다 / 포함: 차'는' 엔진을 '갖고 있다' (해석을 통해 사용방법 파악)

 

Overriding

: 선언부가 조상 class의 method와 일치해야 함

: method의 접근 제어자(public, protected, default, private)를 조상 class의 method보다 좁은 범위로 선어할 수 없음

: Exception은 조상 class보다 많이 선언할 수 없음

 

참조변수 super

: 객체 자신을 가리키는 참조변수로 instance method/constructor에서만 존재

: 조상의 멤버(super)와 자신의 멤버(this)를 구별할 때 사용

 

 

super(): 조상의 생성자 호출

: 조상의 생성자를 호출해서 조상의 멤버사용

(조상 클래스 멤버의 초기화는 자손 클래스에서 직접 수행하기보다는 조상 클래스의 생성자를 통해 초기화하는 것이 바람직)

* 자손 class constructor 첫 줄에 반드시 생성자 호출 -> 안 할 경우, compile 시 자동 생성

 

 

Cf. 생성자 this(): 같은 class의 다른 생성자 호출

 

 

 

소스 코드

🔗 HJ0216/java-practice

 

참고 자료

📑 [Java] 자바의 정석 기초편 chapter7 정리(2)

📑 [자바-객체지향2] 참조변수 super, 생성자 super( )

📑 [코딩자바] 자바 this, this()

 

🌿 기본 환경: IDE: STS, Language: Java

 

 

발생 Error

Spring에서 다음 Source Code를 실행할 경우,

⭐ 하기 Error 발생

Failed to instantiate [user.service.UserUpdateService]: Constructor threw exception; nested exception is java.lang.NullPointerException

 

 

발생 원인

userDAO가 null로 선언된 상태에서 getUserList()를 실행하고자 할 때, NullPointerException 발생

 

 

해결 방법

List 선언부를 UserSelectService의 객체가 생성될 때 같이 실행되도록 하지 않고

execute() 실행될 때 생성되도록 변경하여 userDAO가 null이 아닌 값이 Setter에 주입되고 나서 값을 대입

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Exception

Java에서 다음 Source Code를 실행할 경우,

⭐ Unresolved compilation problem: The method calc(int, double) is ambiguous for the type Test2

java.lang.Error: Unresolved compilation problem 발생

 

 

Error 원인

Test2 클래스에서 calc()가 매개변수 타입만 다르게 overloading되어있음

2개의 매개변수에 각각 10을 대입할 경우, 어떤 calc를 실행하고자하는지 알 수 없어 발생

 

 

해결 방법

calc() 사용 시, 어떤 메서드를 사용하는지 인자를 정확히 기재

(calc()에 각각 10, 10.0을 입력하여 calc(int, double)를 사용할 것임을 명시함)

 

 

이 글은 남궁성의 정석코딩 [자바의정석-기초편] 수강하며 정리한 글입니다.

 

 

🟣 기본 환경: IDE: Eclipse, Language: Java

 

 

Class: 유사한 특징을 가진 객체들의 속성을 묶어놓은 집합

Class 구성: Class Header(Class Name), Member field(속성: 변수, 상수), Member Method(동작: 메서드)

 

1. Class Header

: Class 선언([접근 제한자*] [클래스 종류*] [class] [ClassName*]{})

*접근 제한자: public > protected > default(생략 시, default 취급) > private

public: 모든 접근 허용

protected: 동일 패키지(폴더) 내 또는 상속관계의 객체 접근 허용

default: 동일 패키지(폴더) 내의 객체 접근 허용

private: 동일 클래스 내의 객체만 접근 허용

*클래스 종류: final(최종), abstract(추상), (생략 시, 일반 취급)

*ClassName: 첫글자는 대문자로 표시, 여러단어 포함 시 첫글자는 대문자(카멜 표시법)

 

2. Member field

변수*와 상수를 의미하며, 객체가 만들어질 때 그 객체의 특징적인 속성을 담아두는 것

* Member variable

객체가 생성될 때, 객체의 특징과 속성을 저장하는 곳으로, static(class)과 instance가 있음

** static(class) variable: 객체 생성 시, 단 하나만 생성되며 모든 객체들이 공유

** instance variable: 객체마다 따로 생성되어 각 객체의 속성으로 자리잡는 변수

 

3. Member method

특정한 일을 수행하는 행위로 Member field 값을 가지고 작업을 수행할 수도 있으며 method도 static(class)과 instance, 2가지 종류가 있음

* static method는 객체 생성없이 사용 가능, instance method는 객체 생성 후 사용 가능

 

Overloading: 같은 class 내에서 동일한 이름의 메서드를 여러개 정의한 것

 

 

 

생성자(Construtor)

: Instance가 생성될 때마다 호출되는 instance 초기화 method

 

특징

- 생성자 이름은 클래스 이름과 동일해야 함

- return 값은 없지만, void를 붙이지 않음

- 모든 class는 반드시 1개 이상의 생성자를 가져야 함

 

종류

- 기본 생성자: 매개변수가 없는 생성자로 생성자가 하나도 없을 경우에만 컴파일 시 컴파일러가 자동 추가

- 매개변수가 있는 생성자

 

 

생성자 this()

: 같은 class 내에서 생성자가 다른 생성자를 호출할 때, class 이름대신 this() 사용

* 다른 생성자 호출 시, 첫줄에서만 사용 가능

 

Cf. 참조변수 this: instance 자신을 가리키는 참조변수

instance constructor 및 method에서 사용 가능

instance variable과 local variable 구분 시 사용

 

변수(Variable) 초기화: 변수 선언 후, 처음으로 값을 저장하는 것

Instance Variable(iv): 자동 초기화

- instance 생성 시, iv 생성

Static/Class Variable(cv): 자동 초기화

Local Variable(lv): 수동 초기화해야하므로 반드시 사용 전 초기화 -> 초기화하지 않을 경우, compile error 발생

 

Reference Type 초기화: ClassName className = new ClassName();

-> Null로 초기화

 

Primitive Type 초기화: primitiveType variableName = argument;

-> boolean false, 이 외 0으로 초기화

 

 

 

소스 코드

🔗 HJ0216/java-practice

 

참고 자료

📑 자바(java) 클래스 구성, 멤버 필드, 멤버 메서드, 멤버 변수, 메인메서드, 명령행 매개변수 알아보기

📑 [Java] 자바의 정석 기초편 chapter6 정리(10)

 

이 글은 남궁성의 정석코딩 [자바의정석-기초편] 수강하며 정리한 글입니다.

 

 

🟣 기본 환경: IDE: Eclipse, Language: Java

 

 

 

Class를 만들 때 Main()이 있는 class name을 java source file name과 일치시켜줘야 이클립스가 자동으로 실행

* 만일 java source file name과 다른 이름을 가진 class를 실행하고자 하는 경우,

run configuration->main class 지정

 

1개의 source file에는 1개의 public class만 가능

(Error: The public type ClassName must be defined in its own file)

해당 public class name은 source file name과 동일해야 함

 

Class

데이터 및 함수를 관련있는 대상 간 묶어놓은 것

사용자 정의 타입으로 원하는 class를 직접 구현할 수 있음

 

Method()

Class 내에서만 정의 가능하며, 입력(0~n개)을 받아 결과를 출력(0~1개)

 

 

class 영역(method 영역 제외): Instance Variable*, Static(Class) Variable, Method 선언만 가능

객체: Instance Variable*의 집합

 

method 영역: method가 선언된 내부 영역, Local Variable 선언 가능

 

Instance 생성 및 method 호출

 

Cf1. 참조변수(Reference Variable): 참조 타입(메모리의 값이 아닌 주소를 저장)의 변수

Cf2. 매개변수(Parameter): 매개변수는 실제로 값이 존재하지는 않고, 어떤 형태로 입력값이 들어올것인지를 정의

* 기본형 매개변수: 변수의 값을 읽기만 할 수 있음

* 참조형 매개변수: 변수의 값을 읽고 변경할 수 있음, return type이 객체의 주소를 반환

 

Cf3. 인자(Argument): 매개변수에 대입되는 실제로 메모리에 할당되어 있는 변수

 

Instance 생성 및 method 호출2

 

Instance && Static

static class/method

인스턴스 생성 없이 ClassName.MethodName()으로 호출

인스턴스 변수 사용X

instance class/method (static이라는 표시가 없는 경우)

인스턴스 생성 후, ReferenceVariable.MethodName()으로 호출

인스턴스 변수 사용O

 

 

 

소스 코드

🔗 HJ0216/java-practice