목록Java (11)
개발 일기
public class Data { private int value; public Data(int value) { this.value = value; } public int getValue() { return value; }}public class JavaMemoryMain2 { public static void main(String[] args) { System.out.println("main start"); method1(); System.out.println("main end"); } private static void method1() { System.out.println("met..
메서드 영역: 클래스 정보를 보관한다.스택 영역: 실제 프로그램이 실행되는 영역이다. 메서드를 실행할 때 마다 하나씩 쌓인다.힙 영역: 객체(인스턴스)가 생성되는 영역. new 명령어를 사용하면 이 영역을 사용한다.풀어서 설명하면 메서드 영역은 붕어빵의 틀이고 힙 영역은 틀로부터 생성된 붕어빵이 존재하는 공간이다.(배열도 이 영역에 생성) 메서드 영역(Method Area)클래스 정보: 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드등 모든 실행코드가 존재한다.static 영역: static 변수를 보관한다.런타임 상수 풀: 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다.스택 영역(Stack Area)스택 프레임: 메서드를 호출할 때 마다 하나의 스팩 프레임이 쌓이고, 메서드가..
캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다.캡슐화를 통해서 직접적인 변경을 방지하거나 제한할 수 있다. 데이터를 숨겨라캡슐화에서 가장 필수로 숨겨야 하는 것은 속성(데이터)이다.객체 내부의 데이터를 외부에서 함부로 접근하게 두면, 클래스 안의 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다.객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.기능을 숨겨라객체의 기능 중에서 외부에서 사용하지 않고, 내부에서만 사용하는 기능들이있다.이런 기능도 모두 감추는 것이 좋다.꼭 필요한 기능한 외부에 노출하고 나머지 기능은 내부로 숨기는 것이 좋다.package access;public class BackAccount { ..
접근 제어자 이해 자바는 public, private 같은 접근 제어자를 제공한다.접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 매서드에 접근하는 것을 허용하거나 제한할 수 있다. package access;public class Speaker { int volume; Speaker(int volume){ this.volume = volume; } void volumeUp(){ if(volume >= 100){ System.out.println("볼륨이 최대치 입니다."); }else{ volume += 10; System.out.println("볼륨을 10 증가합니다."); ..
패키지 규칙패키지의 이름과 위치는 폴더(디렉토리) 위치와 같아야 한다. 패키지 이름은 모두 소문자를 사용한다.패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다. 예를 들어, com.company.myapp과 같이 사용한다.패키지와 계층 구조 패키지는 보통 다음과 같이 계층 구조를 이룬다. a > b, c이렇게 하면 다음과 같이 총 3개의 패키지가 존재한다.a, a.b, a.c 계층 구조상 a 패키지 하위에 a.b와 a.c 패키지가 있다.그런데 이것은 우리 눈에 보기에만 계층 구조이고, a와 a.b, a.c는 서로 완전히 다른 패키지이다.따라서 a 패키지의 클래스에서 a.b 패키지의 클래스가 필요하다면 import 해서 사용해야 한다. (반대 역시 import 필요)참고로 카테고리..
public class MemberConstruct { String name; int age; int grade; MemberConstruct(String name, int age, int grade) { System.out.println(name + age + grade); this.name = name; this.age = age; this.grade = grade; }} 위 코드에서 생성자란 MeberConstruct라고 할 수 있다.생성자는 매서드와 비슷하지만 다음과 같은 차이가 있다.생성자의 이름은 클래스 이름과 같아야한다.생성자는 반환 타입이 없다.나머지는 매서드와 같다.생성자 호출생성자는 인스턴스를 생성하고 나서 즉..
public class MemberInit { String name; int age; int grade; void initMember(String name, int age, int grade) { //여기서 this는 자기 자신의 인스턴스를 가르킨다. this.name = name; this.age = age; this.grade = grade; }} 위 코드를 살펴보면 매개변수에 정의한 name과 Member의 멤버 변수의 이름이 둘다 같으며 나머지 변수 이름도 같다. 멤버변수와 메서드의 매개변수가 이름이 같으면 이 둘을 구별해야 하는데 이 경우 멤버 변수보다 매개변수가 코드 블럭의 더 안쪽에 있기 때문에 매개변수가 우선순위를..
절차 지향 프로그래밍 - 이름 그대로 절차를 지향하며 실행 순서를 중요하게 생각하는 방식이다.프로그램의 흐름을 순차적으로 따르며 처리하고 "어떻게"를 중심으로 프로그래밍한다.객체 지향 프로그래밍 - 객체지를 지향하며 실제 세게의 사물이나 사건을 객체로 보고, 이러한 객첼들 간의 상호작용을 중심으로프로그래밍하는 방식이다. "무엇을" 중식으로 프로그래밍 한다.차이점 - 절차 지향은 해당 데이터에 대한 처리 방식이 분리되어있고, 객체 지향은 데이터와 그 데이터에 대한 행동이 하나의 '객체'안에 함께 포함되어 있다. public class MusicPlayerMain1 { public static void main(String[] args) { int volume = 0; bool..
public class ClassMethod { public static void main(String[] args) { Student student1 = createStudent("네임", 20, 50); Student student2 = createStudent("네임2", 99, 120); System.out.println("네임: " + student1.name); System.out.println("네임: " + student2.name); } static Student createStudent(String name, int age, int grade) { Student student = new Student(); ..
기본형 : 사용하는 값을 변수에 직접 넣을 수 있는 기본형(int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입)참조형 : 객체가 저장된 메모리의 위치를 가르치는 참조값을 넣을 수 있는 참조형(Student student1, int[ ] students와 같이 데이터에 접근하기 위한 참조를 저장하는 데이터 타입) 기본형int a = 10;int b = 5;int sum = a + b;기본형은 변수에 실제 사용하는 값이 담겨있어 연산이 가능 참조형Student s1 = new Student();Student s2 = new Student();s1 + s2 //오류 발생참조형은 변수에 객체의 위치인 참조값이 들어있어 계산에 사용될 수 없음 Student s1..