자바73 접근 제한자 (Public, Protected, Default, Private) 접근 제한은 성능보다는 "캡슐화"를 구현하는 개념입니다. 자기 자신의 클래스 외 다른 곳에서의 접근 가능 여부를 결정해 줍니다. [ 클래스(Class)의 접근제한자 ] 클래스의 접근제한자는 Public과 Default 2개가 있습니다. Default의 경우는 그냥 앞에 아무것도 안붙이면 Default(기본)로 인식합니다. 패키지가 같다는 의미는 가장 하위, 즉 클래스 파일이 속해 있는 폴더가 같다는 의미입니다. Public은 항상 모든 곳에서 접근이 가능하고 Default는 같은 패키지 안에서만 접근이 가능합니다. Public 클래스의 이름은 클래스 파일 이름과 동일해야 합니다. 즉, 파일 하나 당 Public 클래스 한 개가 되고 나머지는 Default 클래스가 되어 동일 패키지에서만 접근이 가능합.. ▸JAVA/기본 문법 2019. 12. 10. 이클립스 에디터 글자 색 바꾸기 현재 Darkest Dark 테마를 사용중인데 메소드 호출할 때의 글자 색과 변수 글자 색이 같아서 잘 구분이 되지 않습니다. 간단히 변수, 함수 등 모든 부분들에 대한 글자 색상을 마음대로 바꿀 수 있는 방법입니다. 먼저 Windows - Preferences에 들어가서 "color"를 검색합니다. 그리고 검색된 항목 중 "Java - Editor - Syntax Coloring"에 들어갑니다. 오른쪽 "Element" 밑의 "Java"를 열어주시고 원하는 부분의 색을 바꿔주시면 됩니다. 제가 바꾸고 싶은 부분은 "Static method invocations" 항목이네요. 정확히 어떤 항목인지 모르면 이것저것 다 바꿔보면서 테스트 해봐야하는데 원래 색상을 잊을 수도 있으니 바꿀 때 미리 현재 색을.. ▸JAVA/개발 TIP 2019. 12. 10. 기본 클래스 import가 되지 않을 때 입력값을 받기 위한 JOptionPane 클래스를 사용하기 위해 아래와 같은 코드를 짰습니다. package study.input; import javax.swing.JOptionPane; public class InputTest { public static void main(String[] args) { String id = JOptionPane.showInputDialog("입력해주세요"); } } 하지만 아래와 같이 빨간줄이 그이면서 아래와 같은 경고가 뜹니다. 즉, 해당 패키지와 클래스가 없다는 의미인 것 같습니다. 기본이라서 원래 그냥 돼야 하는 걸로 알고 있는데 없다고 하네요. Create class 'JOptionPane' in package 'javax.swing' 검색해봐도 정.. ▸JAVA/개발 TIP 2019. 12. 9. Java의 메모리 구조_메소드의 매개변수 [3/3] 이전 글에서 8가지 원시타입의 변수를 제외한 모든 변수는 참조 변수라고 했습니다. 이 구조를 이해하면 메소드 사용 시 실수를 피할 수 있습니다. C언어를 해보신 분들은 C언어의 함수와 포인터와 동일한 원리라고 이해하시면 됩니다. 아래 코드를 보시고 결과를 한 번 예측해보세요. package study.first; /* Public class */ public class Main { public static void main(String[] args) { String arr = "Hello"; print(arr); System.out.println(arr); } static void print(String text) { text += " world"; } } 정답은 "Hello"만 출력됩니다. C언어의 포.. ▸JAVA/기본 상식 2019. 12. 9. Java의 메모리 구조_자바가 상대적으로 느린 이유[2/3] C언어에 비해 Java가 느린 이유는 크게 2가지를 들 수 있을 것 같습니다. 첫 번째는 객체지향언어라는 특성 때문이고, 두 번째는 JVM이라는 가상 머신을 사용하기 때문입니다. 둘 다 개발자의 편의성을 위해 성능을 희생하고 있는데, 사실 하드웨어도 빨라지고 Java 자체의 소프트웨어도 워낙 발달해서 초기에 이슈가 됐던 성능 이슈가 잠잠해졌습니다. 하지만 여전히 하드웨어 스펙을 짱짱하게 넣지 못하는 소규모 장비 등에서는 C언어를 주로 사용한다고 합니다. [ 객체지향언어의 특성으로 인한 느림 ] Java에서는 클래스 단위로 모든 코드를 작성합니다. C언어와 같이 함수 단위가 아닙니다. 따라서 다른 클래스에 있는 일부 메소드나 정보를 사용하기 위해서는 전체 클래스를 인스턴스로 만들어 메모리에 저장해야 합니다.. ▸JAVA/기본 상식 2019. 12. 9. Java의 메모리 구조_기본 구조[1/3] 개발자 입장에서 프로그램이 어떻게 돌아가는지와 효율적인 메모리 관리를 어떻게 해야하는지에 대해 큰 줄기만 정리해보겠습니다. 가장 기본 언어이자 기본 구조인 C언어의 메모리 구조와 비교하면서 보시면 이해가 더 잘될 것 같습니다. 혹시 C언어의 메모리 구조 또는 스택/힙 메모리에 대해 잘 모르시는 분은 아래 두 개 글을 참고하시면 됩니다. 2019/12/05 - [C언어/기본상식] - C언어의 메모리_기본 구조 [1/2] 2019/12/05 - [C언어/기본상식] - C언어의 메모리_스택 메모리 [2/2] 먼저 소스코드를 작성하고 컴파일하면 JDK에 들어 있는 컴파일러가 바이트 코드로 번역해서 .class 파일을 만들어 줍니다. 바이트 코드는 기계가 못 읽고 Java만 알 수 있는 중간 언어입니다. 그리.. ▸JAVA/기본 상식 2019. 12. 9. 클래스, 인스턴스, 객체의 차이 혼용하거나 좁은 의미로 쓰기도 하지만 세 가지는 모두 다른 의미를 가지고 있습니다. 사실 클래스와 인스턴스는 의미가 명확한데 객체라는 것은 워낙 포괄적인 의미라 모호할 수 있으니 정확한 개념을 잡고 있어야 커뮤니케이션에 오류가 줄어들 것 같습니다. [ 클래스 ] 클래스가 어떻게 생겼는지 정해둔 양식지, 설계도 C언어의 구조체 정의와 같음 (실제로 사용하기 전 구조체 정의만 한 상태) 설문조사를 하기 위해 설문조사 항목(변수)와 절차(메소드)를 하나의 문서로 만들어서 컴퓨터에 저장해둔 상태가 클래스입니다. 즉, 아직 인쇄되진 않고 양식만 존재하는 상태입니다. [ 인스턴스 ] 클래스를 담은 일종의 클래스 변수 C언어 구조체에서 구조체 타입 변수 하나를 생성한 것과 동일 객체의 하위 개념 (같은 개념은 .. ▸JAVA/기본 상식 2019. 12. 9. 객체지향 언어의 특징(다형성) [4/4] 4. 다형성 하나의 클래스나 메소드가 다양한 방식으로 동작이 가능한 것을 의미 부모클래스가 자식클래스의 값으로 대체되는 오버라이딩 같은 메소드의 매개변수(parameter)에 따라 다르게 동작하는 오버로딩 다형성 또한 상속과 마찬가지로 객체지향 고유의 특징입니다. 예를 들어 C언어에서 아래와 같은 프로그램을 만들었다고 가정하겠습니다. 서로 입력값의 갯수 또는 타입이 다르기 때문에 모두 다른 함수로 만들어줘야 합니다. "인자값을 받아서 특정한 결과값을 출력한다"라는 공통적인 행위이지만, 각자 개별적이고 독립적인 함수(일종의 객체)로 실행됩니다. 우리가 한 파일에다가 함수들을 모아둘 순 있지만 기본적으로 저 함수들은 그냥 서로 연관성이 1도 없는 개별적 함수들로 존재합니다. 저런 게 10가지가 있다면.. ▸JAVA/기본 상식 2019. 12. 9. 객체지향 언어의 특징(상속) [3/4] 3. 상속 재사용성을 극대화시키기 위한 장치 부모 클래스의 속성을 그대로 물려받음 (물론 설정에 따라 완전히 같지 않을 수 있음) 상속의 개념은 매우 쉽습니다. 자식 클래스는 부모 클래스의 속성을 물려받도록 한다는 것이죠. C언에는 상속이라는 개념이 없습니다. 그냥 기존 함수 코드를 복사해서 붙여놓고 그 아래에 더 필요한 부분을 추가해줘야 합니다. 한 두개 정도라면 별 무리가 없지만 만약 100개의 함수에 공통된 부분이 10줄 존재한다면 코드 중복이 1000줄 발생하는 문제점이 생기죠. Java에서는 상속이라는 기능을 이용해서 위 과정을 매우 직관적이고 간단하게 만들어 줬습니다. 이미 만들어둔 코드의 재활용성을 극대화시키고 거기에 코드가 간결해지는 효과도 낼 수 있습니다. 오버라이딩 같은 기능과 함께.. ▸JAVA/기본 상식 2019. 12. 9. 객체지향 언어의 특징(캡슐화) [2/4] 2. 캡슐화 내부의 동작 방법을 단단한 케이스 안으로 숨기고 사용자에게는 사용방법만을 노출시킨다. 중요 정보를 숨겨(정보 은닉) 잘못된 수정을 막고, 사용자가 쉽게 사용할 수 있도록 만들어 줌 굳이 사용자가 알 필요가 없는 부분은 접근할 수 없도록 꽁꽁 싸서 캡슐안에 넣어둔다는 의미에서 캡슐화라고 합니다. 클래스 변수(필드)가 될 수도 있고 메소드가 될 수도 있습니다. 내가 만든 클래스에서 불필요한 곳에는 직접 접근할 수 없도록 하여 리소스의 공유와 보안 사이의 균형을 맞춰주는 것입니다. 적절한 예로 해쉬 사례를 들 수 있을 것 같습니다. 제가 어떤 문자열을 주면 해쉬값으로 바꿔주는 함수를 C언어로 하나 만든다고 해보겠습니다. 함수의 기본 뼈대는 "문자열 순서에 따라 아스키코드에 특정 값을 곱해서 더.. ▸JAVA/기본 상식 2019. 12. 9. 객체지향 언어의 특징(추상화) [1/4] 그럼 객체지향언어가 가지고 있는 대표적인 특징을 기준으로 C언어와 Java를 비교해보겠습니다. 1. 추상화 (Abstract) 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것 Java에서는 하나의 객체를 추상화하여 클래스를 만든다고 표현함 C언어에서는 구조체가 Java의 클래스에 가장 가까운 개념입니다. 어떠한 목적에 필요한 타입이 다른 여러 변수를 하나의 구조체에 묶어서 정의해둠으로써, 필요할 때 그 구조 전체를 가져다 쓰는 것이죠. 사실 변수들을 각자 따로 만들어서 써도 무방하지만 구조체를 이용하면 보다 직관적으로 데이터 구조를 확인하고 사용할 수 있습니다. 이 개념이 확장되어 발전된 것이 객체이며 Java의 클래스라고 볼 수 있습니다. 같은 구조의 정보를 담는 변수.. ▸JAVA/기본 상식 2019. 12. 9. 객체지향 언어와 절차지향 언어와의 차이 Java를 하면서 가장 먼저 알아야 할 객체지향언어의 개념을 정리해봤습니다. 절차지향 언어의 대표주자인 C언어와, 객체지향 언어의 대표주자인 Java를 기준으로 설명했습니다. 먼저 절차지향언어와 객체지향언어는 대립점에 있는 개념이 아닙니다. 모든 컴퓨터 언어는 기본적으로 절차(순서)에 따라 실행됩니다. 기본적으로 객체지향언어도 절차대로 수행되는 컴퓨터 언어입니다. 그저 더 중요시하는 "사상"이 다를 뿐입니다. 어떤 프로그램이라도 절차지향언어로 만들 수도, 객체지향 언어로 만들 수 있습니다. 만드는 과정이 조금 다를 뿐입니다. 예를 들어 된장찌개를 끓인다고 가정해보겠습니다. 춘향이는 절차를 지향해서 아래와 같이 순서대로 요리를 합니다. 길동이는 객체를 지향해서 아래와 같이 미리 재료를 다 준비해두고 한.. ▸JAVA/기본 상식 2019. 12. 9. 워크스페이스/프로젝트/패키지/클래스의 개념 및 명명 규칙 C에서 JAVA로 넘어오니, 해당 개념이 헷갈려서 정리해봅니다. 이클립스 기준입니다. 먼저 전체적인 구조는 아래와 같습니다. 실제 우리가 코딩을 하는 부분은 모두 "클래스(Class)"입니다. 나머지는 분류를 위한 일종의 카테고리라고 볼 수 있습니다. ※ 공통 명명 규칙 - 대소문자 구분이 됨 - 예약어(시스템에서 이미 사용하고 있는 이름)를 사용하면 안됨 - 숫자로 시작할 수 없음 - 특수문자는 '_'(언더바), '$'만 사용가능 [ 워크스페이스(WorkSpace) ] 하나의 프로그램 단위 규모가 큰(기능이 많은) 프로그램은 여러 실행파일(프로젝트)로 이루어질 수 있음 가장 상위 폴더로 생성됨 ※ 워크스페이스 명명(이름) 규칙 - 공통규칙에 따름 [ 프로젝트(Project) ] 하나의 실행파일 단위.. ▸JAVA/기본 상식 2019. 12. 9. 이전 1 2 3 4 5 다음 💲 추천 글 반응형