Sad Puppy 3 '[프로그래머스]Java' 카테고리의 글 목록 :: 개발자 아지트

자바에서는 함수를 메서드라 한다. 

 

public class Method1{
	public static void main(String[] args) {
    
    	int a = 1;
        int b = 2;
        
        int sum = a + b;
    	int sum 2 = add(10, 20);
    }
    
    public static int add(int a, int b){ // 선언부
    	int sum = a + b;  // 본문 시작
        return sum;
    }
}

 

모든 메서드는 return을 호출해야한다. 

반환타입이 void인 경우에는 return이 생략가능하다. (자바가 알아서 return을 넣어준다.)

 

return문 만나면 즉시 함수를 빠져나간다. 

 

함수의 반환값이 있어도 반환값을 안받고 무시도 가능하다. 

(void는 받으면 안됨)

 

함수 이름은 동사로 시작 시킴 

 

 

단축키:  함수이름 누르고 command + b하면 해당 함수로 이동함

 

함수 호출시 메모리공간이 할당됨

함수 실행 끝나면 사라짐 

 

인수(Argument) == 인자

호출할 때 넘기는 값. 즉, 내부로 들어가는 값

매개변수(Parameter)

메서드 정의 시 선언한 변수를 말함

넘어오는 값을 중간에서 전달하는, 매개하는 변수

메서드 내부에서 사용할 수 있는 변수

 

메서드 호출 및 값 전달 

 

자바는 항상 변수의 값을 복사해서 대입한다. 

 

 

메서드 형변환

 

메서드를 호출할 인자와 매개변수의 타입이 맞지 않는경우에 형변환이 필요하다.

타입이 다른경우에는 자동 형변환이 가능한 경우(인자 타입이 함수의 매개변수 타입보다 작은 타입인 경우)에만 호출이 가능하다. 

public class Casting{
	public static void main(String[] args){
    	int number = 100;
        printNum(number); // 인자로 넘김 
    }
    
    public static void printNum(double n){// 매개변수로 받음, 자동형변환됨 int -> double
    	System.out.println(n);
    }
}

 

 

메서드 오버로딩

 

함수 이름이 같고 매개변수가 다른(매개변수의 순서와 타입이 다른경우) 메서드를 여러개 정의하는 것을 메서드 오버로딩(Overloading)이라 한다. 

(Overloading의 의미: 과하게 물건을 적재했다)

(반환 타입만 다른 경우는 취급하지 않는다. )

==메서드 시그니처(메서드를 구분할 수 있는 기준)

 

int plus(int a, int b)
int plus(int c, int d)

// 위와 같은 경우도 취급하지 않는다.

 

자기 타입에 맞는 메서드를 찾아서 실행해되, 없는 경우에는 형 변환 가능한 타입의 메서드를 찾아서 실행함 

 

 

 

코드를 메서드를 사용하는 식으로 리펙토링을 하면 main()은 상세 코드가 아닌, 전체 구조(목차같은 느낌)를 한눈에 볼 수 있게 되는 모습으로 된다. (모듈처럼 만들어두는 모습) 이런 리펙토링을 메서드 추출(Extract Method)라고 한다. 꼭 재사용 하지 않더라도 보기좋게 하기 위해서 리펙토링을 진행한다. 

 

 

 

 

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

배열  (0) 2024.07.05
사용자 입력  (1) 2024.07.05
스코프(변수의 접근 가능 범위), 형변환  (0) 2024.07.05
반복문  (0) 2024.07.05
조건문  (0) 2024.07.05

기본형(Primitive Type) : 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입

참조형(Reference Type) : 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입

 

배열과 객체, 클래스를 담는 변수 등은 참조형에 속함.

 

 

배열은 동적으로 사이즈를 변경할 수 있다. 

코드가 실행되는 시점에 배열의 크기가 정해지기 때문이다. 

예를 들면, 사용자 입력을 받아 배열의 크기를 설정할 수 있다. 

 

