목록개발공부/JAVA (63)
개발자 도전기

자바에서 데이터 타입은 기본 타입과 참조 타입으로 나뉜다. 기본 타입으로 선언된 변수는 값 자체를 저장하고 있지만 참조 타입으로 선언된 변수는 객체가 생성된 메모리 번지를 저장한다. 참조 타입으로는 배열, 열거, 클래스, 인터페이스가 있다. 변수들은 모두 스택이라는 메모리 영역에 생성되는데 참조 타입의 경우 힙 메모리 영역의 참조 타입 번지를 저장한다. 참조 번지의 값을 알고 싶으면 System.identityHashcode()를 사용하면 된다 // new : 메모리 공간 확보 // 연산결과 : 확보된 메모리 공간 위치(주소, hashCode) int[] arr = new int[]{2, 3}; // arr가 가진 실제 값을 알고 싶을 때 // System.identityHashCode 메소드 사용 in..
break break문은 반복문을 실행 중지하거나 조건문인 switch문을 종료할 때 사용된다. 조건식에 따라 if, while 문을 종료할 때도 사용한다 for( ... ){ System.out.println("statement 1"); System.out.println("statement 2"); System.out.println("statement 3"); break; //종료 System.out.println("statement 4"); // 실행되지 않음 } 만약 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다. 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름을 붙이고 'break 이름;'을 사용하면 된다. publ..
do-while문은 while문과 동일하지만 처음 한 번은 무조건 do {} 부분을 실행한다는 점에서 다르다. do {}부분을 먼저 실행시키고 do{} 부분의 실행 결과에 따라서 반복실행을 결정하는 경우에 사용한다. do{ ...실행문 } while(조건식); //조건식이 true일 경우 실행문 실행, 조건식이 false일 경우 do-while문 종료 예제 import java.util.Scanner; public class DoWhileExample { public static void main(String[] args) { System.out.println("메시지를 입력하세요"); System.out.println("프로그램을 종료하려면 q를 입력하세요"); Scanner scanner = new ..
switch문은 입력 변수값과 case 값이 일치할 때 실행되는 조건문이다. if문보다 사용범위는 제한적이지만 값에 따라 출력되는 내용이 다양할 때 사용하면 좋다. switch문은 다음과 같이 사용할 수 있다. switch ("서울") { // 값이 "서울" case "서울": System.out.println("statement 2"); break; // 값이 "제주" case "제주": System.out.println("statement 3"); break; // 값이 "부산" case "부산": System.out.println("statement 4"); break; } 변수에 맞는 case를 만나면 해당 코드를 실행하고 break를 통해 switch문을 빠져나간다. 만약 break를 사용하지 ..
인스턴스화의 과정에서 new 뒤에 생성자를 붙임으로써 인스턴스를 생성할 수 있다. 이때 new 뒤에 오는 생성자는 컴파일러에 의해 생성되는 기본 생성자이다. 그런데 우리가 생성자를 새로 지정할 경우 이 기본 생성자는 사라지게 된다. 자식 클래스의 경우 부모 생성자를 호출해서 사용하므로 기본 생성자가 없으면 오류를 일으킬 수 있는데 super() 생성자를 사용하면 부모 클래스의 기본 생성자가 사라져도 오류가 발생하지 않는다. super 키워드는 자식 생성자에서 부모 생성자로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다. package Inheritance; class Calculator { int left, right; public Calculator (int left, int right) { t..

상속이란? 부모 객체의 메소드나 변수를 자식 객체가 상속받아 사용하는 것이고 객체를 자신이 만들지 않았거나, 이미 해당 객체가 여러곳에서 사용되고 있을 경우에 불필요한 과정들이 일어나지 않게 하기 위해서 필요하다. '부모 객체명 extends 자식 객체명'으로 사용할 수 있으며 부모에게 상속받은 자식이 부모가 되어 상속을 이어나가는 것도 가능하다 package Inheritance; class Calculator { int left, right; public void setOprands (int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.left+this.right..
생성자란? 인스턴스 초기화를 할 수 있도록 만들어진, 클래스와 이름이 같은 메소드 (초기화: 변수를 선언하고 최초로 값을 지정하는 것) class Calculator{ int left, right; public Calculator(int left, int right){ this.left = left; this.right = right; } public void sum() { System.out.println(this.left + this.right); } public void avg() { System.out.println((this.left + this.right)/2); } } public class CalculatorDemo3 { public static void main(String[] args)..
프로그램의 규모가 커지게 되면 변수의 이름이 겹치는 문제가 발생한다. 이때문에 변수의 범위를 제한하는 유효범위라는 개념이 생겨났다. 클래스 내부에 선언된 변수를 전역변수(global variables)라 한다. 그리고 메소드 내부에서 동작하는 변수를 지역변수(local variables)라 한다. 전역변수와 지역변수가 충돌한다면 지역변수가 우선순위를 가진다. 또, 지역변수가 없다면 전역변수가 그 자리를 메꾸게 된다. 변수명 앞에 this. 를 붙이면 전역변수를 의미한다. public class ScopeDemo2 { static int i; static void a() { i = 0; } public static void main(String[] args) { for(i = 0;i
맴버란? 클래스 맴버와 인스턴스 맴버의 구분 -객체의 맴버란 메소드와 변수로 나눌 수 있다. -앞에 static이 붙은 클래스 맴버와 그렇지 않은 인스턴스 맴버로 구분한다 인스턴스는 new 연산자를 통해 생성하여 참조변수 값에 담을 수 있다. Tv t = new Tv(); 에서 t는 참조변수, new는 연산자, Tv()는 생성자다. 클래스 맴버 클래스 메소드 인스턴스를 통하지 않고 클래스에서 바로 함수에 접근할 수 있다는 특징이 있다. '클래스 명.메소드 명()'으로 호출한다. 클래스 변수 인스턴스 변수가 같은 메소드에서 변수값을 다르게 주기 위해 사용된다면 클래스 변수는 고정된 변수값을 주기 위해 사용한다. '클래스명.변수명'으로 호출한다 인스턴스 맴버 인스턴스 메소드 인스턴스를 생성해 인스턴스마다 같..
메소드를 사용하면 코드를 재활용 할 수 있다. 그러나 메소드를 이용한 재활용에서는 변수명이 겹칠 수 있다는 위험성이 있다. 이를 피하면서 반복적으로 사용되는 변수와 메소드를 재활용 하기 위해 객체를 사용할 수 있다. 클래스란 객체를 만들 수 있는 설계도이다. 인자인 상태와 메소드인 행위로 나뉘어져 있다. 이 클래스 명을 활용해서 '클래스명 변수명 = new 클래스명'의 형식으로 새로운 변수에 담을 수 있다. 이렇게 만들어진 객체를 인스턴스라고 한다. 이때, 클래스명은 하나의 데이터타입이 된다. public class Calculator { int left, right; public void setOprands(int left ,int right) { this.left = left; this.right =..