클래스 내에 선언된 클래스 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다. 장점 내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근할 수 있다 코드가 간결해진다 외부적으로 불필요한 데이터를 감출 수 있어 캡슐화에 유용 내부 클래스의 종류 class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 } static class StaticInner { // 정적 내부 클래스 } void run() { class LocalInner { // 지역 내부 클래스 } } } 종류 선언 위치 사용 가능한 변수 인스턴스 내부 클래스(instance inner class) 외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 인스턴스 변수, 외부 전역 변수..
객체를 생성하는 역할을 하는 클래스의 구성요소 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드 new 키워드를 사용하여 객체를 생성할 때에 호출되는 것이 사실 생성자이다. 생성자라는 이름 때문에 생성자가 인스턴스를 생성하는 역할을 한다는 오해가 발생하는데, 사실이 아니다 인스턴스 생성을 담당하는 것은 new 키워드이며, 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드이다. 생성자는 메서드와 비슷한 구조를 가지고 있지만 크게 두 가지 부분에서 큰 차이를 갖는다. 생성자의 이름은 반드시 클래스의 이름과 같아야 한다 생성자는 리턴 타입이 없다. (void 키워드도 사용하지 않는다. 리턴하지 않는다는 의미의 void와는 다르게 아예 리턴 타입 자체가 존재하지 않는다.) 클래스명(매개변수) ..
하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것 자바 가상 머신은 메서드의 이름 또는 매개변수의 타입이 다르면 다른 메서드라고 인식한다. 메서드 오버로딩을 하려면 같은 이름의 메서드명 매개변수의 개수나 타입이 다름 public class Overloading { public static void main(String[] args) { Shape s = new Shape(); // 객체 생성 s.area(); // 메서드 호출 s.area(5); s.area(10,10); s.area(6.0, 12.0); } } class Shape { public void area() { // 메서드 오버로딩. 같은 이름의 메서드 4개. System.out.println("넓이"); } public voi..
특정 작업을 수행하는 일련의 명령문들의 집합 메서드는 클래스의 기능에 해당하는 내용들을 담당한다. 크게 머리에 해당하는 메서드 시그니처(method signature)와 몸통에 해당하는 메서드 바디(method body)로 구분된다. 기본적인 구조는 다음과 같다 자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처 메서드 내용 // 메서드 바디 } 반환 타입 : 메서드가 어떤 타입을 반환하는 가 메서드명 : 매서드 이름 매개 변수 : 해당 작업을 수행하기 위한 재료에 대한 정보 public static int add(int x, int y) { // 메서드 시그니처 int result = x + y; // 메서드 바디 return result; } 메서드의 반환 타입이 void가 아닌 경우에..
클래스에 포함된 변수 자바에서 변수는 클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 지역 변수(lv, local variable)로 구분될 수 있다. 일반적으로 필드라고 부르는 것은 클래스 변수와 인스턴스 변수이며, 이 둘은 다시 static 키워드의 유무로 구분된다. static 키워드가 붙으면 -> 클래스 변수 없으면 -> 인스턴스 변수 이 세 가지 유형의 변수들은 주로 선언된 위치에 따라 그 종류가 결정되며 각각의 유효 범위를 가지게 된다. class Example { int instanceVariable; // 인스턴스 변수 static int classVariable; // 클래스 변수(static 변수, 공유변수) void metho..
객체지향 프로그래밍이란? 프로그래밍에서 필요한 데이터를 한 데 모아 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 협력과 유기적인 상호작용을 통해 특정 기능을 구성하는 프로그래밍 방법론 클래스 (Class) 객체를 정의한 '설계도' 또는 '틀' 객체를 생성하는 데 사용 기본 문법 // 기본구성 class 클래스명 { -- 내용 -- } 구성 요소 1. 필드 - 클래스의 속성을 나타내는 변수 2. 메서드 - 클래스의 기능을 나타내는 함수 3. 생성자 - 클래스의 객체를 생성 4. 이너 클래스 - 클래스 내부의 클래스 public class ExampleCalss { int x = 10; // 필드 void printHello() {...} // 메서드 ExampleClass {...} // ..
while문 조건식이 true일 경우 실행문을 반복해서 실행 while(조건식) { 실행문 } int i = 0; while (i < 10) { // i가 10이 될때까지 계속해서 실행문을 반복 i += 1; System.out.print(i + " "); } // 1 2 3 4 5 6 7 8 9 10 조건문이 계속 true 라면? while (true) { System.out.println("언제 멈추냐?"); } // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? // 언제 멈추냐? 영원히 반복 do-while문 while문과 동일하게 조건식의 참 거짓 여부..
if If 문의 소괄호 안의 값이 boolean 값으로 평가될 수 있는 조건식을 넣고, 중괄호 안의 실행 블록은 조건식이 참일 때 실행. if (조건식) { // 조건식이 참이라면 실행 } int a = 3; if (a > 2) { System.out.println("a는 2보다 큽니다."); } if ... else 문 조건식의 결과에 따라 실행 블록을 선택 if 문의 조건식이 true이면 해당 블록이 실행되고, false이면 다음으로 넘어가 else if 문의 조건식을 검사 else if 문의 모든 조건식이 false라면, else 문의 블록 실행 if(조건식1) { // 조건식1이 참이라면, 실행 } else if (조건식2) { // 조건식1이 참이 아니면서 조건식2가 참일 때, 실행 // els..
콘솔 출력 System.out.print() 소괄호 안의 내용을 출력 (줄 바꿈을 하지 않음) System.out.print("안녕") System.out.print("반가워") // 안녕반가워 System.out.println() 소괄호 안의 내용을 출력 후 줄을 바꿈 System.out.println("안녕") System.out.println("반가워") // 안녕 // 반가워 System.out.printf() 지시자를 이용해 변수의 값을 여러 형식으로 출력 System.out.printf("%s%n", "Hello JAVA"); // 줄바꿈 System.out.printf("%s%n", "Kim" + "eroom"); System.out.printf("%d%n", 3+6); System.out...