기본 형태

	public class Array1{
    	public static void main(String[] args){
        	int[] team; // 배열 변수 선언
            teams = new int[4]; // 배열 생성
        }
    
    }

 

	public class Array1{
    	public static void main(String[] args){
        	int[] team; // 배열 변수 선언
            teams = new int[]{1, 2, 3, 4}; // 배열 생성
        }
    
    }

 

	public class Array1{
    	public static void main(String[] args){
        	int[] team = new int[]{1, 2, 3, 4}; // 배열 생성
        }
    
    }

 

 

	public class Array1{
    	public static void main(String[] args){
        	int[] team = {1, 2, 3, 4}; // 배열 생성
        }
    
    }

 

리펙토링 :

기존 코드의 기능은 유지하면서 내부 구조를 개선하는 것을 말함.

(중복 제거, 복잡성을 줄이기, 이해하기 쉬운 코드로 다시 작성)

 

 

2차원 배열

 

arr[행][열] 

 

	public class Array1{
    	public static void main(String[] args){
        	int[][] team = new int[2][3]; // 배열 생성
        }
    
    }

 

 

 

	public class Array1{
    	public static void main(String[] args){
        	int[][] team = new int[2][3]{
                {1, 2, 3},
                {4, 5, 6}    
            }; // 배열 생성
        }
    }

 

 

향상된 for 문

코드가 간결하고 가독성이 좋음

public class test{
	public static void main(String[] args){
    int[] numbers = {1, 2, 3, 4, 5};
    
 	for (int number : numbers){
    	System.out.println(number);
    }
    }

}

 

(단축키 - iter) 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

메서드  (0) 2024.07.05
사용자 입력  (1) 2024.07.05
스코프(변수의 접근 가능 범위), 형변환  (0) 2024.07.05
반복문  (0) 2024.07.05
조건문  (0) 2024.07.05

 


import java.util.Scanner;

public class Scanner1 {
	public static void main(String[] args){
    	Scanner scanner = new Scanner(System.in);
        
        String str = scanner.nextLine(); // 사용자 입력을 받는 부분
        // 엔터를 입력할 때 까지 문자를 가져옴 
        
        
        int intValue = scanner.nextInt(); // 정수값을 사용자 입력으로 받는 부분
        
        
        double doubleValue = scanner.nextDouble(); // 입력을 double로 받는 부분
        
        
    }

}

 

 

print() 다음 라인으로 넘기지 않는다. 

println() 다음 라인으로 넘긴다. 

 

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

메서드  (0) 2024.07.05
배열  (0) 2024.07.05
스코프(변수의 접근 가능 범위), 형변환  (0) 2024.07.05
반복문  (0) 2024.07.05
조건문  (0) 2024.07.05

변수의 종류

변수의 종류는 변수 선언 위치에 따라 아래와 같이 나뉜다. 

지역변수, 멤버 변수(클래스 변수, 인스턴스 변수)

 

지역변수

지역 변수는 특정 지역에서만 사용할 수 있는 변수이며, 지역은 코드 블록을 말한다. 

자신이 선언된 블록 외에서 자신에게 접근하려고 하면 접근할 수 없다. 

ex) if 문 안에서 선언한 변수는 if문 안에서만 사용할 수 있다. 

왜 지역 변수인가? 자신의 지역 안에서만 생존할 수 있기 때문이다. 

 

스코프의 표현

스코프 범위가 길다. 

스코프가 범위가  짧다. 

 

스코프는 왜 필요한가?

  • 비효율적인 메모리 사용을 막기 위함
  • 코드 복잡성을 낮추기 위함 
    • 좋은 코드는 군더더기 없는 단순한 코드임 
  • 좋은 프로그램은 무한 자유가 있는 프로그램이 아닌 적절한 제약이 있는 프로그램이다.

 

형변환(캐스팅)

 

(cast-다른 물질을 녹여 특정 형태나 모양을 만드는 과정)

작은 범위에서 큰 범위로의 값은 허용함

이때, 사용자가 타입을 맞춰주지 않는 경우에는 자바에서 자동으로 형변환을 해줌(묵시적 형변환)

 

큰 범위의 값을 작은 범위로의 대입은 명시적 형변환이 필요하다. \

이때, 오버플로우 및 소수점 버림을 유의하고, 명시적 형변환을 사용하도록 해야한다.  

