티스토리 뷰
클래스 내부 구성 요소
package
import
class
public class A{
필드(멤버 변수)
메소드
생성자
내부 클래스
}
1. 필드
-객체의 속성값 지정
-클래스 소속 변수 : Heap 메모리에 저장.
cf) 지역변수 : 메소드에 포함된 변수. Stack 저장. 메소드가 호출될 때만 생성, 메소드 종료시 Stack 메모리에서 삭제
근데 초기화하지 않으면 쓰레기값이 남아있으므로 지역변수는 초기화해준다.
매개변수 - 지역변수, 메소드의 값을 받아오는 것.
Class A{
int m = 1; //필드 변수
int n = 2;
void work1(){
int k =5; // 지역 변수(메서드 내에서만 통용되는)
System.out.println(k);
work2(3);
}
void work2(int i){
int j=4; //지역 변수
System.out.println(i+j);
}
}
└Heap 공간에 메모리가 있어야 메소드가 찾아가 실행할 수 있음. 객체 생성해야 한다는 뜻.
(1) 필드 값 세팅 규칙
규칙을 알면 이름으로 알 수 있음, 세팅하고 있음을.
Employee e1 = new Employee(); //필드 초기화 안 함. //Employee에 속한 객체 e1
e1.setEmpno(1); //필드 값 세팅하고 있음을 이름으로만 알 수 있음.
e1.setEname("홍길동");
e1.setDname("영업부");
e1.setPosition("과장");
e1.setSal(500);
2. 메소드
메소드 이름은 변수 작성 규칙과 동일
public static int sum(int a, int b){
//메소드 내용 - 실행문
}
| 접근지정자 | 리턴(반환) 타입 | 메서드 이름 | 입력 매개변수 | |
| public | static | int | sum | (int a, int b); |
| 생략 가능 | 생략 가능 | return | void | 변수 작성 규칙 동일 |
└static : 객체 생성없이 클래스 이름으로 메소드를 부를 수 있음. 생량 가능
└리턴(반환) 타입 : 자료형에 맞게 반환. return을 쓰지 않으려면 void
(*void : 함수 호출한 곳에 돌려줄 값이 없다. 리턴(반환)값 없음. 함수 종료하고 끝)
//리턴타입 void + 매개변수 없음 : 리턴 안 함
void print () {
System.out.println("안녕");
}
//리턴타입 int + 매개변수 없음
int data () {
return 3;
}
//리턴타입 double + 매개변수 2개
double sum (int a, double b) {
return a+b;
}
└return 타입이 void인 경우에도 메소드 내에 return 사용 가능. 단, 값의 리턴없이 return만 사용(메소드 종료)
(1) 메소드 오버로딩(MethodOverloading)
메소드 이름은 같은데 매개변수가 다른 것. 변수 이름은 상관없음.
_예시) 메소드 이름이 전부 pirnt지만 매개변수가 각각 다름.
public class MethodOverloadingClass {
void print() {
System.out.println("no data");
}
void print(int a) {
System.out.println("int data : "+a);
}
//오류 : 리턴타입은 시그너처 포함 x. 위의 메소드와 동일 메소드로 간주. 오류 발생.
// int print(int b) {
// System.out.println("int data : "+b);
// return b;
// }
void print(double a) {
System.out.println("double data : "+a);
}
void print(int a, int b) {
System.out.println("data a : " + a + "data b :" + b);
}
}
public class MethodOverloadingTest {
public static void main(String[] args) {
MethodOverloadingClass obj = new MethodOverloadingClass(); // 객체 생성
//점(.)으로 연결해 호출
//메소드 이름 같아도 매개변수 종류가 다르니 다른 것 호출.
obj.print();
obj.print(10);
obj.print(10.5);
obj.print(1, 2);
System.out.println("-----------");
}
}
└리턴 타입은 시그너처에 포함되지 않아 리턴 타입만 다를 경우 메소드가 2개 정의된 것으로 보아 오류 발생.
//리턴 타입만 다를 경우 오류남.
public static void print(int a){...}
public static int print(int a){...}
print(3);
-가변 길이 매개변수
같은 자료형 데이터가 여러 개일 때
public class MethodOverloadingClass { //생성자
void method1(int...values) {
for(int i:values) { //values에 있는 값을 i에 할당.
System.out.print(i+ " ");
}
System.out.println("End");
}
}
public class MethodOverloadingTest {
public static void main(String[] args) {
MethodOverloadingClass obj = new MethodOverloadingClass();
//같은 자료형 데이터가 여러 개일 때.
obj.method1(1);
obj.method1(11, 3, 5);
obj.method1(5, 6, 8, 10);
obj.method1();
}
}
3. 생성자
객체 생성 및 필드 초기화
멤버 변수에 대한 값들을 매개변수로 받아서 인스턴스가 새로 생성될 때 멤버 변수 값들을 초기화하는 역할.
package constructor;
public class Person {
String name;
float height;
float weight;
public Person(){ //default }
public Persong(String name){ //1.
tihs.name = name;
}
}
└1 : 사람 이름을 매개변수로 입력받아 Person 클래스 생성하는 생성자
클래스 이름과 동일. 리턴 타입(return | void) 존재하지 않음.
생성자를 정의하지 않은 경우, 컴파일러가 기본생성자(default) 추가 - 입력 매개변수가 없는 생성자
생성자를 하나 이상 만들기 시작했다면 디폴트 생성자를 만들어주지 않으므로 직접 만들어야 함.
애초에 만들 때 디폴트 생성자를 만들어!
public class MethodOverloadingClass {
public MethodOverloadingClass() { //디폴트값 생성자
//상속할 때 많이 사용
}
public MethodOverloadingClass(int a) { //생성자 오버로딩
}
void print() {
System.out.println("no data");
}
void print(int a) {
System.out.println("int data : "+a);
}
}
-생성자 오버로딩 : 생성자 이름은 같은데 입력 매개변수가 다름.
-실제 클래스 만들 때,
메소드 앞에는 public, 필드 변수 앞에는 private 붙임.
(2) 접근자, 설정자 메소드 getter, setter
다른 클래스에서 private 필드에 접근 가능하도록 하는 것. 필드변수 있는 클래스에 생성? 작성.
-get : 값을 가져올 때,
-set : 값을 설정할 때,
class A{
priavte String name;
private int age;
private float height;
private float weight;
//default 생성자
A(){
}
//접근자(getter)
public String getName(){
return name;
}
public int getAge(){
return age;
}
public float getHeight(){
return height;
}
public float getWeight(){
return weight;
}
//설정자(setter)
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setHeight(int height){
this.height = height;
}
public void setWeight(){
this.weight = weight;
}
]
_실습 예제) Employee
-private : 같은 클래스 내부에서만 사용 가능. 필드명 숨김.
-setter, getter : private 붙은 필드 변수를 다른 클래스에서 사용하려고. public 선언.
└get : 값을 얻고 싶을 때
└set : 값을 새로 세팅할 때
└자동 생성 : 우클릭 > source > generate Getters and Setters
(우클릭 > source > generate Constructor usin fields)
package test0126;
public class Employee { // 생성자
private int empno; //필드 변수
private String ename;
private String dname;
private String position;
private int sal;
// 1_default
public Employee(){}
// 2
public Employee(int empno, String ename, String dname) { //지역변수
this.empno = empno;
this.ename = ename;
this.dname = dname;
} //this.필드변수 지역변수
// 3
public Employee(int empno, String ename, String dname, String position, int sal) {
this.empno = empno;
this.ename = ename;
this.dname = dname;
this.position = position;
this.sal = sal;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public int getSal() {
return sal;
}
public void setSal(int sal) {
this.sal = sal;
}
public void display() { // 메소드 정의
System.out.print(empno+" ");
System.out.print(ename+" ");
System.out.print(dname+" ");
System.out.print(position+" ");
System.out.print(sal+" ");
}
}
-객체 생성하는 메인 함수 클래스(다른 파일일 경우)에서 디폴트값 방식 변경 불가능
package test0126;
public class EmployeeTest { //객체 생성 클래스
public static void main(String[] args) {
//아래의 방법으로 private 수정 불가능
// Employee e1 = new Employee();
// e1.empno = 1;
// e1.ename = "홍길동";
// e1.dname = "영업부";
// e1.position = "과장";
// e1.sal=500;
Employee e1 = new Employee(); //필드 초기화 안 함.
e1.setEmpno(1);
e1.setEname("홍길동");
e1.setDname("영업부");
e1.setPosition("과장");
e1.setSal(500);
Employee e2 = new Employee(2, "홍길수", "총무부");//empno, ename, dname 초기화
e2.setPosition("대리");
e2.setSal(400);
Employee e3 = new Employee();
e3.setEmpno(3);
e3.setEname("홍길미");
e3.setDname("홍보부");
e3.setPosition("사원");
e3.setSal(300);
e1.display();
System.out.println();
e2.display();
System.out.println();
e3.display();
}
}
4. this와 this()
-this
인스턴스의 자기 자신. 인스턴스 자신의 주소 반환. 클래스 내 다른 생성자 호출.
public Employee(){}
//2
public Employee(int empno, String ename, String dname) { //지역변수
this.empno = empno;
this.ename = ename;
this.dname = dname;
} //this.필드변수 지역변수
//3
public Employee(int empno, String ename, String dname, String position, int sal) {
// this.empno = empno;
// this.ename = ename;
// this.dname = dname;
this(empno, ename, dname); //2번에서 이미 작성된 코드, 이렇게 축약 표현 가능
this.position = position;
this.sal = sal;
}
└this(); 메소드 : 이미 작성된 코드를 호출. 코드 작성의 효율성.
생성자에서 코드 반복되는 것을 제거. 클래스 생성자에서만 쓸 수 있음. 반드시 첫줄. 그래서 하나씩만 쓸 수 있음.
//생성자 클래스에서
//1
public ThisA() {
System.out.println("default 생성자");
}
//2
public ThisA(int i) {
// this(); //생성자 안에 생성자 1번 호출. 3개 쓰면 오류. 하나만 써줘야 함.
this(3,2); //3번 호출. this()는 항상 첫줄. 그래서 하나씩만 호출할 수 있음.
this.i = i;
System.out.println("second 생성자");
}
//3
public ThisA(int i, int j) {
System.out.println(i+j);
}'수업 > └Java' 카테고리의 다른 글
| [CH7]상속과 다형성 (0) | 2022.02.02 |
|---|---|
| [CH06_3]클래스 외부 구성 요소 (0) | 2022.01.31 |
| [CH06_1]클래스 기본 문법 (0) | 2022.01.31 |
| [CH05_2]참조 자료형 : String (0) | 2022.01.31 |
| [CH05_1]참조 자료형 : 배열(Array) (0) | 2022.01.31 |
- Total
- Today
- Yesterday
- ScriptTag
- text formatting
- 입력양식
- caption-side
- 변수
- selcetor
- html layout
- 미디어 태그
- scanner
- html atrribute
- JavaScript
- typeof
- html pre
- initialized
- A%B
- 기본선택자
- Java
- border-spacing
- css
- 스크립태그
- html base tag
- improt
- BAEKJOON
- html input type
- 외부구성요소
- empty-cell
- html
- input type 종류
- CascadingStyleSheet
- html a tag
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |