////
Search
😀

7월 5일(화)

'\0' 문자로서의 0 0 숫자로서의 0 NULL 포인터로서의 0

생성자란?

생성자는 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’이다.
인스턴스 변수의 초기화 작업에 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서 사용된다.
생성자의 특징
생성자의 이름은 클래스의 이름과 동일해야 한다.
생성자는 리턴 값이 없다.
생성자는 메서드처럼 클래스 내에서 선언되고, 오버 로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있다.
public class Practice2 { public static void main(String[] args) { int 엄지손가락_길이 = new 사람().a왼팔.a손.a엄지손가락.길이; System.out.println(엄지손가락_길이 + "cm"); // 출력 : 5cm } } class 사람 { 팔 a왼팔; 사람() { a왼팔 = new (); a왼팔.a손 = new (); a왼팔.a손.a엄지손가락 = new 손가락(); a왼팔.a손.a엄지손가락.길이 = 5; } } class{ 손 a손; } class{ 손가락 a엄지손가락; } class 손가락 { int 길이; }
JavaScript
복사

this의 사용

this는 현재 객체(자기 자신)을 참조하는 키워드이다.
public class Car { String name; int number; public Car(String name){ this.name = name; } }
JavaScript
복사
왼쪽의 this.name은 Car 클래스의 String name 변수를 뜻하며, 오른쪽의 name은 소괄호 안에 있는 String name이라는 뜻이다.
package hw0705; import java.util.Objects; public class question2 { public static void main(String[] args) { 병사 a병사 = new 병사(); a병사.이름 = "홍길동"; a병사.자기소개(); // 안녕하세요. 저는 홍길동 이병 입니다. a병사.공격(); // 홍길동 이병이 공격합니다.(공격력 : 7) a병사.진급(); a병사.자기소개(); // 안녕하세요. 저는 홍길동 일병 입니다. a병사.공격(); // 홍길동 일병이 공격합니다.(공격력 : 9) a병사.진급(); a병사.자기소개(); // 안녕하세요. 저는 홍길동 상병 입니다. a병사.공격(); // 홍길동 상병이 공격합니다.(공격력 : 11) } } class 병사 { String 이름; String 계급; int 공격력; 병사() { 계급 = "이병"; 공격력 = 7; } public void 자기소개() { //String 이름; 을 선언하고 출력문에서 this. 이름이 아닌 이름을 //호출한다면 자기소개 메서드 안의 이름이라는 인스턴스 변수를 가리킨다. System.out.println("안녕하세요. 저는 " + this.이름 + " " + this.계급 + "입니다. (공격력 : " + this.공격력 + ")"); } public void 진급() { if (Objects.equals(this.계급, "이병")) { this.계급 = "일병"; } else if (Objects.equals(this.계급, "일병")) { this.계급 = "상병"; } else if (Objects.equals(this.계급, "상병")) { this.계급 = "병장"; } } public void 공격() { this.공격력 += 2; }
JavaScript
복사
위 코드를 통해서 생성자의 쓰임과 개념, this의 사용법에 대해서 간략하게 알아보자.
병사라는 클래스 안에 병사라는 생성자를 선언함으로써, 인스턴스 변수 “계급”, “공격력”의 디폴트 값(각각 이병, 7)을 선언해준다.
그리고 자기소개 메서드안에 있는 [this.이름]은 병사 클래스 내의 이름 인스턴스 변수를 가리키며, 만약 자기소개 메서드 안에 새로운 이름이라는 변수를 선언했을 시에 this를 사용하지 않는다면 자기소개 메서드 안의 이름이라는 변수를 가리킨다.

TDD 간단한 사칙연산 계산기 만들기

Calculator.java
package com.ll.exam; public class Calculator { public static int run(String s) { if (s.contains(" + ")) { return runPlus(s); } else if (s.contains(" - ")) { return runMinus(s); } else if (s.contains(" * ")) { return runMulitply(s); } return runDivide(s); } private static int runPlus(String s) { String[] sBits = s.split(" \\+ "); int no1 = Integer.parseInt(sBits[0]); int no2 = Integer.parseInt(sBits[1]); return no1 + no2; } private static int runMinus(String s) { String[] sBits = s.split(" \\- "); int no1 = Integer.parseInt(sBits[0]); int no2 = Integer.parseInt(sBits[1]); return no1 - no2; } private static int runMulitply(String s) { String[] sBits = s.split(" \\* "); int no1 = Integer.parseInt(sBits[0]); int no2 = Integer.parseInt(sBits[1]); return no1 * no2; } private static int runDivide(String s) { String[] sBits = s.split(" \\/ "); int no1 = Integer.parseInt(sBits[0]); int no2 = Integer.parseInt(sBits[1]); return no1 / no2; } }
JavaScript
복사
AppTest.java
package com.ll.exam; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class AppTest { @Test public void 더하기() { int rs = Calculator.run("1 + 2"); assertEquals(3, rs); } @Test public void 더하기_2() { int rs = Calculator.run("20 + 20"); assertEquals(40, rs); } @Test public void 더하기_3() { int rs = Calculator.run("10 + 10"); assertEquals(20, rs); } @Test public void 빼기() { int rs = Calculator.run("1 - 2"); assertEquals(-1, rs); } @Test public void 곱하기() { int rs = Calculator.run("(1 * 2)"); assertEquals(2, rs); } @Test public void 나누기() { int rs = Calculator.run("4 / 2"); assertEquals(2, rs); } @Test public void 사칙연산() { int rs = Calculator.run("4 / 2"); assertEquals(2, rs); } }
JavaScript
복사