(명시적 형변환을 한다 하더라도 형변환 하기전의 변수값과 타입은 유지된다. )

 

 

타입의 범위 

 

int < long < double

 

자바에서의 계산

 

같은 타입끼리의 계산은 같은 타입의 결과를 나타낸다. 

 

서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다. 

 

 

 

 

 

 

 

 

 

 

 

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

배열  (0) 2024.07.05
사용자 입력  (1) 2024.07.05
반복문  (0) 2024.07.05
조건문  (0) 2024.07.05
연산자  (0) 2024.07.05

do-while문 구조

조건에 만족하지 않아도 한번은 코드를 처한다. 

더보기

do {

    // 코드

} while (조건식);

 

Continue

while(조건식){
	코드1;
    continue; // 즉시 조건식으로 이동한다. 
    코드2;
}

 

continue를 만날경우 즉시 조건식으로 가서 조건을 확인한다. 

 

향상된 for문 == for each

 

for(타입 변수명: 배열명) {
	System.out.println(변수명); // 예시, 배열의 원소를 출력함
}

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

사용자 입력  (1) 2024.07.05
스코프(변수의 접근 가능 범위), 형변환  (0) 2024.07.05
조건문  (0) 2024.07.05
연산자  (0) 2024.07.05
자바 자료구조 구현 - 큐, ArrayDeque  (0) 2024.03.08

 

기본 형태

public class test{
	public static void main(String[] args){
    int a = 19;
    
    if (a == 1) {
    	// 필요한 코드
    } else if (a == 2) {
    	// 필요한 코드
    } else{
    	// 필요한 코드
    }   
    }

}

 

 

if문의 명령이 한개만 있어도 가독성이나 유지보수성을 고려했을때 중괄호를 사용하는것이 좋다. 

 

 

자바 14이상의 새로운 case문 

public class test{
	public static void main(String[] args){
    int a = 1;
    
   	int ticket = switch (a){
    	case 1 -> 100;
        case 2 -> 200;
        case 3 -> 300;
        default -> 500;
    };
    
    System.out.println(ticket); // 100 출력
    
    }
}

 

 

삼항 연산자 == 조건 연산자 

public class test{
	public static void main(String[] args){
    int a = 19;
    
   	String result = (a>=19) ? "네" : "아니오"; // result는 "네" 가됨
}

 

문자열 비교

 

문자열을 비교할 때는 .equals() 메서드를 사용한다.

만약 ==을 사용할 경우 실패할 경우가 발생할 수 있기때문이다. 

 

public class Test1{
	public static void main(String[] args){
    	String str1 = "hi";
        String str2 = "hello";
        
        boolean result = "hello".equals("hello"); // 리터럴 비교, true
        boolean result1 = str1.equals("hi");		// true
        boolean result2 = str1.equals(str2);		// false
    	
    }
}

 

문장 완성 단축키 : ctrl+ shift+ enter

 

논리 연산자

  • &&: 두개의 피연산자가 모두 참이면 true를 반환, 둘 중 하나라도 거짓이면 false
  • ||: 두개의 피연산자중 하나라도 참이면 true를 반환, 둘 다 모두 거짓이면 false

 

삼항 연산자:  ? :

 

 

instanceof 연산자 

  • 객체의 타입을 반환한다. 

 

비트 연산자

  • 실무에서 사용할 일이 거의 없음. 그때그때 찾아보면 

 

'[프로그래머스]Java > Java입문' 카테고리의 다른 글

반복문  (0) 2024.07.05
조건문  (0) 2024.07.05
자바 자료구조 구현 - 큐, ArrayDeque  (0) 2024.03.08
자바 자료구조 구현 - 배열, ArrayList(리스트)  (0) 2024.03.08
자바 필수 문법 정리  (0) 2024.03.08

진도(1/10)

 

 

 

java.util 패키지

java.util패키지는 유용한 클래스들을 많이 가지고 있는 패키지

