일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #리팩토링 #
- 우테코 # 우아한테크코스 # 백엔드# 회고록 # 우테코 6기 # 숫자야구게임 # 게임 #프로젝트
- Map #HashMap #LinkedList# Array# Stack #Queue#링크드맵 #트리맵 #자바 개념 #자바 JAVA
- java #메소드 # main메소드 #
- SQL #SQLD # 제약조건 # 기본키 #외래키 # FK #PK #NOTNULL
- Spring#Springboot#Xml#Mapper#Interface#SQL#{}###$#MyBatis#yaml#Annotation#Private#public#Insert#Update#select#delete#쿼리#메소드#매개변수
- java #멋사 # 소인수분해
- 스프링#자바#클라이언트#응답#요청 #파라미터#포스트맨 #HTTP#Postman#RequestBody#ResponseBody#Controller#Dto#package#Slf4j#JSON#Spring#SpringBoot#Data#데이터#프로토콜#GET#POST#PUT#DELETE#Code#Header#Body#Lombok
- #Java # private #constructor #Getter#Setter #List #ArrayList #LinkedList #생성자 #Generic #Collection #컬렉션 #제네릭
- JAVA #JAVASE#JAVAEE ##Thread #ThreadLocal #primitive type # reference type #바이트 코드 #동적로딩 #쓰레드 #기본데이터타입 #참조 데이터 타입 #클래스 로더 # 심볼릭레퍼런스 #자바 언어 #컴파일언어#스크립트언
- Spring# API # Bean#App#Controller#Configuration#Component#AllArgsConstructor#Service#RestController#HTTP#ResponseBody#JSON#스프링#웹#애플리케이션#프레임워크#어노테이션#컨테이너#IoC컨테이너 #IoC#의존성
- Java #알고리즘 # 선택정렬 # 삽입정렬 # Insert Sort # Selection Sort #정렬
- Spring#Skeleton#Service#controller#CRUD#DTO#ID#Read-all#Update#Delete#Create#JPA#class#interface#Repository#DB#의존성 주입#인터페이스#클래스#RequestMapping#method#메소드#요청#응답
- Spring #CRUD#DELETE#UPDATE#CREATE#READ#DB#API#JAVA#스프링#삭제#생성#갱신#삭제#JSON
- java # 홀수 #약수#소수 #합 # 판별 #멋사
- Java # DI # Static #Method #자바 # 의존성 주입 # 스태틱메소드 # This #오버로딩 #오버라이딩 #추상클래스
- SQL #SQLD # DDL #DML# DCL# TCL # 트랜잭션 #개념 # 데이터베이스
- java #do-while문 #while # 멋사 # 개념정리
- #시간복잡도 #o(n2)의 시간복잡도
- Spring # IOC # Bean # Service # Component# Repository # Controller # RestController # Framework # 컨테이너 #의존성 # Json#@#비즈니스로직 # 컴포넌트 #어노테이션 #클래스 # 예시
- 최대최소값
- OOP #객체지향프로그램 #절차지향 프로그래밍#함수형 프로그래밍# 객체지향프로그래밍 #SOLID # CallByValue #CallByReference#String#String Buffer#String Builder
- SQLD#SQL#식별자#비식별자#데이터모델링 #개념 #정의 #엔터티#속성 #도메인 #관계 스키마 #ERD
- Spring # Optional #Null # Read-all # 정적메소드# 클래스 #JPA#Service#Controller #App # 웹 # 애플리케이션 # Dto#객체 #팩토리#스프링부트#프레임워크
- 우테코#우아한테크코스#6기 #우테코6기#자소서#회고#후기#자소서과정
- 토스 #토스개발자챌린지# next#코딩테스트 #토스 코테 #2024#온라인 코테#toss
- Return
- JAVA #JVM #GC #자바 #가비지컬렉터 # 제네릭 #Generic # Static #스태틱 # 접근제어자 #인터페이스 #추상클래스 #OOP # 객체지향 #객체지향적 프로그래밍 언어 # final
- MVC #Model #Controller#View #Model1 #Model2 #MVC패턴#컨트롤러#뷰#모델#모델1#모델2
- Today
- Total
말하는 햄zzi
메소드 본문
메소드란?
-기능을 의미
▶클래스는 상태 +동작
상태에 해당하는것 = “멤버 변수”
동작에 해당하는것 =“ 메소드”
메소드 선언 방식
▶ function 과 다르게 클래스 내부 선언 해야한다
(접근제어자, 리턴타입, 메소드이름 세가지 요소를 지정해 메소드를 선언할 수 있다)
public class 클래스이름() {
접근제어자 리턴타입 메소드이름() {
// 메소드의 기능
}
3
}
메소드를 선언하는 방법
메소드 예제 1)
-스페이스인베이더 게임 예제)
public class SpaceInvaders {
int location; // 멤버 변수 선언
public void moveLeft() { // 왼쪽으로 이동하는 메소드
location = location - 1; // 기존 값 -1
}
public void moveRight() { // 오른쪽으로 이동하는 메소드
location = location + 1; // 기존 값 +1
}
}
멤버변수 : location
메소드 : moveLeft(), moveRight()
예제 테스트 코드 )
public class SpaceInvadersTest {
public static void main(String[] args) {
SpaceInvaders si = new SpaceInvaders();
si.moveLeft();//-1
si.moveRight();//0
si.moveLeft();//-1
si.moveLeft();//-2
System.out.println(si.location);
}
}
출력 : -2
//메소드는 new 연산자를 사용해 클래스를 인스턴스화 시켜야 사용 가능함
메소드 선언 방법
-메소드가 들어있는 클래스 인스턴스화된 이후에 사용
사용예제)
public class Greet {
public void printHello() {
System.out.println("Hello");
}
}
▷ printHello() 메소드 실행 불가 → 클래스를 인스턴스화 해야 실행가능
public class GreetTest {
public static void main(String[] args) {
Greet greet = new Greet();
greet.printHello();
}
}
▷ test 클래스를 만들어서 Greet 클래스를 인스턴스화 시킨 후 printHello()메소드를 실행
메소드 사용이유
- 반복호출 : 기능을 만들어 놓고 반복해서 사용하기 위함
예제)
public class 꼬부기(){
public void 물대포(){}
public void 몸통박치기(){}
}
public class 꼬부기Test {
public static void main(String[] args) {
꼬부기 kkobugi1 = new 꼬부기();
kkobugi1.물대포();
kkobugi1.몸통박치기();
} // 꼬부기 클래스의 .물대포(), .몸통박치기() 메서드 반복 사용가능
}
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
System.out.println(input);
} // Scanner 클래스의 .next() 메서드 반복 사용가능
}
- 멤버변수와 연계해서 사용하기 위함
예제 )
public class User {
String name;
String phoneNumber;
int age;
boolean isAdult() {
return age >= 18;
}
}
테스트예제)
public class UserTest {
public static void main(String[] args) {
User user1 = new User();
user1.name = "유양파";
user1.age = 14;
User user2 = new User();
user2.name = "유대파";
user2.age = 37;
System.out.printf("%s는 성인입니까? %s\n", user1.name, user1.isAdult());
System.out.printf("%s는 성인입니까? %s\n", user2.name, user2.isAdult());
}
}
출력 :유양파는 성인입니까? false
유대파는 성인입니까? true
-중복된 코드 제거
프로그램을 개발하면서 자주 하는 작업
중복된 코드를 제거하고 하나로 통합하는것 = “리팩토링(Refactoring)”
기능은 그대로 ,구조개선
→사용방법 : 반복되는 기능을 메소드로 분리
예제 SeparateToMethod)
public class SeperateToMethod {
public static void main(String[] args) {
int[][] arr = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 89}
};
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
// [10, 20, 30]
// [40, 50, 60]
// [70, 80, 89]
arr[0][0] = 0;
arr[1][1] = 0;
arr[1][2] = 0;
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
// [10, 20, 30]
// [40, 50, 60]
// [70, 80, 89]
}
}
▶아래 코드 3줄만 반복됨 /배열 수정시 아래 3줄코드 추가해야함
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
- 반복되는 코드를 메소드 한개로 통합한 후 반복 호출해 사용하여 해결
메소드의 구성요소
구분 | 설명 |
접근제어자 | 메소드들 호출 할 수 있는 범위 |
리턴타입 | 메소드를 실행한 결과의 타입 |
메소드명 | 메소드의 이름 |
접근제어자
-접근 제어자는 총 4가지가 있다
public | 모든 클래스에서 접근 가능 다른 패키지에서도 접근 가능 |
protected | 같은 패키지 내의 클래스와 해당 클래스를 상속한 외부 패키지의 클래스에서 접근 가능 |
default | 접근 제어자를 쓰지 않은 경우 기본값 같은 패키지 내의 클래스에서만 접근 가능 |
private | 해당 클래스에서만 접근 가능 |
각 접근제어자가 붙어있는 클래스, 메소드, 변수의 사용 가능 범위는 다음과 같다
public | 0 | 0 | 0 | 0 |
protected | 0 | 0 | 0 | |
default | 0 | 0 | ||
private | 0 |
주로 private를 많이 이용 필요할 경우 public 사용
접근 제어자를 설정하지 않을 시 자동으로 "default"로 설정됨
예시) 같은 클래스 내 존재 시
public class Greet {
private void printHello() {
System.out.println("Hello");
}
public static void main(String[] args) {
Greet greet = new Greet();
greet.printHello();
}
}
출력 : Hello
//접근제어자가 private인 경우 같은 클래스에서만 호출
-리턴타입
: 메소드 실행 결과 값 (메소드를 호출한 곳으로 연산 결과를 보내고 싶을 때 사용)
(메소드를 만들때는 꼭 리턴타입을 써주어야 한다)
리턴타입 예제)
// 클래스
public class VariousReturnType {
// 메소드
public boolean isAdult(){
return true;
}
// 메소드
public int plus(){
return 1 + 1;
}
// 메소드
public User getUser(){
return new User();
}
// 메소드
public void printHello() {
System.out.println("Hello");
}
// 메인 메소드
public static void main(String[] args) {
VariousReturnType vrt = new VariousReturnType();
boolean isAdult = vrt.isAdult();
int plusResult = vrt.plus();
User user = vrt.getUser();
vrt.printHello();
}
}
메소드명
- 이름을 지을 때는 해당 메소드의 기능을 유추 할 수 있도록 간략하고 명확하게 이해할 수 있는것으로 이름을 지어야한다
Main메소드
-main 메소드 앞 static 옴
-static이 붙은 클래스, 변수, 메소드는 자바 프로그램이 시작 될 때 인스턴스화가 되고 자바 프로그램이 종료 될 때 사라짐
-static이 붙어 있지 않은 일반 클래스는 GC의 대상으로 필요할 때 new 를 이용해 생성되고 사용이 끝나면 메모리 효율을 위해 GC가 메모리에서 없애버린다
main 메소드 구성요소
-접근제어자(public)
main 메소드에서 아래에서 변경할 수 있는 것은 없다 //다른곳에서 호출되는 메소드가 아니기 때문
public으로 선언 되어야 하는 이유는 JVM에서 접근을 하기 때문입니다. private으로 되어 있다면 실행을 할 수 없습니다.
-static인지 여부(static)
main 메소드가 static인 이유?
: 프로그램이 실행될 때 해당 클래스의 인스턴스를 생성하지 않고도 메소드에 접근할 수 있게 하기 위함
-리턴타입(void)
main메소드에서는 new를 이용해 다른 클래스의 인스턴스를 생성하고 다른 기능들을 실행하는 코드들이 대부분입니다.
그래서 리턴값이 필요 없습니다. 따라서 리턴타입은 void가 고정
-메소드명(main)
main메소드의 메소드명도 바꿀 수 없다
main이라는 이름을 가지고 이 메소드를 찾기 때문,
main이 아닌 다른 이름으로 바꾸었을때 역시나 자바에서는 찾을 수 없음 에러
-String[] args
:String[] args는 자바 프로그램을 실행 할 때 특정 값들을 전달 할 수 있는 매개변수
>>배열명 'args'만 변경가능 (args는 arguments의 줄임말로 함수나 호출시 전달되는 '인수')
주로 설정값들을 넘길 때 사용
'Java > Java' 카테고리의 다른 글
Collection-List Array/Generic/Constructor/Getter/Setter (0) | 2023.05.16 |
---|---|
스태틱(static)메소드/ 리팩토링/오버로딩/This / 추상클래스/DI (0) | 2023.05.10 |
소인수분해/ 최대 최소값 (0) | 2023.05.06 |
홀수/ 약수/소수 (0) | 2023.05.06 |
do -while 문 (0) | 2023.05.06 |