인프런 웹 사이트의 김영한 강사님 강의를 들으며 학습한 Java 입문편 내용을 요약해 보도록 하겠습니다!
// MemberInit.java
package construct;
public class MemberInit {
String name;
int age;
int grade;
void initMember(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
// MethodInitMain3.java
package construct;
public class MethodInitMain3 {
public static void main(String[] args) {
MemberInit member1 = new MemberInit();
member1.initMember("user1", 15, 90);
MemberInit member2 = new MemberInit();
member2.initMember("user2", 16, 80);
MemberInit[] members = {member1, member2};
for (MemberInit s : members) {
System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" +
s.grade);
}
}
}
this.
가 있다. 이 this.
는 객체 자신의 참조값을 가리킨다.매개변수 = 매개변수
와 같은 모양이 되어 멤버변수의 값이 변경되지 않는다.package construct;
public class MemberThis {
String nameField;
void initMember(String nameParameter) {
nameField = nameParameter; // 코드 A
}
}
nameField
는 먼저 지역변수(매개변수)에서 같은 이름이 있는지 찾는다.nameParameter
는 먼저 지역변수(매개변수)에서 같은 이름이 있는지 찾는다.package construct;
public class ConstructMain1 {
public static void main(String[] args) {
MemberConstruct member1 = new MemberConstruct("user1", 15, 90);
MemberConstruct member2 = new MemberConstruct("user2", 16, 80);
MemberConstruct[] members = {member1, member2};
for (MemberConstruct s : members) {
System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" +
s.grade);
}
}
}
MemberConstruct
인스턴스를 생성하고MemberConstruct(String name, int age, int grade)
생성자를 호출한다.new
키워드를 사용해서 객체를 생성할 때 마지막에 괄호 ()
도 포함해야 하는 이유가 바로 생성자 때문이다. 객체를 생성하면서 동시에 생성자를 호출한다는 의미를 포함한다.매개변수가 없고
작동하는 코드가 없는
기본 생성자를 자동으로 만들어준다. (우리 눈에 보이지는 않는다.)
package construct;
public class MemberConstruct {
String name;
int age;
int grade;
MemberConstruct(String name, int age) {
this(name, age, 50); // == MemberConstruct(name, age, 50)
}
MemberConstruct(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
System.out.println("생성자 호출 name=" + name + ",age=" + age + ",grade=" +
grade);
}
}
this(name, age, 50)
는 첫번째 생성자 내부에서 두번째 생성자를 호출한다.this()
는 생성자 코드의 첫줄에만 작성할 수 있다. (다른 생성자를 호출하는 this 임을 잊지 말자)package pack; //***
public class PackageMain1 {
public static void main(String[] args) {
Data data = new Data();
pack.a.User user = new pack.a.User();
}
}
package 패키지명
과 같이 패키지 이름을 적어주어야 한다.Data
는 pack 패키지에 위치한다.User
는 pack.a 패키지에 위치한다.package pack;
import pack.a.User;
public class PackageMain2 {
public static void main(String[] args) {
Data data = new Data();
User user = new User(); //import 사용으로 패키지 명 생략 가능
}
}
import
를 사용할 수 있다.package pack;
import pack.a.*;
public class PackageMain2 {
public static void main(String[] args) {
Data data = new Data();
User user = new User(); //import 사용으로 패키지 명 생략 가능
}
}
pack.a.User
pack.b.User
import
는 하나만 선택이 가능하다.com.company.myapp
과 같이 사용한다. (관례)com.google.myapp
package a
- package b
- package c
이렇게 하면 보통 a.b 패키지와 a.c 패키지는 a 패키지에 속해있는것 같이 보이지만,
서로 완전히 다른 패키지이다.
💡 패키지를 구성할 때 서로 관련된 클래스는 하나의 패키지에 모으고,
관련이 적은 클래스는 다른 패키지로 분리하는 것이 좋다.