  • 날짜와 관련된 클래스인 Date, Calendar클래스
  • 자료구조와 관련된 컬렉션 프레임워크와 관련된 인터페이스와 클래스
  • deprecated란 더이상 지원하지 않으니 사용하지 않는 것이 좋다란 의미다.
  • Date클래스는 지역화를 지원하지 않는다. 지역화란 국가별로 현재 날짜와 시간은 다를 수 있는데, 그 부분을 지원하지 못한다.
  • 이런 문제를 해결하기 위하여 나온 클래스가 Calendar클래스. Calendar클래스는 자바 1.1에 등장하였다.
  • 지역화와 관련된 클래스들은 Locale로 시작되는 이름을 가진 클래스들입니다. 역시 1.1 이후에 등장한다.
  • List, Set, Collection, Map은 자료구조 즉 컬렉션 프레임워크와 관련된 인터페이스

 

진도(2/10)

 

컬렉션 프레임워크

 

프로그래밍을 잘 하기위해서는 이건 꼭 알아야

 

java.util패키지에는 자료를 다룰 수 있는 자료구조 클래스가 다수 존재합니다.
자료구조 클래스들을 컬렉션 프레임워크라고 한다.

  • 자료구조란 자료를 저장할 수 있는 구조
  • 책을 보관하기 위해서 책장을 이용하는 것처럼 다양한 자료들을 다양한 방식으로 관리하기 위한 방법이 필요한데, 이러한 방법을 제공하는 것을 자료구조, 컬렉션 프레임워크이다.
  • 컬렉션 프레임워크에서 가장 기본이 되는 interface는 Collection인터페이스
    • Collection인터페이스는 여기에 자료가 있다라는 것을 표현.
    • 중복도 허용하고, 자료가 저장된 순서도 기억하지 못하는 것이 Collection인터페이스.
    • Collection이 가지고 있는 대표적인 메소드는 add()-자료추가, size()-저장된 자료 크기, iterator()-자료꺼내기위한 메소드
    • Collection은 저장된 순서를 기억하지 못하기 때문에 "첫번째 자료를 달라, 두번째 자료를 달라"와 같은 기능을 가질 수 없다. * * Collection은 저장된 자료를 하나씩 하나씩 꺼낼 수 있는 Iterator라는 인터페이스를 반환한다.
      • Iterator는 꺼낼것이 있는지 없는지 살펴보는 hasNext()메소드하나씩 자료를 꺼낼때 사용하는 next()메소드를 가지고 있다.
  • Set자료구조는 중복을 허용하지 않는 자료구조를 표현하는 인터페이스
    • Collection인터페이스를 상속받는다.
    • Set인터페이스가 가지고 있는 add메소드는 같은 자료가 있으면 false, 없으면 true를 반환하는 add메소드를 가지고 있다.
  • List자료구조는 중복은 허용하면서 순서를 기억하는 자료구조를 표현.
    • Set인터페이스와 마찬가지로 Collection인터페이스를 상속받고 있다.
    • List는 순서를 기억하고 있기 때문에 0번째 1번째 n번째의 자료를 꺼낼 수 있는 get(int)메소드를 가지고 있다.
  • Map자료구조는 Key와 Value를 가지는 자료구조이다.
    • 저장할 때 put()메소드를 이용하여 key와 value를 함께 저장한다.
    • 원하는 값을 꺼낼때는 key를 매개변수로 받아들이는 get()메소드를 이용하여 값을 꺼낸다.
    • Map에 저장되어 있는 모든 Key들은 중복된 값을 가지면 안된다.
    • Key의 이런 특징 때문에 Map은 자신이 가지고 있는 모든 Key들에 대한 정보를 읽어들일 수 있는 Set을 반환하는 keySet()메소드를 가지고 있다.

 

진도(3/10)

 

Generic

 

 

Box 클래스

    public class Box {
        private Object obj;
        public void setObj(Object obj){
        this.obj = obj;
        }

        public Object getObj(){
        return obj;
        }
    }

BoxExam 클래스

