클래스
- 필드
- 생성자
- 메소드
속성(field) + 동작(method)로 구성
public class ClassExample {
// field
String field1;
int field2;
// 메인 메소드
public static void main(String[] args) {
}
//메소드
public void method1() {
}
// 생성자
public ClassExample() {
}
public ClassExample(String field1) {
this.field1 = field1;
}
}
필드
객체의 고유 데이터, 가져야할 부품, 현재상태 데이터 등을 저장
public class Student {
String name;
int kor;
int eng;
int math;
int sum;
double avg;
int rank;
}
heap에 입력하기 위해선 new를 통해 만들어져야함
ClassName 이름 = new ClassName();
public class StudentExample {
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍길동";
s1.kor=90;
s1.eng=80;
s1.math=85;
s1.sum=s1.kor+s1.eng+s1.math;
s1.avg=s1.sum/3.0;
Student s2 = new Student();
s2.name = "김철수";
s2.kor=87;
s2.eng=80;
s2.math=90;
s2.sum=s2.kor+s2.eng+s2.math;
s2.avg=s2.sum/3.0;
}
}
public class Tv {
String company;
int year;
int size;
@Override
//부모 클래스에있는 내용을 재가공
public String toString() {
return "Tv [company=" + company + ", year=" + year + ", size=" + size + "]";
}
// alt + shift + s
// toString
}
public class TvExample {
public static void main(String[] args) {
Tv tv1 = new Tv();
tv1.company="LG";
tv1.year=2024;
tv1.size=50;
Tv tv2 = new Tv();
tv2.company="삼성";
tv2.year=2023;
tv2.size=85;
System.out.println(tv1.company+" "+tv1.year+" "+tv1.size);
System.out.println(tv2);
}
}
LG 2024 50
Tv [company=삼성, year=2023, size=85]
생성자
생성자의 이름은 해당 클래스의 이름과 같아야함
public class Constructor {
public static void main(String[] args) {
Constructor c = new Constructor("오리");
//생성자가 하나라도 있다면 기본 생성자가 자동으로 만들어지지 않는다
//그러므로 기본 생성자를 각주 시키면 오류발생
System.out.println(c.name);
Constructor c2 = new Constructor();
c2.name = "거위";
}
// 기본 생성자
public Constructor() {
System.out.println("기본 생성자");
}
// 필드로 내용을 저장 보통 이름을 같게 쓴다
String name;
public Constructor(String name) {
System.out.println("파라미터가 있는 생성자");
this.name = name;
// this 클래스 내부에 있는 name을 의미 >> this.name==String name
// 우측 name은 클래스변수로 설정된 Constructor(String name)
// ctrl을 누르고 좌클릭을 통해 연관되어있는지 확인 가능
}
}
파라미터가 있는 생성자
오리
기본 생성자
생성자는 오버로딩이 지원이 된다
오버로딩 : 클래스 내에 같은 이름의 생성자나 메소드를 선언하는 것
public class Korean {
// 국적 이름 나이를 각 필드로 만들고
String nation="한국";
String name;
int age;
// 생성자를 통해 데이터 입력 해보기
public Korean(String name, int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "Korean [nation=" + nation + ", name=" + name + ", age=" + age + "]";
}
}
public class KoreanExample {
public static void main(String[] args) {
Korean k1 = new Korean("오리",20);
System.out.println(k1);
}
}
Korean [nation=한국, name=오리, age=20]
public class Student {
public static void main(String[] args) {
Student s1 = new Student("일본","405","이름1",20);
Student s2 = new Student("406","이름2",20);
Student s3 = new Student("이름3",20);
Student s4 = new Student("이름4",20);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
// 국적, 반호수, 이름, 나이
String nation="한국";
String roomNo="405";
String name;
int age;
public Student(String nation, String roomNo, String name, int age) {
this.nation=nation;
this.roomNo=roomNo;
this.name=name;
this.age=age;
}
public Student(String roomNo, String name, int age) {
this.nation="한국";
this.roomNo=roomNo;
this.name=name;
this.age=age;
// this("한국", roomNo ,name ,age);
}
public Student(String name, int age) {
this.name=name;
this.age=age;
// this("405",name,age);
}
@Override
public String toString() {
return "Student [nation=" + nation + ", roomNo=" + roomNo + ", name=" + name + ", age=" + age + "]";
}
}
package kr.or.ddit.study06.sec03;
public class Triangle {
public static void main(String[] args) {
Triangle t1 = new Triangle(0, 0, 0, 10, 10, 0);
System.out.println(t1);
Triangle t2 = new Triangle(new Point(0,0), new Point(0,10),new Point(10,0));
System.out.println(t2);
Point[] points = new Point[3];
points[0]=new Point(0,0);
points[1]=new Point(0,10);
points[2]=new Point(10,0);
Triangle t3 = new Triangle(points);
System.out.println(t3);
}
// 삼각형 3점 죄표, 넓이
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
double area;
public Triangle(int x1, int y1, int x2, int y2, int x3, int y3) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.x3 = x3;
this.y3 = y3;
this.area = Math.abs((x1 * y2 + x2 * y3 + x3 * y1) - (x1 * y3 + x2 * y1 + x3 * y2)) / 2;
}
public Triangle(Point p1, Point p2, Point p3) {
this(p1.x,p1.y,p2.x,p2.y,p3.x,p3.y);
//위의 생성자가 호출되어 계산이 자동으로 되어짐
}
// 위의 생성자를 참조하기를 위해
// this연산자에 위의 변수만큼의 값을 대입
public Triangle(Point[] points) {
this(points[0],points[1],points[2]);
}
@Override
public String toString() {
return "Triangle [x1=" + x1 + ", y1=" + y1 + ", x2=" + x2 + ", y2=" + y2 + ", x3=" + x3 + ", y3=" + y3
+ ", area=" + area + "]";
}
}
메소드
매개변수 선언
메소드 실행할 때 필요한 데이터를 받기 위한 변수 선언
public class MethodExample1 {
public static void main(String[] args) {
MethodExample1 me = new MethodExample1();
me.method1();
me.method2(10);
me.method3("문자열");
me.method4("문자열",20);
}
public void method1() {
System.out.println("파라미터 없는 메소드");
}
public void method2(int num) {
System.out.println("int num을 파라미터로 가지는 메소드");
System.out.println("외부에서 받은 값 : "+num);
}
public void method3(String str) {
System.out.println("String str을 파라미터로 가지는 메소드");
System.out.println("외부에서 받은 값 : "+str);
}
public void method4(String str, int num) {
System.out.println("String str, int num을 파라미터로 가지는 메소드");
System.out.println("외부에서 받은 값 : "+str+", "+num);
}
}
파라미터 없는 메소드
int num을 파라미터로 가지는 메소드
외부에서 받은 값 : 10
String str을 파라미터로 가지는 메소드
외부에서 받은 값 : 문자열
public int arrName (int ... array)
public class MethodExample4 {
public static void main(String[] args) {
MethodExample4 me = new MethodExample4();
me.addArray2(1,2,3);
me.addArray2(1,2,3,4);
}
// 값이 정해져있지 않을 때 ... 사용
// int[] array 대신 int .. array
public int addArray2(int ... array) {
int sum = 0;
for(int num : array) {
sum+=num;
}
System.out.println(sum);
return sum;
}
}
리턴타입
메소드가 리턴하는 타입
리턴을 하면 그 즉시 메소드를 종료하기 때문에
리턴 밑의 코드는 쓸 수 없다.
import java.util.Arrays;
public class MethodExample2 {
public static void main(String[] args) {
MethodExample2 me = new MethodExample2();
int i1 = me.method1();
System.out.println("method1에서 받은 결과값 : "+i1);
double d2 = me.method2();
System.out.println("method2에서 받은 결과값 : "+d2);
int[] arr3 = me.method3();
System.out.println("method3에서 받은 결과값 : "+Arrays.toString(arr3));
}
public int method1() {
System.out.println("public int method1()");
return 20;
}
public double method2() {
System.out.println("public int method2()");
return 10.5;
}
public int[] method3() {
System.out.println("public int method3()");
int[] arr= {1,2,3};
return arr;
}
}
public int method1()
method1에서 받은 결과값 : 20
public int method2()
method2에서 받은 결과값 : 10.5
public int method3()
method3에서 받은 결과값 : [1, 2, 3]
package kr.or.ddit.study06.sec04;
public class Cal {
public static void main(String[] args) {
Cal cal = new Cal();
int add1 = cal.add(1, 4);
System.out.println(add1);
double add2 = cal.add(2.1, 3.4);
System.out.println(add2);
int sub = cal.sub(1, 4);
System.out.println(sub);
double div = cal.div(7, 3);
System.out.println(div);
int mul = cal.mul(4, 4);
System.out.println(mul);
}
// a b 값을 매개변수로 결과값을 a+b로 하는 메소드 만들기
public int add(int a, int b) {
return a+b;
}
// 오버로딩
public double add(double a, double b) {
return a+b;
}
// a b 값을 매개변수로 결과값을 a-b로 하는 메소드 만들기
public int sub(int a, int b) {
return a-b;
}
// a b 값을 매개변수로 결과값을 a/b로 하는 메소드 만들기
public double div(int a, int b) {
return a/b;
}
// a b 값을 매개변수로 결과값을 a*b로 하는 메소드 만들기
public int mul(int a, int b) {
return a*b;
}
}
리턴을 하면 멈추는 성질로 break문 대신에 사용이 가능하다
public void method1() {
while(true) {
System.out.println("1. 회원가입");
System.out.println("2. 종료");
int sel=2;
if(sel==2) return;
}
}
public double div(int a, int b) {
if(b==0) {
return 0;
}
return (double)a/b;
}
void로 설정한 경우가 아닌 경우엔 리턴값은 언제나 반드시 존재해야된다
if로 return값을 달리 설정할 때 다른 나머지 return값도 넣어야한다.
메소드 사용
Class이름 name = new Class이름();
int a = name.메소드이름();
메소드는 클래스 안에 포함되어있으므로 이름과 함께 호출해야된다.
클래스 내부에 있는 메소드는 외부에있다면 다른 클래스의 같은 이름을 지닌 어떤 변수값을 가져올지 혼동이 올 수 있기 때문에 변수와 함께 클래스 내에 저장된다. 외부에 저장되는 메소드도 존재함
public class Circle {
double Pi = Math.PI;
public static void main(String[] args) {
Circle c = new Circle();
double area = c.area(3);
double round = c.round(3);
System.out.println("원의 넓이 : "+area+", 원의 둘레 : "+round);
}
// 파라미터 r 입력 받아 넓이를 리턴하는 메소드 완성
public double area(int r) {
return r*r*Pi;
}
// 파라미터 r 입력 받아 둘레를 리턴하는 메소드 완성
public double round(int r) {
return 2*r*Pi;
}
}
public class MethodExample3 {
int a = 10;
int b = 5;
public static void main(String[] args) {
MethodExample3 m1 = new MethodExample3();
m1.callA();
m1.callB();
m1.b = 7;
m1.sum();
MethodExample3 m2 = new MethodExample3();
m2.a = 8;
m2.b = 5;
m1.sum();
m2.callA();
m2.sum();
}
public int callA() {
System.out.println(a);
return a;
}
public int callB() {
System.out.println(b);
return b;
}
public void sum() {
System.out.println(callA()+callB());
}
//System.out.println(a);
//System.out.println(b);
//System.out.println(a+b);
}
다른 클래스에서 변환된 값은 변하지 않는다.
메소드 내부에서도 메소드 끼리 호출이 가능함. (내부에 있으므로 접근이 가능)
함수
★ contains()
변수명.contains("찾을 단어") // 값이 포함하는지 확인
public void method1() {
String test = "문자열 test 입니다.";
String search = "test";
if(test.contains(search)) {
System.out.println(search+"값이 포함되어 있습니다.");
}
}
★ startsWith(), endsWith()
변수명.startsWith("찾을 단어") // 앞문장이 같은지 확인
변수명.endsWith("찾을 단어") // 뒷 문장이 같은지 확인
public void method2() {
String test = "문자열 test 입니다.";
String start = "문자열";
if(test.startsWith(start)) {
System.out.println(start+"로 시작합니다.");
}
String end = "입니다.";
if(test.endsWith(end)) {
System.out.println(end+"로 끝납니다.");
}
}
★ toUpperCase(), toLowerCase()
변수명.toUpperCase() // 대문자로 변환
변수명.toLowerCase() // 소문자로 변환
public void method3() {
String test = "소문자 abcd";
test = test.toUpperCase();
System.out.println(test);
}
★ trim()
변수명.trim() // 좌, 우 공백과 개행문자를 삭제
public void method4() {
String test = " 문자열 테스트 ";
test = test.trim();
System.out.println(test);
}
★ replace() replaceAll()
변수명.replace("바꿀 문자열", "변환될 문자열") // 문자열 원하는 문자열로 변환
public void method5() {
String s = "abcdbabo";
s.replace("babo","***");
System.out.println(s);
}
replaceAll은 정규식으로 해당하는 여러문자를 한번에 바꿀 수 있음
변수명.replaceAll("[바꿀문자열 정규식]","변환될 문자열") // 여러 문자를 변환
public void method5() {
String s = "abcdbabo2024";
s=s.replaceAll("\\d","");
// s=s.replaceAll("/[0-9]/","");
System.out.println(s);
}
★ split()
문자열.split("구분 문자열") // 쪼개어 배열로 변환
public void method6() {
String test = "test1, test2, test3, test4";
String[] tokens = test.split(",");
for(String token : tokens) {
token = token.trim();
System.out.println(token);
}
}
equals()
변수명.equals("문자열")
변수명.equalsIgnoreCase("문자열") // 대소문자 무시
public void method7() {
while(true) {
System.out.println("계속하시겠습니까(y/n)");
String yn = sc.next();
if(yn.contentEquals("n")) {
break; // N 입력 시 false
}
if(yn.equalsIgnoreCase("n")) {
break; // N 입력 시 true
}
}
}
자주 사용하는 메소드
Arrays.toString()
Arrays.toString(변수명) // 배열내용 출력 메소드
int[] arr = {1,2,3,4,5,6};
System.out.println(Array.toString(arr));
[1, 2, 3, 4, 5, 6]
Arrays.sort()
Arrays.fill()
Arrays.copyOfRange()
Arrays.copyOfRange(배열 , 복사할 인덱스 시작값, 복사할 인덱스 마지막값)
'JAVA > JAVA BASIC' 카테고리의 다른 글
[JAVA] 메소드 - 로또 생성 (0) | 2024.03.21 |
---|---|
3/20 Homework 카드게임 (0) | 2024.03.20 |
[JAVA] 초기값, 배열복사, 다차원배열 (0) | 2024.03.14 |
[JAVA] 참조타입 - 배열 (0) | 2024.03.13 |
[JAVA] 반복문 while 등 (0) | 2024.03.12 |