    public class BoxExam {
        public static void main(String[] args) {
            Box box = new Box();
            box.setObj(new Object());
            Object obj = box.getObj();

            box.setObj("hello");
            String str = (String)box.getObj();
            System.out.println(str);

            box.setObj(1);
            int value = (int)box.getObj();
            System.out.println(value);
        }
    }
  • Box는 매개변수로 Object를 하나 받아들이고, Object를 반환한다.
  • Object를 받아들일 수 있다는 것은 Object의 후손이라면 무엇이든 받아들일 수 있다는 것이다.

Java5에는 Generic이라는 문법이 사용됨으로써 인스턴스를 만들때 사용하는 타입을 지정하는 문법이 추가

Generic을 이용하여 Box 클래스 수정

    public class Box<E> {
        private E obj;
        public void setObj(E obj){
            this.obj = obj;
        }

        public E getObj(){
            return obj;
        }
    }
  • 클래스 이름 뒤에 <E>가 제네릭을 적용한 것이다. Box는 가상의 클래스 E를 사용한다는 의미.
  • Object를 받아들이고, 리턴하던 부분이 E로 변경. E는 실제로 존재하는 클래스는 아니다.

Generic을 이용하여 수정한 Box를 이용하는 BoxExam클래스

    public class BoxExam {
        public static void main(String[] args) {
            Box<Object> box = new Box<>();
            box.setObj(new Object());
            Object obj = box.getObj();

            Box<String> box2 = new Box<>();
            box2.setObj("hello");
            String str = box2.getObj();
            System.out.println(str);

            Box<Integer> box3 = new Box<>();
            box3.setObj(1);
            int value = (int)box3.getObj();
            System.out.println(value);
        }
    }
  • 참조타입에 <Object> , <String>, <Integer>가 있는 것을 볼 수 있다.
  • 첫번째는 Object를 사용하는 Box를 인스턴스로 만들겠다는 의미
  • 두번째는 String을 사용하는 Box인스턴스를 만들겠다는 의미
  • 세번째는 Integer를 사용하는 Box인스턴스를 만든다는 의미

Generic을 사용함으로써 선언할때는 가상의 타입으로 선언하고, 사용시에는 구체적인 타입을 설정함으로써 다양한 타입의 클래스를 이용하는 클래스를 만들 수 있습니다. Generic을 사용하는 대표적인 클래스는 컬렉션 프레임워크와 관련된 클래스입니다.

 

진도(4/10)

 

Set

 

 

 

set은 중복이 없고, 순서도 없는 자료구조. Hashset과 TreeSet이 있다.

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;

    public class SetExam {
        public static void main(String[] args) {
            Set<String> set1 = new HashSet<>();

            boolean flag1 = set1.add("kim");
            boolean flag2 = set1.add("lee");
            boolean flag3 = set1.add("kim");

            System.out.println(set1.size());   //저장된 크기를 출력합니다. 3개를 저장하였지만, 이미 같은 값이 있었기 때문에 2개가 출력
            System.out.println(flag1);  //true
            System.out.println(flag2);  //true
            System.out.println(flag3);  //false

            Iterator<String> iter = set1.iterator();

            while (iter.hasNext()) {   // 꺼낼 것이 있다면 true 리턴.          
                String str = iter.next(); // next()메소드는 하나를 꺼낸다. 하나를 꺼내면 자동으로 다음것을 참조한다.
                System.out.println(str);
            }
        }
    }

 

진도(5/10)

 

실습

 

참고: set의 내용은 for each문 또는 Iterator를 활용해서 출력할 수 있습니다. for each문을 복습하려면 이 링크를 참고하세요.

 

 

진도(6/10)

 

실습 

 

진도(7/ 10)

 

List

 

 

list는 데이터의 중복이 있을 수 있고, 순서도 있다.

    import java.util.ArrayList;
    import java.util.List;

    public class ListExam {

        public static void main(String[] args) {
            List<String> list = new ArrayList<>();

            // list에 3개의 문자열을 저장합니다.
            list.add("kim");
            list.add("lee");
            list.add("kim");

            System.out.println(list.size()); //list에 저장된 자료의 수를 출력 (중복을 허용하므로 3 출력) 
            for(int i = 0; i < list.size(); i++){
                String str = list.get(i);
                System.out.println(str);
            }
        }   
    }

 

진도(8/ 10)

 

실습

 

진도(9/10)

 

Map

 

 

Map은 key와 value를 쌍으로 저장하는 자료구조 키는 중복될 수 없고, 값은 중복될 수 있다.

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;   
    public class MapExam {  
        public static void main(String[] args) {
            // Key, Value가 모두 String 타입인 HashMap인스턴스를 만듭니다.
            Map<String, String> map = new HashMap<>();

            // key와 value값을 put으로 저장합니다.
            map.put("001", "kim");
            map.put("002", "lee");
            map.put("003", "choi");
            // 같은 key가 2개 있을 수 없습니다. 첫번째로 저장했던 001, kim은 001, kang으로 바뀐다.
            map.put("001", "kang");

            // map에 저장된 자료의 수를 추력합니다. 3이 출력됩니다.
            System.out.println(map.size());

            // 키가 001, 002, 003인 값을 꺼내 출력합니다.
            System.out.println(map.get("001"));
            System.out.println(map.get("002"));
            System.out.println(map.get("003"));

            // map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
            Set<String> keys = map.keySet();
            // Set자료구조에 있는 모든 key를 꺼내기 위하여 Iterator를 구합니다.
            Iterator<String> iter = keys.iterator();
            while (iter.hasNext()) {
                // key를 꺼냅니다.
                String key = iter.next();
                // key에 해당하는 value를 꺼냅니다.
                String value = map.get(key);
                // key와 value를 출력합니다.
                System.out.println(key + " : " + value);
            }
        }
    }

 

진도(10/10)

 

실습

 

 

 

'[프로그래머스]Java > Java중급' 카테고리의 다른 글

파트2. java.lang 패키지 (8 / 8)  (0) 2024.06.24
파트1. Object 클래스 (2 / 2)  (0) 2024.06.24

진도(1/8)

java.lang 패키지/오토박싱

 

 

자바는 기본적으로 다양한 패키지를 지원한다.  그중에서 가장 중요한 패키지

  • java.lang패키지의 클래스는 import를 하지 않고도 사용할 수 있다.
  • java.lang패키지에는 기본형타입을 객체로 변환시킬때 사용하는 Wrapper클래스가 있다.
    • Boolean, Byte, Short, Integer, Long, Float, Double 클래스
  • 모든 클래스의 최상위 클래스인 Object도 java.lang패키지
  • 문자열과 관련된 String, StringBuffer, StringBuilder도 모두 java.lang패키지
  • 화면에 값을 출력할때 사용했던 System클래스도 java.lang패키지
  • 수학과 관련된 Math클래스도 java.lang패키지
  • Thread와 관련된 중요 클래스들이 java.lang패키지
  • 이외에도 다양한 클래스와 인터페이스가 java.lang패키지에 속해 있다.
    public class WrapperExam {
        public static void main(String[] args) {
            int i = 5; 
            Integer i2 = new Integer(5);
            Integer i3 = 5;     //오토박싱
            int i4 = i2.intValue();
            int i5 = i2;       //오토언박싱
        }
    }
  • 오토박싱(Auto Boxing)
    • Integer i3 = 5; 숫자 5는 원래 기본형이지만 자동으로 Integer형태로 변환된다.
  • 오토 언박싱(Auto unboxing)
    • int i5 = i2; Integer객체타입의 값을 기본형 int로 자동으로 변환되어 값을 할당한다.
  • 오토박싱(Auto Boxing),오토 언박싱(Auto unboxing) 은 JAVA 5부터 지원한다. 이 때 내부적으로 Wrapper클래스들이 사용된다.

 

진도(2/8)

 

실습

 

진도(3/8)

 

스트링버퍼

 

 

아무 값도 가지고 있지 않은 StringBuffer객체를 생성

    StringBuffer sb = new StringBuffer();
    // 해당 스트링 버퍼에 "hello", 공백, "world"를 차례대로 추가

    sb.append("hello");
    sb.append(" ");
    sb.append("world");
    // StringBuffer에 추가된 값을 toString()메소드를 이용하여 반환

    String str = sb.toString();
  • 출력결과 : hello world

StringBuffer가 가지고 있는 메소드들은 대부분 자기 자신, this를 반환

    StringBuffer sb2 = new StringBuffer();
    StringBuffer sb3 = sb2.append("hello");
    if(sb2 == sb3){
        System.out.println("sb2 == sb3");
    }
  • 자기 자신의 메소드를 호출하여 자기 자신의 값을 바꿔나가는 것을 메소드체이닝 이라고 한다.
  • StringBuffer클래스는 메소드 체인 방식으로 사용할 수 있도록 만들어져 있다.
        String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
        System.out.println(str2);
  • 앞에서 5줄로 작성했던 코드를 위와 같이 한 줄로 수정할 수 있습니다.
  • StringBuffer는 append메소드 외에도 길이를 구하거나, 자르거나 등의 다양한 메소드들을 가지고 있습니다.


진도(4/8)

 

실습

 

진도(5/8)

 

스트링 클래스의 문제점

 

 

String클래스는 문자열을 다룰때 사용하는 클래스

String클래스는 불변클래스 이다.

        String str1 = "hello world";
        String str2 = str1.substring(5);
        System.out.println(str1);
        System.out.println(str2);
  • 실행결과
    hello world
     world
  • 기존의 str1은 전혀 변화 없다.
  • substring메소드는 5번째 부터 문자열을 잘라서 새로운 문자열을 반환하는 메소드
  • str1자체는 전혀 변화가 없다.

String클래스를 사용할 때 가장 문제가 발생하는 경우는 다음과 같은 코드를 사용할 때 입니다.

    String str3 = str1 + str2;
    System.out.println(str3);
  • 실행결과
    hello world world

문자열과 문자열을 더하게 되면 내부적으로는 다음과 같은 코드가 실행

    String str4 = new StringBuffer().append(str1).append(str2).toString();
    System.out.println(str4);

문자열을 반복문 안에서 더하는 것은 성능상 문제가 생길 수 있으니 반드시 피하도록 합시다.

 

진도(6/8)

 

실습

 

 

문자열을 반복문 안에서 더하는 것은 성능상 문제가 생길 수 있으니 반드시 피해야 합니다.

 

 

진도(7/8)

 

Math

 

 

Math클래스는 이름 그대로 수학계산을 위한 클래스

코싸인, 싸인, 탄젠트, 절대값, 랜덤값을 구할 수 있는 클래스

  • Math클래스는 생성자가 private으로 되어 있기 때문에 new 연산자를 이용하여 객체를 생성할 수 없다.
  • 객체를 생성할 수는 없지만 모든 메소드와 속성이 static으로 정의되어 있기 때문에 객체를 생성하지 않고도 사용할 수 있다.
    public class MathExam {
        public static void main(String[] args) {
            int value1 = Math.max(5, 20);
            int value2 = Math.min(5, -5);
            int value3 = Math.abs(-10);
            double value4 = Math.random();
            double value5 = Math.sqrt(25);  
        }
    }


진도(8/8)

 

 

 

 

'[프로그래머스]Java > Java중급' 카테고리의 다른 글

파트3. java.util 패키지 (10 / 10)  (0) 2024.06.24
파트1. Object 클래스 (2 / 2)  (0) 2024.06.24

진도(1/2)

 

Object와 오버라이딩

 

 

  • Object클래스는 모든 클래스의 최상위 클래스
  • 아무것도 상속받지 않으면 자동으로 Object를 상속
  • Object가 가지고 있는 메소드는 모든 클래스에서 다 사용할 수 있다는 것을 의미
  • Object가 가진 메소드 
    • equals 객체가 가진 값을 비교할 때 사용
      • 비교할 기준은 프로그래머가 정해주면 됨
      • menu-> Source->Generate equals()
    • toString 객체가 가진 값을 문자열로 반환
    • hashCode 객체의 해시코드 값 반환
  • 위의 메소드는 사용자가 알맞게 오버라이딩 해서 사용해야함

 

 

진도(2/2)

 

'[프로그래머스]Java > Java중급' 카테고리의 다른 글

파트3. java.util 패키지 (10 / 10)  (0) 2024.06.24
파트2. java.lang 패키지 (8 / 8)  (0) 2024.06.24

+ Recent posts